diff --git a/NOTICE b/NOTICE
deleted file mode 120000
index bea2ca2..0000000
--- a/NOTICE
+++ /dev/null
@@ -1 +0,0 @@
-licenses/gcc-4.8.3/COPYING
\ No newline at end of file
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..d020a8c
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,14340 @@
+
+The newlib subdirectory is a collection of software from several sources.
+
+Each file may have its own copyright/license that is embedded in the source 
+file.  Unless otherwise noted in the body of the source file(s), the following copyright
+notices will apply to the contents of the newlib subdirectory:
+
+(1) Red Hat Incorporated
+
+Copyright (c) 1994-2009  Red Hat, Inc. All rights reserved.
+
+This copyrighted material is made available to anyone wishing to use,
+modify, copy, or redistribute it subject to the terms and conditions
+of the BSD License.   This program is distributed in the hope that 
+it will be useful, but WITHOUT ANY WARRANTY expressed or implied, 
+including the implied warranties of MERCHANTABILITY or FITNESS FOR 
+A PARTICULAR PURPOSE.  A copy of this license is available at 
+http://www.opensource.org/licenses. Any Red Hat trademarks that are
+incorporated in the source code or documentation are not subject to
+the BSD License and may only be used or replicated with the express
+permission of Red Hat, Inc.
+
+(2) University of California, Berkeley
+
+Copyright (c) 1981-2000 The Regents of the University of California.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, 
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of the University nor the names of its contributors 
+      may be used to endorse or promote products derived from this software 
+      without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+OF SUCH DAMAGE.
+
+(3) David M. Gay (AT&T 1991, Lucent 1998)
+
+The author of this software is David M. Gay.
+
+Copyright (c) 1991 by AT&T.
+
+Permission to use, copy, modify, and distribute this software for any
+purpose without fee is hereby granted, provided that this entire notice
+is included in all copies of any software which is or includes a copy
+or modification of this software and in all copies of the supporting
+documentation for such software.
+
+THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
+WARRANTY.  IN PARTICULAR, NEITHER THE AUTHOR NOR AT&T MAKES ANY
+REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
+OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
+
+-------------------------------------------------------------------
+
+The author of this software is David M. Gay.
+
+Copyright (C) 1998-2001 by Lucent Technologies
+All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and
+its documentation for any purpose and without fee is hereby
+granted, provided that the above copyright notice appear in all
+copies and that both that the copyright notice and this
+permission notice and warranty disclaimer appear in supporting
+documentation, and that the name of Lucent or any of its entities
+not be used in advertising or publicity pertaining to
+distribution of the software without specific, written prior
+permission.
+
+LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
+IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
+SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
+IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
+
+
+(4) Advanced Micro Devices
+
+Copyright 1989, 1990 Advanced Micro Devices, Inc.
+
+This software is the property of Advanced Micro Devices, Inc  (AMD)  which
+specifically  grants the user the right to modify, use and distribute this
+software provided this notice is not removed or altered.  All other rights
+are reserved by AMD.
+
+AMD MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS
+SOFTWARE.  IN NO EVENT SHALL AMD BE LIABLE FOR INCIDENTAL OR CONSEQUENTIAL
+DAMAGES IN CONNECTION WITH OR ARISING FROM THE FURNISHING, PERFORMANCE, OR
+USE OF THIS SOFTWARE.
+
+So that all may benefit from your experience, please report  any  problems
+or  suggestions about this software to the 29K Technical Support Center at
+800-29-29-AMD (800-292-9263) in the USA, or 0800-89-1131  in  the  UK,  or
+0031-11-1129 in Japan, toll free.  The direct dial number is 512-462-4118.
+
+Advanced Micro Devices, Inc.
+29K Support Products
+Mail Stop 573
+5900 E. Ben White Blvd.
+Austin, TX 78741
+800-292-9263
+
+(5) 
+
+(6)
+
+(7) Sun Microsystems
+
+Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+
+Developed at SunPro, a Sun Microsystems, Inc. business.
+Permission to use, copy, modify, and distribute this
+software is freely granted, provided that this notice is preserved.
+
+(8) Hewlett Packard
+
+(c) Copyright 1986 HEWLETT-PACKARD COMPANY
+
+To anyone who acknowledges that this file is provided "AS IS"
+without any express or implied warranty:
+    permission to use, copy, modify, and distribute this file
+for any purpose is hereby granted without fee, provided that
+the above copyright notice and this notice appears in all
+copies, and that the name of Hewlett-Packard Company not be
+used in advertising or publicity pertaining to distribution
+of the software without specific, written prior permission.
+Hewlett-Packard Company makes no representations about the
+suitability of this software for any purpose.
+
+(9) Hans-Peter Nilsson
+
+Copyright (C) 2001 Hans-Peter Nilsson
+
+Permission to use, copy, modify, and distribute this software is
+freely granted, provided that the above copyright notice, this notice
+and the following disclaimer are preserved with no changes.
+
+THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.
+
+(10) Stephane Carrez (m68hc11-elf/m68hc12-elf targets only)
+
+Copyright (C) 1999, 2000, 2001, 2002 Stephane Carrez (stcarrez@nerim.fr)
+
+The authors hereby grant permission to use, copy, modify, distribute,
+and license this software and its documentation for any purpose, provided
+that existing copyright notices are retained in all copies and that this
+notice is included verbatim in any distributions. No written agreement,
+license, or royalty fee is required for any of the authorized uses.
+Modifications to this software may be copyrighted by their authors
+and need not follow the licensing terms described here, provided that
+the new terms are clearly indicated on the first page of each file where
+they apply.
+
+(11) Christopher G. Demetriou
+
+Copyright (c) 2001 Christopher G. Demetriou
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote products
+   derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(12) SuperH, Inc.
+
+Copyright 2002 SuperH, Inc. All rights reserved
+
+This software is the property of SuperH, Inc (SuperH) which specifically
+grants the user the right to modify, use and distribute this software
+provided this notice is not removed or altered.  All other rights are
+reserved by SuperH.
+
+SUPERH MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO
+THIS SOFTWARE.  IN NO EVENT SHALL SUPERH BE LIABLE FOR INDIRECT, SPECIAL,
+INCIDENTAL OR CONSEQUENTIAL DAMAGES IN CONNECTION WITH OR ARISING FROM
+THE FURNISHING, PERFORMANCE, OR USE OF THIS SOFTWARE.
+
+So that all may benefit from your experience, please report any problems
+or suggestions about this software to the SuperH Support Center via
+e-mail at softwaresupport@superh.com .
+
+SuperH, Inc.
+405 River Oaks Parkway
+San Jose
+CA 95134
+USA
+
+(13) Royal Institute of Technology
+
+Copyright (c) 1999 Kungliga Tekniska Högskolan
+(Royal Institute of Technology, Stockholm, Sweden).
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+3. Neither the name of KTH nor the names of its contributors may be
+   used to endorse or promote products derived from this software without
+   specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(14) Alexey Zelkin
+
+Copyright (c) 2000, 2001 Alexey Zelkin <phantom@FreeBSD.org>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+(15) Andrey A. Chernov
+
+Copyright (C) 1997 by Andrey A. Chernov, Moscow, Russia.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+(16) FreeBSD
+
+Copyright (c) 1997-2002 FreeBSD Project.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+(17) S. L. Moshier
+
+Author:  S. L. Moshier.
+
+Copyright (c) 1984,2000 S.L. Moshier
+
+Permission to use, copy, modify, and distribute this software for any
+purpose without fee is hereby granted, provided that this entire notice
+is included in all copies of any software which is or includes a copy
+or modification of this software and in all copies of the supporting
+documentation for such software.
+
+THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
+WARRANTY.  IN PARTICULAR,  THE AUTHOR MAKES NO REPRESENTATION
+OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS
+SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
+
+(18) Citrus Project
+
+Copyright (c)1999 Citrus Project,
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+(19) Todd C. Miller
+
+Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote products
+   derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
+THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(20) DJ Delorie (i386)
+Copyright (C) 1991 DJ Delorie
+All rights reserved.
+
+Redistribution, modification, and use in source and binary forms is permitted
+provided that the above copyright notice and following paragraph are
+duplicated in all such forms.
+
+This file is distributed WITHOUT ANY WARRANTY; without even the implied
+warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+(21) Free Software Foundation LGPL License (*-linux* targets only)
+
+   Copyright (C) 1990-1999, 2000, 2001    Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Mark Kettenis <kettenis@phys.uva.nl>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301 USA.
+
+(22) Xavier Leroy LGPL License (i[3456]86-*-linux* targets only)
+
+Copyright (C) 1996 Xavier Leroy (Xavier.Leroy@inria.fr)
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Library General Public License for more details.
+
+(23) Intel (i960)
+
+Copyright (c) 1993 Intel Corporation
+
+Intel hereby grants you permission to copy, modify, and distribute this
+software and its documentation.  Intel grants this permission provided
+that the above copyright notice appears in all copies and that both the
+copyright notice and this permission notice appear in supporting
+documentation.  In addition, Intel grants this permission provided that
+you prominently mark as "not part of the original" any modifications
+made to this software or documentation, and that the name of Intel
+Corporation not be used in advertising or publicity pertaining to
+distribution of the software or the documentation without specific,
+written prior permission.
+
+Intel Corporation provides this AS IS, WITHOUT ANY WARRANTY, EXPRESS OR
+IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE.  Intel makes no guarantee or
+representations regarding the use of, or the results of the use of,
+the software and documentation in terms of correctness, accuracy,
+reliability, currentness, or otherwise; and you rely on the software,
+documentation and results solely at your own risk.
+
+IN NO EVENT SHALL INTEL BE LIABLE FOR ANY LOSS OF USE, LOSS OF BUSINESS,
+LOSS OF PROFITS, INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES
+OF ANY KIND.  IN NO EVENT SHALL INTEL'S TOTAL LIABILITY EXCEED THE SUM
+PAID TO INTEL FOR THE PRODUCT LICENSED HEREUNDER.
+
+(24) Hewlett-Packard  (hppa targets only)
+
+(c) Copyright 1986 HEWLETT-PACKARD COMPANY
+
+To anyone who acknowledges that this file is provided "AS IS"
+without any express or implied warranty:
+    permission to use, copy, modify, and distribute this file
+for any purpose is hereby granted without fee, provided that
+the above copyright notice and this notice appears in all
+copies, and that the name of Hewlett-Packard Company not be
+used in advertising or publicity pertaining to distribution
+of the software without specific, written prior permission.
+Hewlett-Packard Company makes no representations about the
+suitability of this software for any purpose.
+
+(25) Henry Spencer (only *-linux targets)
+
+Copyright 1992, 1993, 1994 Henry Spencer.  All rights reserved.
+This software is not subject to any license of the American Telephone
+and Telegraph Company or of the Regents of the University of California.
+
+Permission is granted to anyone to use this software for any purpose on
+any computer system, and to alter it and redistribute it, subject
+to the following restrictions:
+
+1. The author is not responsible for the consequences of use of this
+   software, no matter how awful, even if they arise from flaws in it.
+
+2. The origin of this software must not be misrepresented, either by
+   explicit claim or by omission.  Since few users ever read sources,
+   credits must appear in the documentation.
+
+3. Altered versions must be plainly marked as such, and must not be
+   misrepresented as being the original software.  Since few users
+   ever read sources, credits must appear in the documentation.
+
+4. This notice may not be removed or altered.
+
+(26) Mike Barcroft
+
+Copyright (c) 2001 Mike Barcroft <mike@FreeBSD.org>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+(27) Konstantin Chuguev (--enable-newlib-iconv)
+
+Copyright (c) 1999, 2000
+   Konstantin Chuguev.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+   iconv (Charset Conversion Library) v2.0
+
+(28) Artem Bityuckiy (--enable-newlib-iconv)
+
+Copyright (c) 2003, Artem B. Bityuckiy, SoftMine Corporation.
+Rights transferred to Franklin Electronic Publishers.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+(29) IBM, Sony, Toshiba (only spu-* targets)
+
+  (C) Copyright 2001,2006,
+  International Business Machines Corporation,
+  Sony Computer Entertainment, Incorporated,
+  Toshiba Corporation,
+
+  All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the names of the copyright holders nor the names of their
+      contributors may be used to endorse or promote products derived from this
+      software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+  POSSIBILITY OF SUCH DAMAGE.
+
+(30) - Alex Tatmanjants (targets using libc/posix)
+
+  Copyright (c) 1995 Alex Tatmanjants <alex@elvisti.kiev.ua>
+ 		at Electronni Visti IA, Kiev, Ukraine.
+ 			All rights reserved.
+ 
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+  1. Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+  2. Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in the
+     documentation and/or other materials provided with the distribution.
+ 
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND
+  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE
+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+  SUCH DAMAGE.
+
+(31) - M. Warner Losh (targets using libc/posix)
+
+  Copyright (c) 1998, M. Warner Losh <imp@freebsd.org>
+  All rights reserved.
+ 
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+  1. Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+  2. Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in the
+     documentation and/or other materials provided with the distribution.
+ 
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+  SUCH DAMAGE.
+
+(32) - Andrey A. Chernov (targets using libc/posix)
+
+  Copyright (C) 1996 by Andrey A. Chernov, Moscow, Russia.
+  All rights reserved.
+ 
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+  1. Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+  2. Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in the
+     documentation and/or other materials provided with the distribution.
+ 
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND
+  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+  SUCH DAMAGE.
+
+(33) - Daniel Eischen (targets using libc/posix)
+
+  Copyright (c) 2001 Daniel Eischen <deischen@FreeBSD.org>.
+  All rights reserved.
+ 
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+  1. Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+  2. Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in the
+     documentation and/or other materials provided with the distribution.
+ 
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+  SUCH DAMAGE.
+
+
+(34) - Jon Beniston (only lm32-* targets)
+
+ Contributed by Jon Beniston <jon@beniston.com>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
+
+(35) - ARM Ltd (arm and thumb variant targets only)
+
+ Copyright (c) 2009 ARM Ltd
+ All rights reserved.
+ 
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+ 3. The name of the company may not be used to endorse or promote
+    products derived from this software without specific prior written
+    permission.
+
+ THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(36) - Xilinx, Inc. (microblaze-* and powerpc-* targets)
+
+Copyright (c) 2004, 2009 Xilinx, Inc.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+1.  Redistributions source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+
+2.  Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+3.  Neither the name of Xilinx nor the names of its contributors may be
+used to endorse or promote products derived from this software without
+specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+(37) Texas Instruments Incorporated (tic6x-* targets)
+
+Copyright (c) 1996-2010 Texas Instruments Incorporated
+http://www.ti.com/
+
+ Redistribution and  use in source  and binary forms, with  or without
+ modification,  are permitted provided  that the  following conditions
+ are met:
+
+    Redistributions  of source  code must  retain the  above copyright
+    notice, this list of conditions and the following disclaimer.
+
+    Redistributions in binary form  must reproduce the above copyright
+    notice, this  list of conditions  and the following  disclaimer in
+    the  documentation  and/or   other  materials  provided  with  the
+    distribution.
+
+    Neither the  name of Texas Instruments Incorporated  nor the names
+    of its  contributors may  be used to  endorse or  promote products
+    derived  from   this  software  without   specific  prior  written
+    permission.
+
+ THIS SOFTWARE  IS PROVIDED BY THE COPYRIGHT  HOLDERS AND CONTRIBUTORS
+ "AS IS"  AND ANY  EXPRESS OR IMPLIED  WARRANTIES, INCLUDING,  BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL,  EXEMPLARY,  OR CONSEQUENTIAL  DAMAGES  (INCLUDING, BUT  NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF  LIABILITY, WHETHER IN CONTRACT, STRICT  LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(38) National Semiconductor (cr16-* and crx-* targets)
+
+Copyright (c) 2004 National Semiconductor Corporation
+
+The authors hereby grant permission to use, copy, modify, distribute,
+and license this software and its documentation for any purpose, provided
+that existing copyright notices are retained in all copies and that this
+notice is included verbatim in any distributions. No written agreement,
+license, or royalty fee is required for any of the authorized uses.
+Modifications to this software may be copyrighted by their authors
+and need not follow the licensing terms described here, provided that
+the new terms are clearly indicated on the first page of each file where
+they apply. 
+
+(39) - Adapteva, Inc. (epiphany-* targets)
+
+Copyright (c) 2011, Adapteva, Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+ * Neither the name of Adapteva nor the names of its contributors may be used
+   to endorse or promote products derived from this software without specific
+   prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(40) - Altera Corportion (nios2-* targets)
+
+Copyright (c) 2003 Altera Corporation
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+   o Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer. 
+   o Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in the 
+     documentation and/or other materials provided with the distribution. 
+   o Neither the name of Altera Corporation nor the names of its 
+     contributors may be used to endorse or promote products derived from
+     this software without specific prior written permission. 
+ 
+THIS SOFTWARE IS PROVIDED BY ALTERA CORPORATION, THE COPYRIGHT HOLDER,
+AND ITS CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
+
+(41) Ed Schouten - Free BSD
+
+Copyright (c) 2008 Ed Schouten <ed@FreeBSD.org>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+		   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions. 
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version. 
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+The libgloss subdirectory is a collection of software from several sources.
+
+Each file may have its own copyright/license that is embedded in the source 
+file.  Unless otherwise noted in the body of the source file(s), the following copyright
+notices will apply to the contents of the libgloss subdirectory:
+
+(1) Red Hat Incorporated
+
+Copyright (c) 1994-2009  Red Hat, Inc. All rights reserved.
+
+This copyrighted material is made available to anyone wishing to use, modify,
+copy, or redistribute it subject to the terms and conditions of the BSD 
+License.   This program is distributed in the hope that it will be useful, 
+but WITHOUT ANY WARRANTY expressed or implied, including the implied warranties 
+of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  A copy of this license
+is available at http://www.opensource.org/licenses. Any Red Hat trademarks that
+are incorporated in the source code or documentation are not subject to the BSD
+License and may only be used or replicated with the express permission of 
+Red Hat, Inc.
+
+(2) University of California, Berkeley
+
+Copyright (c) 1981-2000 The Regents of the University of California.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, 
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of the University nor the names of its contributors may
+      be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+OF SUCH DAMAGE.
+
+(3) DJ Delorie
+
+Copyright (C) 1993 DJ Delorie
+All rights reserved.
+
+Redistribution, modification,  and use in source and binary forms is permitted
+provided that the above copyright notice and following paragraph are
+duplicated in all such forms.
+
+This file is distributed WITHOUT ANY WARRANTY; without even the implied
+warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+(4) (formerly GPL for fr30)
+
+The GPL is no longer applicable to the fr30 platform.  The piece of
+code (syscalls.c) referencing the GPL has been officially relicensed.
+
+(5) Advanced Micro Devices
+
+Copyright 1989, 1990 Advanced Micro Devices, Inc.
+
+This software is the property of Advanced Micro Devices, Inc  (AMD)  which
+specifically  grants the user the right to modify, use and distribute this
+software provided this notice is not removed or altered.  All other rights
+are reserved by AMD.
+
+AMD MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS
+SOFTWARE.  IN NO EVENT SHALL AMD BE LIABLE FOR INCIDENTAL OR CONSEQUENTIAL
+DAMAGES IN CONNECTION WITH OR ARISING FROM THE FURNISHING, PERFORMANCE, OR
+USE OF THIS SOFTWARE.
+
+So that all may benefit from your experience, please report  any  problems
+or  suggestions about this software to the 29K Technical Support Center at
+800-29-29-AMD (800-292-9263) in the USA, or 0800-89-1131  in  the  UK,  or
+0031-11-1129 in Japan, toll free.  The direct dial number is 512-462-4118.
+
+Advanced Micro Devices, Inc.
+29K Support Products
+Mail Stop 573
+5900 E. Ben White Blvd.
+Austin, TX 78741
+800-292-9263
+
+(6) - Analog Devices, Inc. (bfin-* targets)
+
+Copyright (C) 2006, 2008, 2009, 2011, 2012 Analog Devices, Inc.
+
+The authors hereby grant permission to use, copy, modify, distribute,
+and license this software and its documentation for any purpose, provided
+that existing copyright notices are retained in all copies and that this
+notice is included verbatim in any distributions. No written agreement,
+license, or royalty fee is required for any of the authorized uses.
+Modifications to this software may be copyrighted by their authors
+and need not follow the licensing terms described here, provided that
+the new terms are clearly indicated on the first page of each file where
+they apply.
+
+(7) University of Utah and the Computer Systems Laboratory (CSL)
+    [applies only to hppa*-*-pro* targets]
+Copyright (c) 1990,1994 The University of Utah and
+the Computer Systems Laboratory (CSL).  All rights reserved.
+
+Permission to use, copy, modify and distribute this software is hereby
+granted provided that (1) source code retains these copyright, permission,
+and disclaimer notices, and (2) redistributions including binaries
+reproduce the notices in supporting documentation, and (3) all advertising
+materials mentioning features or use of this software display the following
+acknowledgement: ``This product includes software developed by the
+Computer Systems Laboratory at the University of Utah.''
+
+THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF THIS SOFTWARE IN ITS "AS
+IS" CONDITION.  THE UNIVERSITY OF UTAH AND CSL DISCLAIM ANY LIABILITY OF
+ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
+
+CSL requests users of this software to return to csl-dist@cs.utah.edu any
+improvements that they make and grant CSL redistribution rights.
+
+(8) Sun Microsystems
+
+Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+
+Developed at SunPro, a Sun Microsystems, Inc. business.
+Permission to use, copy, modify, and distribute this
+software is freely granted, provided that this notice is preserved.
+
+(9) Hewlett Packard
+
+(c) Copyright 1986 HEWLETT-PACKARD COMPANY
+
+To anyone who acknowledges that this file is provided "AS IS"
+without any express or implied warranty:
+
+permission to use, copy, modify, and distribute this file
+for any purpose is hereby granted without fee, provided that
+the above copyright notice and this notice appears in all
+copies, and that the name of Hewlett-Packard Company not be
+used in advertising or publicity pertaining to distribution
+of the software without specific, written prior permission.
+Hewlett-Packard Company makes no representations about the
+suitability of this software for any purpose.
+
+(10) Hans-Peter Nilsson
+
+Copyright (C) 2001 Hans-Peter Nilsson
+
+Permission to use, copy, modify, and distribute this software is
+freely granted, provided that the above copyright notice, this notice
+and the following disclaimer are preserved with no changes.
+
+THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.
+
+(11) IBM Corp. spu processor (only spu-* targets)
+
+(C) Copyright IBM Corp. 2005, 2006
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+    * Neither the name of IBM nor the names of its contributors may be
+used to endorse or promote products derived from this software without
+specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+(12) Jon Beniston (only lm32-* targets)
+
+ Contributed by Jon Beniston <jon@beniston.com>
+ 
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
+(13) - Xilinx, Inc. (microblaze-* and powerpc-* targets)
+
+Copyright (c) 2004, 2009 Xilinx, Inc.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+1.  Redistributions source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+
+2.  Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+3.  Neither the name of Xilinx nor the names of its contributors may be
+used to endorse or promote products derived from this software without
+specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+(14) - National Semiconductor Corporation
+
+Copyright (c) 2004 National Semiconductor Corporation
+
+The authors hereby grant permission to use, copy, modify, distribute,
+and license this software and its documentation for any purpose, provided
+that existing copyright notices are retained in all copies and that this
+notice is included verbatim in any distributions. No written agreement,
+license, or royalty fee is required for any of the authorized uses.
+Modifications to this software may be copyrighted by their authors
+and need not follow the licensing terms described here, provided that
+the new terms are clearly indicated on the first page of each file where
+they apply.
+
+
+(15) - CodeSourcery, Inc. (tic6x-* targets)
+
+Copyright (c) 2010 CodeSourcery, Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of CodeSourcery nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY CODESOURCERY, INC. ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL CODESOURCERY BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+(16) - GPL with exception (sparc-*leon*, crx-*, cr16-* targets only)
+
+  Copyright (C) 1992 Free Software Foundation, Inc.
+  Written By David Vinayak Henkel-Wallace, June 1992
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+In addition to the permissions in the GNU General Public License, the
+Free Software Foundation gives you unlimited permission to link the
+compiled version of this file with other programs, and to distribute
+those programs without any restriction coming from the use of this
+file.  (The General Public License restrictions do apply in other
+respects; for example, they cover modification of the file, and
+distribution when not linked into another program.)
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.
+
+   As a special exception, if you link this library with files
+   compiled with GCC to produce an executable, this does not cause
+   the resulting executable to be covered by the GNU General Public License.
+   This exception does not however invalidate any other reasons why
+   the executable file might be covered by the GNU General Public License.
+
+
+(17) - Adapteva, Inc. (epiphany-* targets)
+
+Copyright (c) 2011, Adapteva, Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+ * Neither the name of Adapteva nor the names of its contributors may be used
+   to endorse or promote products derived from this software without specific
+   prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+		  GNU LIBRARY GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL.  It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it.  You can use it for
+your libraries, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the library, or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library.  If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software.  To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+  Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs.  This
+license, the GNU Library General Public License, applies to certain
+designated libraries.  This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+  The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it.  Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program.  However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+  Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries.  We
+concluded that weaker conditions might promote sharing better.
+
+  However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves.  This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them.  (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.)  The hope is that this
+will lead to faster development of free libraries.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+  Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+
+		  GNU LIBRARY GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License").  Each licensee is
+addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    c) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    d) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Library General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+     Appendix: How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public
+    License along with this library; if not, write to the Free
+    Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA 02110-1301, USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+		   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions. 
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version. 
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+	51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations
+below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it
+becomes a de-facto standard.  To achieve this, non-free programs must
+be allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control
+compilation and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at least
+    three years, to give the same user the materials specified in
+    Subsection 6a, above, for a charge no more than the cost of
+    performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply, and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License
+may add an explicit geographical distribution limitation excluding those
+countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms
+of the ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.
+It is safest to attach them to the start of each source file to most
+effectively convey the exclusion of warranty; and each file should
+have at least the "copyright" line and a pointer to where the full
+notice is found.
+
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or
+your school, if any, to sign a "copyright disclaimer" for the library,
+if necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James
+  Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+GCC RUNTIME LIBRARY EXCEPTION
+
+Version 3.1, 31 March 2009
+
+Copyright (C) 2009 Free Software Foundation, Inc. <http://fsf.org/>
+
+Everyone is permitted to copy and distribute verbatim copies of this
+license document, but changing it is not allowed.
+
+This GCC Runtime Library Exception ("Exception") is an additional
+permission under section 7 of the GNU General Public License, version
+3 ("GPLv3"). It applies to a given file (the "Runtime Library") that
+bears a notice placed by the copyright holder of the file stating that
+the file is governed by GPLv3 along with this Exception.
+
+When you use GCC to compile a program, GCC may combine portions of
+certain GCC header files and runtime libraries with the compiled
+program. The purpose of this Exception is to allow compilation of
+non-GPL (including proprietary) programs to use, in this way, the
+header files and runtime libraries covered by this Exception.
+
+0. Definitions.
+
+A file is an "Independent Module" if it either requires the Runtime
+Library for execution after a Compilation Process, or makes use of an
+interface provided by the Runtime Library, but is not otherwise based
+on the Runtime Library.
+
+"GCC" means a version of the GNU Compiler Collection, with or without
+modifications, governed by version 3 (or a specified later version) of
+the GNU General Public License (GPL) with the option of using any
+subsequent versions published by the FSF.
+
+"GPL-compatible Software" is software whose conditions of propagation,
+modification and use would permit combination with GCC in accord with
+the license of GCC.
+
+"Target Code" refers to output from any compiler for a real or virtual
+target processor architecture, in executable form or suitable for
+input to an assembler, loader, linker and/or execution
+phase. Notwithstanding that, Target Code does not include data in any
+format that is used as a compiler intermediate representation, or used
+for producing a compiler intermediate representation.
+
+The "Compilation Process" transforms code entirely represented in
+non-intermediate languages designed for human-written code, and/or in
+Java Virtual Machine byte code, into Target Code. Thus, for example,
+use of source code generators and preprocessors need not be considered
+part of the Compilation Process, since the Compilation Process can be
+understood as starting with the output of the generators or
+preprocessors.
+
+A Compilation Process is "Eligible" if it is done using GCC, alone or
+with other GPL-compatible software, or if it is done without using any
+work based on GCC. For example, using non-GPL-compatible Software to
+optimize any GCC intermediate representations would not qualify as an
+Eligible Compilation Process.
+
+1. Grant of Additional Permission.
+
+You have permission to propagate a work of Target Code formed by
+combining the Runtime Library with Independent Modules, even if such
+propagation would otherwise violate the terms of GPLv3, provided that
+all Target Code was generated by Eligible Compilation Processes. You
+may then convey such a combination under terms of your choice,
+consistent with the licensing of the Independent Modules.
+
+2. No Weakening of GCC Copyleft.
+
+The availability of this Exception does not imply any general
+presumption that third-party software is unaffected by the copyleft
+requirements of the license of GCC.
+
+		   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions. 
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version. 
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations
+below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+^L
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it
+becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+^L
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control
+compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+^L
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+^L
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+^L
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+^L
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply, and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License
+may add an explicit geographical distribution limitation excluding those
+countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+^L
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+^L
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms
+of the ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.
+It is safest to attach them to the start of each source file to most
+effectively convey the exclusion of warranty; and each file should
+have at least the "copyright" line and a pointer to where the full
+notice is found.
+
+
+    <one line to give the library's name and a brief idea of what it
+does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
+
+Also add information on how to contact you by electronic and paper
+mail.
+
+You should also get your employer (if you work as a programmer) or
+your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James
+Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+		   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions. 
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version. 
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+		   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions. 
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version. 
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+                   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions.
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version.
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/README b/README
index e81e7cf..d898227 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-This file has been automatically generated on Fri Sep 23 14:59:08 UTC 2016 with the following command:
+This file has been automatically generated on Thu Feb  2 20:33:18 UTC 2017 with the following command:
 build.sh 
 
 The MD5 hashes for the original sources packages are:
diff --git a/bin/x86_64-w64-mingw32-addr2line b/bin/x86_64-w64-mingw32-addr2line
index b151286..dba1a3b 100755
--- a/bin/x86_64-w64-mingw32-addr2line
+++ b/bin/x86_64-w64-mingw32-addr2line
Binary files differ
diff --git a/bin/x86_64-w64-mingw32-ar b/bin/x86_64-w64-mingw32-ar
index 711a995..44b299c 100755
--- a/bin/x86_64-w64-mingw32-ar
+++ b/bin/x86_64-w64-mingw32-ar
Binary files differ
diff --git a/bin/x86_64-w64-mingw32-as b/bin/x86_64-w64-mingw32-as
index 5a09484..e05e3d4 100755
--- a/bin/x86_64-w64-mingw32-as
+++ b/bin/x86_64-w64-mingw32-as
Binary files differ
diff --git a/bin/x86_64-w64-mingw32-c++filt b/bin/x86_64-w64-mingw32-c++filt
index 79a747d..0310aa1 100755
--- a/bin/x86_64-w64-mingw32-c++filt
+++ b/bin/x86_64-w64-mingw32-c++filt
Binary files differ
diff --git a/bin/x86_64-w64-mingw32-dlltool b/bin/x86_64-w64-mingw32-dlltool
index a15b045..346979d 100755
--- a/bin/x86_64-w64-mingw32-dlltool
+++ b/bin/x86_64-w64-mingw32-dlltool
Binary files differ
diff --git a/bin/x86_64-w64-mingw32-gprof b/bin/x86_64-w64-mingw32-gprof
index a2aa780..79c46c1 100755
--- a/bin/x86_64-w64-mingw32-gprof
+++ b/bin/x86_64-w64-mingw32-gprof
Binary files differ
diff --git a/bin/x86_64-w64-mingw32-ld b/bin/x86_64-w64-mingw32-ld
index 81aaff1..de6bc0b 100755
--- a/bin/x86_64-w64-mingw32-ld
+++ b/bin/x86_64-w64-mingw32-ld
Binary files differ
diff --git a/bin/x86_64-w64-mingw32-ld.bfd b/bin/x86_64-w64-mingw32-ld.bfd
index 81aaff1..de6bc0b 100755
--- a/bin/x86_64-w64-mingw32-ld.bfd
+++ b/bin/x86_64-w64-mingw32-ld.bfd
Binary files differ
diff --git a/bin/x86_64-w64-mingw32-nm b/bin/x86_64-w64-mingw32-nm
index 904d0a6..596472b 100755
--- a/bin/x86_64-w64-mingw32-nm
+++ b/bin/x86_64-w64-mingw32-nm
Binary files differ
diff --git a/bin/x86_64-w64-mingw32-objcopy b/bin/x86_64-w64-mingw32-objcopy
index 6192640..66218f9 100755
--- a/bin/x86_64-w64-mingw32-objcopy
+++ b/bin/x86_64-w64-mingw32-objcopy
Binary files differ
diff --git a/bin/x86_64-w64-mingw32-objdump b/bin/x86_64-w64-mingw32-objdump
index 70f3eff..1648cac 100755
--- a/bin/x86_64-w64-mingw32-objdump
+++ b/bin/x86_64-w64-mingw32-objdump
Binary files differ
diff --git a/bin/x86_64-w64-mingw32-ranlib b/bin/x86_64-w64-mingw32-ranlib
index 5c2ca56..620d213 100755
--- a/bin/x86_64-w64-mingw32-ranlib
+++ b/bin/x86_64-w64-mingw32-ranlib
Binary files differ
diff --git a/bin/x86_64-w64-mingw32-size b/bin/x86_64-w64-mingw32-size
index a51f40e..59ee848 100755
--- a/bin/x86_64-w64-mingw32-size
+++ b/bin/x86_64-w64-mingw32-size
Binary files differ
diff --git a/bin/x86_64-w64-mingw32-strings b/bin/x86_64-w64-mingw32-strings
index 22f7fb8..e92843c 100755
--- a/bin/x86_64-w64-mingw32-strings
+++ b/bin/x86_64-w64-mingw32-strings
Binary files differ
diff --git a/bin/x86_64-w64-mingw32-strip b/bin/x86_64-w64-mingw32-strip
index d70a671..5edbc2b 100755
--- a/bin/x86_64-w64-mingw32-strip
+++ b/bin/x86_64-w64-mingw32-strip
Binary files differ
diff --git a/bin/x86_64-w64-mingw32-widl b/bin/x86_64-w64-mingw32-widl
index a18513b..daa843b 100755
--- a/bin/x86_64-w64-mingw32-widl
+++ b/bin/x86_64-w64-mingw32-widl
Binary files differ
diff --git a/bin/x86_64-w64-mingw32-windmc b/bin/x86_64-w64-mingw32-windmc
index 3efa382..8e73b82 100755
--- a/bin/x86_64-w64-mingw32-windmc
+++ b/bin/x86_64-w64-mingw32-windmc
Binary files differ
diff --git a/bin/x86_64-w64-mingw32-windres b/bin/x86_64-w64-mingw32-windres
index aec8e95..bb84dc4 100755
--- a/bin/x86_64-w64-mingw32-windres
+++ b/bin/x86_64-w64-mingw32-windres
Binary files differ
diff --git a/build.sh b/build.sh
index a02798d..dcaa6a9 100755
--- a/build.sh
+++ b/build.sh
@@ -24,27 +24,6 @@
 ANDROID_BUILD_TOP=$(realpath $PROGDIR/../..)
 TOOLCHAIN_DIR=$(realpath $ANDROID_BUILD_TOP/toolchain)
 
-# Top level out directory.
-OUT_DIR=$ANDROID_BUILD_TOP/out
-
-# Name of the directory inside the package.
-PACKAGE_DIR=x86_64-w64-mingw32-4.8
-
-# Directory to isolate the install package from any similarly named directories.
-OUTER_INSTALL_DIR=$OUT_DIR/install
-
-# Actual install path.
-INSTALL_DIR=$OUTER_INSTALL_DIR/$PACKAGE_DIR
-
-# Install directory for build dependencies that are not in the final package
-# (gmp and whatnot).
-SUPPORT_DIR=$INSTALL_DIR
-
-# For the final artifacts. Will be archived on the build server.
-if [ -z "$DIST_DIR" ]; then
-  DIST_DIR=$OUT_DIR/dist
-fi
-
 HELP=
 VERBOSE=2
 
@@ -106,7 +85,6 @@
     fi
 }
 
-ARCH=x86_64
 NUM_CORES=$(grep -c -e '^processor' /proc/cpuinfo)
 JOBS=$(( $NUM_CORES * 2 ))
 
@@ -115,14 +93,14 @@
 MPC_VERSION=1.0.1
 BINUTILS_VERSION=2.25
 GCC_VERSION=4.8.3
-MINGW_W64_VERSION=v4.0.4
+MINGW_W64_VERSION=v5.0.0
 
 TARGET_ARCH=x86_64
 TARGET_MULTILIBS=true  # not empty to enable multilib
-FORCE_ALL=true
-FORCE_BUILD=true
 CLEANUP=
 
+OPT_GCC_VERSION=
+
 for opt; do
     optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
     case $opt in
@@ -132,6 +110,7 @@
         -j*|--jobs=*) JOBS=$optarg;;
         --target-arch=*) TARGET_ARCH=$optarg;;
         --no-multilib) TARGET_MULTILIBS="";;
+        --gcc-version=*) OPT_GCC_VERSION=$optarg;;
         --cleanup) CLEANUP=true;;
         -*) panic "Unknown option '$opt', see --help for list of valid ones.";;
         *) panic "This script doesn't take any parameter, see --help for details.";;
@@ -156,11 +135,43 @@
   -j<num>                      Same as --jobs=<num>."
   --no-multilib                Disable multilib toolchain build."
   --target-arch=<arch>         Select default target architecture [$TARGET_ARCH]."
-
+  --gcc-version=<version>      Select alternative GCC version [$GCC_VERSION]"
 EOF
     exit 0
 fi
 
+if [ "$OPT_GCC_VERSION" ]; then
+    GCC_VERSION=$OPT_GCC_VERSION
+fi
+
+GCC_SRC_DIR=$TOOLCHAIN_DIR/gcc/gcc-$GCC_VERSION
+if [ ! -d "$GCC_SRC_DIR" ]; then
+    panic "Missing GCC source directory: $GCC_SRC_DIR"
+fi
+
+GCC_MAJOR_MINOR=$(echo "$GCC_VERSION" | cut -d. -f1-2)
+
+# Top level out directory.
+OUT_DIR=$ANDROID_BUILD_TOP/out
+
+# Name of the directory inside the package.
+PACKAGE_DIR=x86_64-w64-mingw32-$GCC_MAJOR_MINOR
+
+# Directory to isolate the install package from any similarly named directories.
+OUTER_INSTALL_DIR=$OUT_DIR/install
+
+# Actual install path.
+INSTALL_DIR=$OUTER_INSTALL_DIR/$PACKAGE_DIR
+
+# Install directory for build dependencies that are not in the final package
+# (gmp and whatnot).
+SUPPORT_DIR=$INSTALL_DIR
+
+# For the final artifacts. Will be archived on the build server.
+if [ -z "$DIST_DIR" ]; then
+  DIST_DIR=$OUT_DIR/dist
+fi
+
 BUILD_TAG64=x86_64-linux-gnu
 BUILD_TAG32=i686-linux-gnu
 
@@ -326,6 +337,7 @@
 fi
 
 var_append BINUTILS_CONFIGURE_OPTIONS "--with-sysroot=$INSTALL_DIR"
+var_append BINUTILS_CONFIGURE_OPTIONS "--enable-lto --enable-plugin --enable-gold"
 
 build_binutils_package binutils-$BINUTILS_VERSION $BINUTILS_CONFIGURE_OPTIONS
 
@@ -398,7 +410,7 @@
         cd $OUT_DIR/$PKGNAME &&
         log "$PKGNAME: Configuring" &&
         run $MINGW_W64_SRC/mingw-w64-headers/configure --prefix=$PREFIX_FOR_TARGET --host=$TARGET_TAG \
-            --build=$HOST_TAG --with-widl=$WITH_WIDL --enable-sdk=all --enable-secure-api
+            --build=$HOST_TAG --enable-sdk=all --enable-secure-api
         fail_panic "Can't configure mingw-64-headers"
 
         run make
@@ -493,7 +505,6 @@
 var_append GCC_CONFIGURE_OPTIONS "--with-sysroot=$INSTALL_DIR"
 var_append GCC_CONFIGURE_OPTIONS "--enable-threads=posix"
 
-# A bug in MinGW-w64 forces us to build and use widl.
 build_mingw_tools mingw-w64-tools
 build_mingw_headers mingw-w64-headers
 
@@ -514,7 +525,7 @@
 # Let's generate the licenses/ directory
 LICENSE_DIRS="$SRC_DIR"
 var_append LICENSE_DIRS "$TOOLCHAIN_DIR/binutils/binutils-$BINUTILS_VERSION"
-var_append LICENSE_DIRS "$TOOLCHAIN_DIR/gcc/gcc-$GCC_VERSION"
+var_append LICENSE_DIRS "$GCC_SRC_DIR"
 var_append LICENSE_DIRS "$EXTRACTED_PACKAGES"
 
 echo > $INSTALL_DIR/NOTICE
diff --git a/lib/gcc/x86_64-w64-mingw32/4.8.3/32/libgcc.a b/lib/gcc/x86_64-w64-mingw32/4.8.3/32/libgcc.a
index e390672..b2232c1 100644
--- a/lib/gcc/x86_64-w64-mingw32/4.8.3/32/libgcc.a
+++ b/lib/gcc/x86_64-w64-mingw32/4.8.3/32/libgcc.a
Binary files differ
diff --git a/lib/gcc/x86_64-w64-mingw32/4.8.3/32/libgcov.a b/lib/gcc/x86_64-w64-mingw32/4.8.3/32/libgcov.a
index fd76529..8dc0aca 100644
--- a/lib/gcc/x86_64-w64-mingw32/4.8.3/32/libgcov.a
+++ b/lib/gcc/x86_64-w64-mingw32/4.8.3/32/libgcov.a
Binary files differ
diff --git a/lib/gcc/x86_64-w64-mingw32/4.8.3/libgcc.a b/lib/gcc/x86_64-w64-mingw32/4.8.3/libgcc.a
index b8d7dbb..bf05703 100644
--- a/lib/gcc/x86_64-w64-mingw32/4.8.3/libgcc.a
+++ b/lib/gcc/x86_64-w64-mingw32/4.8.3/libgcc.a
Binary files differ
diff --git a/lib/gcc/x86_64-w64-mingw32/4.8.3/libgcov.a b/lib/gcc/x86_64-w64-mingw32/4.8.3/libgcov.a
index 3876839..3a0fb82 100644
--- a/lib/gcc/x86_64-w64-mingw32/4.8.3/libgcov.a
+++ b/lib/gcc/x86_64-w64-mingw32/4.8.3/libgcov.a
Binary files differ
diff --git a/lib/libgmp.a b/lib/libgmp.a
index b02f487..65c6dd7 100644
--- a/lib/libgmp.a
+++ b/lib/libgmp.a
Binary files differ
diff --git a/lib/libmpc.a b/lib/libmpc.a
index fbba6fe..a6e2ba1 100644
--- a/lib/libmpc.a
+++ b/lib/libmpc.a
Binary files differ
diff --git a/lib/libmpfr.a b/lib/libmpfr.a
index c73cb25..9cc4665 100644
--- a/lib/libmpfr.a
+++ b/lib/libmpfr.a
Binary files differ
diff --git a/lib64/libiberty.a b/lib64/libiberty.a
index b7cb83c..8ee125d 100644
--- a/lib64/libiberty.a
+++ b/lib64/libiberty.a
Binary files differ
diff --git a/libexec/gcc/x86_64-w64-mingw32/4.8.3/cc1 b/libexec/gcc/x86_64-w64-mingw32/4.8.3/cc1
index 223cfe9..6f175c6 100755
--- a/libexec/gcc/x86_64-w64-mingw32/4.8.3/cc1
+++ b/libexec/gcc/x86_64-w64-mingw32/4.8.3/cc1
Binary files differ
diff --git a/libexec/gcc/x86_64-w64-mingw32/4.8.3/cc1plus b/libexec/gcc/x86_64-w64-mingw32/4.8.3/cc1plus
index 6d179e1..ea98ab9 100755
--- a/libexec/gcc/x86_64-w64-mingw32/4.8.3/cc1plus
+++ b/libexec/gcc/x86_64-w64-mingw32/4.8.3/cc1plus
Binary files differ
diff --git a/repo.prop b/repo.prop
index b3f3adf..1cf856c 100644
--- a/repo.prop
+++ b/repo.prop
@@ -1,11 +1,11 @@
 platform/manifest f7f30f2c711c5bb7af238ee5f7125cd3faf26572
-platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8 7a8824915a05bef8581fb1f614c4eee9564c4ba2
-toolchain/binutils 129dec3ed0e1fc07f75a4322014d770cfd642f4d
+platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8 e9534abf9e4916bc9f0f0c74b64ad2f404a34e97
+toolchain/binutils 9bf6cbf6dd88777719c5757922aff0190ec46539
 toolchain/cloog 604793eab97d360aef729f064674569ee6dbf3e1
-toolchain/gcc 535de7eb0179bdcd01fcd99f1dad6208250d3706
+toolchain/gcc 32c89c19b042a12b5a1bf0153299154ea5435c03
 toolchain/gmp b2acd5dbf47868ac5b5bc844e16d2cadcbd4c810
 toolchain/isl 0ccf95726af8ce58ad61ff474addbce3a31ba99c
-toolchain/mingw 56ddde351b6dc8558e0a6b08636e9af2dca3d5fd
+toolchain/mingw da9c1475a8979478fb9163b02e8991ffb6826e5b
 toolchain/mpc 835d16e92eed875638a8b5d552034c3b1aae045b
 toolchain/mpfr de979fc377db766591e7feaf052f0de59be46e76
 toolchain/ppl 979062d362bc5a1c00804237b408b19b4618fb24
diff --git a/share/info/dir b/share/info/dir
index 9269ae5..52bb20e 100644
--- a/share/info/dir
+++ b/share/info/dir
@@ -24,8 +24,10 @@
 * mpc: (mpc)Multiple Precision Complex Library.
 
 Software development
+* Cpp: (cpp).                   The GNU C preprocessor.
 * g++: (gcc).                   The GNU C++ compiler.
 * gcc: (gcc).                   The GNU Compiler Collection.
+* gccinstall: (gccinstall).     Installing the GNU Compiler Collection.
 * gccint: (gccint).             Internals of the GNU Compiler Collection.
 * gcov: (gcc) Gcov.             'gcov'--a test coverage program.
 
diff --git a/share/man/man1/x86_64-w64-mingw32-cpp.1 b/share/man/man1/x86_64-w64-mingw32-cpp.1
index 6126ee7..e11bc34 100644
--- a/share/man/man1/x86_64-w64-mingw32-cpp.1
+++ b/share/man/man1/x86_64-w64-mingw32-cpp.1
@@ -1,15 +1,7 @@
-.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
+.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
-.de Sh \" Subsection heading
-.br
-.if t .Sp
-.ne 5
-.PP
-\fB\\$1\fR
-.PP
-..
 .de Sp \" Vertical space (when we can't use .PP)
 .if t .sp .5v
 .if n .sp
@@ -46,6 +38,8 @@
 .    ds PI \(*p
 .    ds L" ``
 .    ds R" ''
+.    ds C`
+.    ds C'
 'br\}
 .\"
 .\" Escape single quotes in literal strings from groff's Unicode transform.
@@ -53,20 +47,27 @@
 .el       .ds Aq '
 .\"
 .\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
 .\" entries marked with X<> in POD.  Of course, you'll have to process the
 .\" output yourself in some meaningful fashion.
-.ie \nF \{\
-.    de IX
-.    tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
 ..
-.    nr % 0
-.    rr F
-.\}
-.el \{\
-.    de IX
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+.    if \nF \{
+.        de IX
+.        tm Index:\\$1\t\\n%\t"\\$2"
 ..
+.        if !\nF==2 \{
+.            nr % 0
+.            nr F 2
+.        \}
+.    \}
 .\}
+.rr rF
 .\"
 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
@@ -180,11 +181,11 @@
 you are writing in.  Modern versions of the \s-1GNU\s0 assembler have macro
 facilities.  Most high level programming languages have their own
 conditional compilation and inclusion mechanism.  If all else fails,
-try a true general text processor, such as \s-1GNU\s0 M4.
+try a true general text processor, such as \s-1GNU M4.\s0
 .PP
-C preprocessors vary in some details.  This manual discusses the \s-1GNU\s0 C
+C preprocessors vary in some details.  This manual discusses the \s-1GNU C\s0
 preprocessor, which provides a small superset of the features of \s-1ISO\s0
-Standard C.  In its default mode, the \s-1GNU\s0 C preprocessor does not do a
+Standard C.  In its default mode, the \s-1GNU C\s0 preprocessor does not do a
 few things required by the standard.  These are features which are
 rarely, if ever, used, and may cause surprising changes to the meaning
 of a program which does not expect them.  To get strict \s-1ISO\s0 Standard C,
@@ -201,7 +202,7 @@
 Mode\fR.
 .PP
 For clarity, unless noted otherwise, references to \fB\s-1CPP\s0\fR in this
-manual refer to \s-1GNU\s0 \s-1CPP\s0.
+manual refer to \s-1GNU CPP.\s0
 .SH "OPTIONS"
 .IX Header "OPTIONS"
 The C preprocessor expects two file names as arguments, \fIinfile\fR and
@@ -305,7 +306,7 @@
 .IP "\fB\-Wtraditional\fR" 4
 .IX Item "-Wtraditional"
 Warn about certain constructs that behave differently in traditional and
-\&\s-1ISO\s0 C.  Also warn about \s-1ISO\s0 C constructs that have no traditional C
+\&\s-1ISO C. \s0 Also warn about \s-1ISO C\s0 constructs that have no traditional C
 equivalent, and problematic constructs which should be avoided.
 .IP "\fB\-Wundef\fR" 4
 .IX Item "-Wundef"
@@ -358,7 +359,7 @@
 responsible for the system library, you may want to see them.
 .IP "\fB\-w\fR" 4
 .IX Item "-w"
-Suppress all warnings, including those which \s-1GNU\s0 \s-1CPP\s0 issues by default.
+Suppress all warnings, including those which \s-1GNU CPP\s0 issues by default.
 .IP "\fB\-pedantic\fR" 4
 .IX Item "-pedantic"
 Issue all the mandatory diagnostics listed in the C standard.  Some of
@@ -530,7 +531,7 @@
 .el .IP "\f(CWiso9899:1990\fR" 4
 .IX Item "iso9899:1990"
 .PD
-The \s-1ISO\s0 C standard from 1990.  \fBc90\fR is the customary shorthand for
+The \s-1ISO C\s0 standard from 1990.  \fBc90\fR is the customary shorthand for
 this version of the standard.
 .Sp
 The \fB\-ansi\fR option is equivalent to \fB\-std=c90\fR.
@@ -552,7 +553,7 @@
 .el .IP "\f(CWc9x\fR" 4
 .IX Item "c9x"
 .PD
-The revised \s-1ISO\s0 C standard, published in December 1999.  Before
+The revised \s-1ISO C\s0 standard, published in December 1999.  Before
 publication, this was known as C9X.
 .ie n .IP """iso9899:2011""" 4
 .el .IP "\f(CWiso9899:2011\fR" 4
@@ -565,7 +566,7 @@
 .el .IP "\f(CWc1x\fR" 4
 .IX Item "c1x"
 .PD
-The revised \s-1ISO\s0 C standard, published in December 2011.  Before
+The revised \s-1ISO C\s0 standard, published in December 2011.  Before
 publication, this was known as C1X.
 .ie n .IP """gnu90""" 4
 .el .IP "\f(CWgnu90\fR" 4
@@ -597,7 +598,7 @@
 .ie n .IP """c++98""" 4
 .el .IP "\f(CWc++98\fR" 4
 .IX Item "c++98"
-The 1998 \s-1ISO\s0 \*(C+ standard plus amendments.
+The 1998 \s-1ISO \*(C+\s0 standard plus amendments.
 .ie n .IP """gnu++98""" 4
 .el .IP "\f(CWgnu++98\fR" 4
 .IX Item "gnu++98"
@@ -726,7 +727,7 @@
 .IP "\fB\-fextended\-identifiers\fR" 4
 .IX Item "-fextended-identifiers"
 Accept universal character names in identifiers.  This option is
-experimental; in a future version of \s-1GCC\s0, it will be enabled by
+experimental; in a future version of \s-1GCC,\s0 it will be enabled by
 default for C99 and \*(C+.
 .IP "\fB\-fno\-canonical\-system\-headers\fR" 4
 .IX Item "-fno-canonical-system-headers"
@@ -753,7 +754,7 @@
 ignored.  The default is 8.
 .IP "\fB\-fdebug\-cpp\fR" 4
 .IX Item "-fdebug-cpp"
-This option is only useful for debugging \s-1GCC\s0.  When used with
+This option is only useful for debugging \s-1GCC. \s0 When used with
 \&\fB\-E\fR, dumps debugging information about location maps.  Every
 token in the output is preceded by the dump of the map its location
 belongs to.  The dump of the map holding the location of a token would
@@ -786,12 +787,12 @@
 .IP "\fB\-fexec\-charset=\fR\fIcharset\fR" 4
 .IX Item "-fexec-charset=charset"
 Set the execution character set, used for string and character
-constants.  The default is \s-1UTF\-8\s0.  \fIcharset\fR can be any encoding
+constants.  The default is \s-1UTF\-8.  \s0\fIcharset\fR can be any encoding
 supported by the system's \f(CW\*(C`iconv\*(C'\fR library routine.
 .IP "\fB\-fwide\-exec\-charset=\fR\fIcharset\fR" 4
 .IX Item "-fwide-exec-charset=charset"
 Set the wide execution character set, used for wide string and
-character constants.  The default is \s-1UTF\-32\s0 or \s-1UTF\-16\s0, whichever
+character constants.  The default is \s-1UTF\-32\s0 or \s-1UTF\-16,\s0 whichever
 corresponds to the width of \f(CW\*(C`wchar_t\*(C'\fR.  As with
 \&\fB\-fexec\-charset\fR, \fIcharset\fR can be any encoding supported
 by the system's \f(CW\*(C`iconv\*(C'\fR library routine; however, you will have
@@ -799,9 +800,9 @@
 .IP "\fB\-finput\-charset=\fR\fIcharset\fR" 4
 .IX Item "-finput-charset=charset"
 Set the input character set, used for translation from the character
-set of the input file to the source character set used by \s-1GCC\s0.  If the
+set of the input file to the source character set used by \s-1GCC. \s0 If the
 locale does not specify, or \s-1GCC\s0 cannot get this information from the
-locale, the default is \s-1UTF\-8\s0.  This can be overridden by either the locale
+locale, the default is \s-1UTF\-8. \s0 This can be overridden by either the locale
 or this command line option.  Currently the command line option takes
 precedence if there's a conflict.  \fIcharset\fR can be any encoding
 supported by the system's \f(CW\*(C`iconv\*(C'\fR library routine.
@@ -838,7 +839,7 @@
 .IX Item "-dCHARS"
 \&\fI\s-1CHARS\s0\fR is a sequence of one or more of the following characters,
 and must not be preceded by a space.  Other characters are interpreted
-by the compiler proper, or reserved for future versions of \s-1GCC\s0, and so
+by the compiler proper, or reserved for future versions of \s-1GCC,\s0 and so
 are silently ignored.  If you specify characters whose behavior
 conflicts, the result is undefined.
 .RS 4
@@ -914,7 +915,7 @@
 .IP "\fB\-traditional\-cpp\fR" 4
 .IX Item "-traditional-cpp"
 Try to imitate the behavior of old-fashioned C preprocessors, as
-opposed to \s-1ISO\s0 C preprocessors.
+opposed to \s-1ISO C\s0 preprocessors.
 .IP "\fB\-trigraphs\fR" 4
 .IX Item "-trigraphs"
 Process trigraph sequences.
@@ -932,7 +933,7 @@
 preprocessing anything.
 .IP "\fB\-v\fR" 4
 .IX Item "-v"
-Verbose mode.  Print out \s-1GNU\s0 \s-1CPP\s0's version number at the beginning of
+Verbose mode.  Print out \s-1GNU CPP\s0's version number at the beginning of
 execution, and report the final form of the include path.
 .IP "\fB\-H\fR" 4
 .IX Item "-H"
@@ -947,7 +948,7 @@
 .IP "\fB\-\-version\fR" 4
 .IX Item "--version"
 .PD
-Print out \s-1GNU\s0 \s-1CPP\s0's version number.  With one dash, proceed to
+Print out \s-1GNU CPP\s0's version number.  With one dash, proceed to
 preprocess as normal.  With two dashes, exit immediately.
 .SH "ENVIRONMENT"
 .IX Header "ENVIRONMENT"
@@ -959,7 +960,7 @@
 \&\fB\-I\fR, and control dependency output with options like
 \&\fB\-M\fR.  These take precedence over
 environment variables, which in turn take precedence over the
-configuration of \s-1GCC\s0.
+configuration of \s-1GCC.\s0
 .IP "\fB\s-1CPATH\s0\fR" 4
 .IX Item "CPATH"
 .PD 0
diff --git a/share/man/man7/gfdl.7 b/share/man/man7/gfdl.7
index 9788f70..d12bf50 100644
--- a/share/man/man7/gfdl.7
+++ b/share/man/man7/gfdl.7
@@ -1 +1,645 @@
-timestamp
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.ie \nF \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    nr % 0
+.    rr F
+.\}
+.el \{\
+.    de IX
+..
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "GFDL 7"
+.TH GFDL 7 "2014-05-22" "gcc-4.8.3" "GNU"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+gfdl \- GNU Free Documentation License
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+.Sh "\s-1GNU\s0 Free Documentation License"
+.IX Subsection "GNU Free Documentation License"
+.Sh "Version 1.3, 3 November 2008"
+.IX Subsection "Version 1.3, 3 November 2008"
+.Vb 2
+\&        Copyright (c) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+\&        E<lt>B<http://fsf.org/>E<gt>
+\&        
+\&        Everyone is permitted to copy and distribute verbatim copies
+\&        of this license document, but changing it is not allowed.
+.Ve
+.IP "0." 4
+.IX Item "0."
+\&\s-1PREAMBLE\s0
+.Sp
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document \fIfree\fR in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+.Sp
+This License is a kind of \*(L"copyleft\*(R", which means that derivative
+works of the document must themselves be free in the same sense.  It
+complements the \s-1GNU\s0 General Public License, which is a copyleft
+license designed for free software.
+.Sp
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does.  But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book.  We recommend this License
+principally for works whose purpose is instruction or reference.
+.IP "1." 4
+.IX Item "1."
+\&\s-1APPLICABILITY\s0 \s-1AND\s0 \s-1DEFINITIONS\s0
+.Sp
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License.  Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein.  The \*(L"Document\*(R", below,
+refers to any such manual or work.  Any member of the public is a
+licensee, and is addressed as \*(L"you\*(R".  You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+.Sp
+A \*(L"Modified Version\*(R" of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+.Sp
+A \*(L"Secondary Section\*(R" is a named appendix or a front-matter section
+of the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject.  (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.)  The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+.Sp
+The \*(L"Invariant Sections\*(R" are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License.  If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant.  The Document may contain zero
+Invariant Sections.  If the Document does not identify any Invariant
+Sections then there are none.
+.Sp
+The \*(L"Cover Texts\*(R" are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License.  A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+.Sp
+A \*(L"Transparent\*(R" copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters.  A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text.  A copy that is not \*(L"Transparent\*(R" is called \*(L"Opaque\*(R".
+.Sp
+Examples of suitable formats for Transparent copies include plain
+\&\s-1ASCII\s0 without markup, Texinfo input format, LaTeX input
+format, \s-1SGML\s0 or \s-1XML\s0 using a publicly available
+\&\s-1DTD\s0, and standard-conforming simple \s-1HTML\s0,
+PostScript or \s-1PDF\s0 designed for human modification.  Examples
+of transparent image formats include \s-1PNG\s0, \s-1XCF\s0 and
+\&\s-1JPG\s0.  Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, \s-1SGML\s0 or
+\&\s-1XML\s0 for which the \s-1DTD\s0 and/or processing tools are
+not generally available, and the machine-generated \s-1HTML\s0,
+PostScript or \s-1PDF\s0 produced by some word processors for
+output purposes only.
+.Sp
+The \*(L"Title Page\*(R" means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page.  For works in
+formats which do not have any title page as such, \*(L"Title Page\*(R" means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+.Sp
+The \*(L"publisher\*(R" means any person or entity that distributes copies
+of the Document to the public.
+.Sp
+A section \*(L"Entitled \s-1XYZ\s0\*(R" means a named subunit of the Document whose
+title either is precisely \s-1XYZ\s0 or contains \s-1XYZ\s0 in parentheses following
+text that translates \s-1XYZ\s0 in another language.  (Here \s-1XYZ\s0 stands for a
+specific section name mentioned below, such as \*(L"Acknowledgements\*(R",
+\&\*(L"Dedications\*(R", \*(L"Endorsements\*(R", or \*(L"History\*(R".)  To \*(L"Preserve the Title\*(R"
+of such a section when you modify the Document means that it remains a
+section \*(L"Entitled \s-1XYZ\s0\*(R" according to this definition.
+.Sp
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document.  These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+.IP "2." 4
+.IX Item "2."
+\&\s-1VERBATIM\s0 \s-1COPYING\s0
+.Sp
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License.  You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute.  However, you may accept
+compensation in exchange for copies.  If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+.Sp
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+.IP "3." 4
+.IX Item "3."
+\&\s-1COPYING\s0 \s-1IN\s0 \s-1QUANTITY\s0
+.Sp
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover.  Both covers must also clearly and legibly identify
+you as the publisher of these copies.  The front cover must present
+the full title with all words of the title equally prominent and
+visible.  You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+.Sp
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+.Sp
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+.Sp
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+.IP "4." 4
+.IX Item "4."
+\&\s-1MODIFICATIONS\s0
+.Sp
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it.  In addition, you must do these things in the Modified Version:
+.RS 4
+.IP "A." 4
+.IX Item "A."
+Use in the Title Page (and on the covers, if any) a title distinct
+from that of the Document, and from those of previous versions
+(which should, if there were any, be listed in the History section
+of the Document).  You may use the same title as a previous version
+if the original publisher of that version gives permission.
+.IP "B." 4
+.IX Item "B."
+List on the Title Page, as authors, one or more persons or entities
+responsible for authorship of the modifications in the Modified
+Version, together with at least five of the principal authors of the
+Document (all of its principal authors, if it has fewer than five),
+unless they release you from this requirement.
+.IP "C." 4
+.IX Item "C."
+State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+.IP "D." 4
+.IX Item "D."
+Preserve all the copyright notices of the Document.
+.IP "E." 4
+.IX Item "E."
+Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+.IP "F." 4
+.IX Item "F."
+Include, immediately after the copyright notices, a license notice
+giving the public permission to use the Modified Version under the
+terms of this License, in the form shown in the Addendum below.
+.IP "G." 4
+.IX Item "G."
+Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+.IP "H." 4
+.IX Item "H."
+Include an unaltered copy of this License.
+.IP "I." 4
+.IX Item "I."
+Preserve the section Entitled \*(L"History\*(R", Preserve its Title, and add
+to it an item stating at least the title, year, new authors, and
+publisher of the Modified Version as given on the Title Page.  If
+there is no section Entitled \*(L"History\*(R" in the Document, create one
+stating the title, year, authors, and publisher of the Document as
+given on its Title Page, then add an item describing the Modified
+Version as stated in the previous sentence.
+.IP "J." 4
+.IX Item "J."
+Preserve the network location, if any, given in the Document for
+public access to a Transparent copy of the Document, and likewise
+the network locations given in the Document for previous versions
+it was based on.  These may be placed in the \*(L"History\*(R" section.
+You may omit a network location for a work that was published at
+least four years before the Document itself, or if the original
+publisher of the version it refers to gives permission.
+.IP "K." 4
+.IX Item "K."
+For any section Entitled \*(L"Acknowledgements\*(R" or \*(L"Dedications\*(R", Preserve
+the Title of the section, and preserve in the section all the
+substance and tone of each of the contributor acknowledgements and/or
+dedications given therein.
+.IP "L." 4
+.IX Item "L."
+Preserve all the Invariant Sections of the Document,
+unaltered in their text and in their titles.  Section numbers
+or the equivalent are not considered part of the section titles.
+.IP "M." 4
+.IX Item "M."
+Delete any section Entitled \*(L"Endorsements\*(R".  Such a section
+may not be included in the Modified Version.
+.IP "N." 4
+.IX Item "N."
+Do not retitle any existing section to be Entitled \*(L"Endorsements\*(R" or
+to conflict in title with any Invariant Section.
+.IP "O." 4
+.IX Item "O."
+Preserve any Warranty Disclaimers.
+.RE
+.RS 4
+.Sp
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant.  To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+.Sp
+You may add a section Entitled \*(L"Endorsements\*(R", provided it contains
+nothing but endorsements of your Modified Version by various
+parties\-\-\-for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+.Sp
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version.  Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity.  If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+.Sp
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+.RE
+.IP "5." 4
+.IX Item "5."
+\&\s-1COMBINING\s0 \s-1DOCUMENTS\s0
+.Sp
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+.Sp
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy.  If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+.Sp
+In the combination, you must combine any sections Entitled \*(L"History\*(R"
+in the various original documents, forming one section Entitled
+\&\*(L"History\*(R"; likewise combine any sections Entitled \*(L"Acknowledgements\*(R",
+and any sections Entitled \*(L"Dedications\*(R".  You must delete all
+sections Entitled \*(L"Endorsements.\*(R"
+.IP "6." 4
+.IX Item "6."
+\&\s-1COLLECTIONS\s0 \s-1OF\s0 \s-1DOCUMENTS\s0
+.Sp
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+.Sp
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+.IP "7." 4
+.IX Item "7."
+\&\s-1AGGREGATION\s0 \s-1WITH\s0 \s-1INDEPENDENT\s0 \s-1WORKS\s0
+.Sp
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an \*(L"aggregate\*(R" if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+.Sp
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+.IP "8." 4
+.IX Item "8."
+\&\s-1TRANSLATION\s0
+.Sp
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections.  You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers.  In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+.Sp
+If a section in the Document is Entitled \*(L"Acknowledgements\*(R",
+\&\*(L"Dedications\*(R", or \*(L"History\*(R", the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+.IP "9." 4
+.IX Item "9."
+\&\s-1TERMINATION\s0
+.Sp
+You may not copy, modify, sublicense, or distribute the Document
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense, or distribute it is void, and
+will automatically terminate your rights under this License.
+.Sp
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+.Sp
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+.Sp
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, receipt of a copy of some or all of the same material does
+not give you any rights to use it.
+.IP "10." 4
+.IX Item "10."
+\&\s-1FUTURE\s0 \s-1REVISIONS\s0 \s-1OF\s0 \s-1THIS\s0 \s-1LICENSE\s0
+.Sp
+The Free Software Foundation may publish new, revised versions
+of the \s-1GNU\s0 Free Documentation License from time to time.  Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.  See
+<\fBhttp://www.gnu.org/copyleft/\fR>.
+.Sp
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License \*(L"or any later version\*(R" applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation.  If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.  If the Document
+specifies that a proxy can decide which future versions of this
+License can be used, that proxy's public statement of acceptance of a
+version permanently authorizes you to choose that version for the
+Document.
+.IP "11." 4
+.IX Item "11."
+\&\s-1RELICENSING\s0
+.Sp
+\&\*(L"Massive Multiauthor Collaboration Site\*(R" (or \*(L"\s-1MMC\s0 Site\*(R") means any
+World Wide Web server that publishes copyrightable works and also
+provides prominent facilities for anybody to edit those works.  A
+public wiki that anybody can edit is an example of such a server.  A
+\&\*(L"Massive Multiauthor Collaboration\*(R" (or \*(L"\s-1MMC\s0\*(R") contained in the
+site means any set of copyrightable works thus published on the \s-1MMC\s0
+site.
+.Sp
+\&\*(L"CC-BY-SA\*(R" means the Creative Commons Attribution-Share Alike 3.0
+license published by Creative Commons Corporation, a not-for-profit
+corporation with a principal place of business in San Francisco,
+California, as well as future copyleft versions of that license
+published by that same organization.
+.Sp
+\&\*(L"Incorporate\*(R" means to publish or republish a Document, in whole or
+in part, as part of another Document.
+.Sp
+An \s-1MMC\s0 is \*(L"eligible for relicensing\*(R" if it is licensed under this
+License, and if all works that were first published under this License
+somewhere other than this \s-1MMC\s0, and subsequently incorporated in whole
+or in part into the \s-1MMC\s0, (1) had no cover texts or invariant sections,
+and (2) were thus incorporated prior to November 1, 2008.
+.Sp
+The operator of an \s-1MMC\s0 Site may republish an \s-1MMC\s0 contained in the site
+under CC-BY-SA on the same site at any time before August 1, 2009,
+provided the \s-1MMC\s0 is eligible for relicensing.
+.Sh "\s-1ADDENDUM:\s0 How to use this License for your documents"
+.IX Subsection "ADDENDUM: How to use this License for your documents"
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+.PP
+.Vb 7
+\&          Copyright (C)  <year>  <your name>.
+\&          Permission is granted to copy, distribute and/or modify this document
+\&          under the terms of the GNU Free Documentation License, Version 1.3
+\&          or any later version published by the Free Software Foundation;
+\&          with no Invariant Sections, no Front\-Cover Texts, and no Back\-Cover
+\&          Texts.  A copy of the license is included in the section entitled "GNU
+\&          Free Documentation License".
+.Ve
+.PP
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the \*(L"with...Texts.\*(R" line with this:
+.PP
+.Vb 3
+\&            with the Invariant Sections being <list their titles>, with
+\&            the Front\-Cover Texts being <list>, and with the Back\-Cover Texts
+\&            being <list>.
+.Ve
+.PP
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+.PP
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the \s-1GNU\s0 General Public License,
+to permit their use in free software.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIgpl\fR\|(7), \fIfsf\-funding\fR\|(7).
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+<\fBhttp://fsf.org/\fR>
+.PP
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
diff --git a/x86_64-w64-mingw32/bin/ar b/x86_64-w64-mingw32/bin/ar
index 711a995..44b299c 100755
--- a/x86_64-w64-mingw32/bin/ar
+++ b/x86_64-w64-mingw32/bin/ar
Binary files differ
diff --git a/x86_64-w64-mingw32/bin/as b/x86_64-w64-mingw32/bin/as
index 5a09484..e05e3d4 100755
--- a/x86_64-w64-mingw32/bin/as
+++ b/x86_64-w64-mingw32/bin/as
Binary files differ
diff --git a/x86_64-w64-mingw32/bin/dlltool b/x86_64-w64-mingw32/bin/dlltool
index a15b045..346979d 100755
--- a/x86_64-w64-mingw32/bin/dlltool
+++ b/x86_64-w64-mingw32/bin/dlltool
Binary files differ
diff --git a/x86_64-w64-mingw32/bin/ld b/x86_64-w64-mingw32/bin/ld
index 81aaff1..de6bc0b 100755
--- a/x86_64-w64-mingw32/bin/ld
+++ b/x86_64-w64-mingw32/bin/ld
Binary files differ
diff --git a/x86_64-w64-mingw32/bin/ld.bfd b/x86_64-w64-mingw32/bin/ld.bfd
index 81aaff1..de6bc0b 100755
--- a/x86_64-w64-mingw32/bin/ld.bfd
+++ b/x86_64-w64-mingw32/bin/ld.bfd
Binary files differ
diff --git a/x86_64-w64-mingw32/bin/libwinpthread-1.dll b/x86_64-w64-mingw32/bin/libwinpthread-1.dll
index e84bdfe..b2fd346 100755
--- a/x86_64-w64-mingw32/bin/libwinpthread-1.dll
+++ b/x86_64-w64-mingw32/bin/libwinpthread-1.dll
Binary files differ
diff --git a/x86_64-w64-mingw32/bin/nm b/x86_64-w64-mingw32/bin/nm
index 904d0a6..596472b 100755
--- a/x86_64-w64-mingw32/bin/nm
+++ b/x86_64-w64-mingw32/bin/nm
Binary files differ
diff --git a/x86_64-w64-mingw32/bin/objcopy b/x86_64-w64-mingw32/bin/objcopy
index 6192640..66218f9 100755
--- a/x86_64-w64-mingw32/bin/objcopy
+++ b/x86_64-w64-mingw32/bin/objcopy
Binary files differ
diff --git a/x86_64-w64-mingw32/bin/objdump b/x86_64-w64-mingw32/bin/objdump
index 70f3eff..1648cac 100755
--- a/x86_64-w64-mingw32/bin/objdump
+++ b/x86_64-w64-mingw32/bin/objdump
Binary files differ
diff --git a/x86_64-w64-mingw32/bin/ranlib b/x86_64-w64-mingw32/bin/ranlib
index 5c2ca56..620d213 100755
--- a/x86_64-w64-mingw32/bin/ranlib
+++ b/x86_64-w64-mingw32/bin/ranlib
Binary files differ
diff --git a/x86_64-w64-mingw32/bin/strip b/x86_64-w64-mingw32/bin/strip
index d70a671..5edbc2b 100755
--- a/x86_64-w64-mingw32/bin/strip
+++ b/x86_64-w64-mingw32/bin/strip
Binary files differ
diff --git a/x86_64-w64-mingw32/include/_mingw_mac.h b/x86_64-w64-mingw32/include/_mingw_mac.h
index 6f73a03..843aebd 100644
--- a/x86_64-w64-mingw32/include/_mingw_mac.h
+++ b/x86_64-w64-mingw32/include/_mingw_mac.h
@@ -11,7 +11,7 @@
 #define __MINGW64_STRINGIFY(x) \
   __STRINGIFY(x)
 
-#define __MINGW64_VERSION_MAJOR 4
+#define __MINGW64_VERSION_MAJOR 5
 #define __MINGW64_VERSION_MINOR 0
 
 /* This macro holds an monotonic increasing value, which indicates
@@ -27,7 +27,7 @@
   "." \
   __MINGW64_STRINGIFY(__MINGW64_VERSION_MINOR)
 
-#define __MINGW64_VERSION_STATE "stable"
+#define __MINGW64_VERSION_STATE "alpha"
 
 /* mingw.org's version macros: these make gcc to define
    MINGW32_SUPPORTS_MT_EH and to use the _CRT_MT global
@@ -36,48 +36,9 @@
 #define __MINGW32_MAJOR_VERSION 3
 #define __MINGW32_MINOR_VERSION 11
 
-#ifdef _WIN64
-   /* MS does not prefix symbols by underscores for 64-bit.  */
-#  ifndef __MINGW_USE_UNDERSCORE_PREFIX
-     /* As we have to support older gcc version, which are using underscores
-      as symbol prefix for x64, we have to check here for the user label
-      prefix defined by gcc. */
-#    ifdef __USER_LABEL_PREFIX__
-#      pragma push_macro ("_")
-#      undef _
-#      define _ 1
-#      if (__USER_LABEL_PREFIX__ + 0) != 0
-#        define __MINGW_USE_UNDERSCORE_PREFIX 1
-#      else
-#        define __MINGW_USE_UNDERSCORE_PREFIX 0
-#      endif
-#      undef _
-#      pragma pop_macro ("_")
-#    else /* ! __USER_LABEL_PREFIX__ */
-#      define __MINGW_USE_UNDERSCORE_PREFIX 0
-#    endif /* __USER_LABEL_PREFIX__ */
-#  endif
-#else /* ! ifdef _WIN64 */
-   /* For 32-bits we have always to prefix by underscore.  */
-#  undef __MINGW_USE_UNDERSCORE_PREFIX
-#  define __MINGW_USE_UNDERSCORE_PREFIX 1
-#endif /* ifdef _WIN64 */
-
-#if __MINGW_USE_UNDERSCORE_PREFIX == 0
-#  define __MINGW_IMP_SYMBOL(sym) __imp_##sym
-#  define __MINGW_IMP_LSYMBOL(sym) __imp_##sym
-#  define __MINGW_USYMBOL(sym) sym
-#  define __MINGW_LSYMBOL(sym) _##sym
-#else /* ! if __MINGW_USE_UNDERSCORE_PREFIX == 0 */
-#  define __MINGW_IMP_SYMBOL(sym) _imp__##sym
-#  define __MINGW_IMP_LSYMBOL(sym) __imp__##sym
-#  define __MINGW_USYMBOL(sym) _##sym
-#  define __MINGW_LSYMBOL(sym) sym
-#endif /* if __MINGW_USE_UNDERSCORE_PREFIX == 0 */
-
 /* Set VC specific compiler target macros.  */
 #if defined(__x86_64) && defined(_X86_)
-#  undef _X86_	/* _X86_ is not for __x86_64 */
+#  undef _X86_  /* _X86_ is not for __x86_64 */
 #endif
 
 #if defined(_X86_) && !defined(_M_IX86) && !defined(_M_IA64) \
@@ -104,13 +65,58 @@
 #  define _M_IA64 100
 #endif
 
-#if defined(__arm__) && !defined(_M_ARM)
+#if defined(__arm__) && !defined(_M_ARM) && !defined(_M_ARMT) \
+   && !defined(_M_THUMB)
 #  define _M_ARM 100
+#  define _M_ARMT 100
+#  define _M_THUMB 100
 #  ifndef _ARM_
 #    define _ARM_ 1
 #  endif
+#  ifndef _M_ARM_NT
+#    define _M_ARM_NT 1
+#  endif
 #endif
 
+#ifndef _X86_
+   /* MS does not prefix symbols by underscores for 64-bit.  */
+#  ifndef __MINGW_USE_UNDERSCORE_PREFIX
+     /* As we have to support older gcc version, which are using underscores
+      as symbol prefix for x64, we have to check here for the user label
+      prefix defined by gcc. */
+#    ifdef __USER_LABEL_PREFIX__
+#      pragma push_macro ("_")
+#      undef _
+#      define _ 1
+#      if (__USER_LABEL_PREFIX__ + 0) != 0
+#        define __MINGW_USE_UNDERSCORE_PREFIX 1
+#      else
+#        define __MINGW_USE_UNDERSCORE_PREFIX 0
+#      endif
+#      undef _
+#      pragma pop_macro ("_")
+#    else /* ! __USER_LABEL_PREFIX__ */
+#      define __MINGW_USE_UNDERSCORE_PREFIX 0
+#    endif /* __USER_LABEL_PREFIX__ */
+#  endif
+#else /* ! ifndef _X86_ */
+   /* For x86 we have always to prefix by underscore.  */
+#  undef __MINGW_USE_UNDERSCORE_PREFIX
+#  define __MINGW_USE_UNDERSCORE_PREFIX 1
+#endif /* ifndef _X86_ */
+
+#if __MINGW_USE_UNDERSCORE_PREFIX == 0
+#  define __MINGW_IMP_SYMBOL(sym) __imp_##sym
+#  define __MINGW_IMP_LSYMBOL(sym) __imp_##sym
+#  define __MINGW_USYMBOL(sym) sym
+#  define __MINGW_LSYMBOL(sym) _##sym
+#else /* ! if __MINGW_USE_UNDERSCORE_PREFIX == 0 */
+#  define __MINGW_IMP_SYMBOL(sym) _imp__##sym
+#  define __MINGW_IMP_LSYMBOL(sym) __imp__##sym
+#  define __MINGW_USYMBOL(sym) _##sym
+#  define __MINGW_LSYMBOL(sym) sym
+#endif /* if __MINGW_USE_UNDERSCORE_PREFIX == 0 */
+
 #ifndef __PTRDIFF_TYPE__
 #  ifdef _WIN64
 #    define __PTRDIFF_TYPE__ long long int
diff --git a/x86_64-w64-mingw32/include/activscp.h b/x86_64-w64-mingw32/include/activscp.h
index 847290e..cf93d7a 100644
--- a/x86_64-w64-mingw32/include/activscp.h
+++ b/x86_64-w64-mingw32/include/activscp.h
@@ -175,35 +175,9 @@
 DEFINE_GUID(CATID_ActiveScript, 0xf0b7a1a1, 0x9847, 0x11cf, 0x8f, 0x20, 0x00, 0x80, 0x5f, 0x2c, 0xd0, 0x64);
 DEFINE_GUID(CATID_ActiveScriptParse, 0xf0b7a1a2, 0x9847, 0x11cf, 0x8f, 0x20, 0x00, 0x80, 0x5f, 0x2c, 0xd0, 0x64);
 DEFINE_GUID(CATID_ActiveScriptEncode, 0xf0b7a1a3, 0x9847, 0x11cf, 0x8f, 0x20, 0x00, 0x80, 0x5f, 0x2c, 0xd0, 0x64);
-DEFINE_GUID(IID_IActiveScript, 0xbb1a2ae1, 0xa4f9, 0x11cf, 0x8f, 0x20, 0x00, 0x80, 0x5f, 0x2c, 0xd0, 0x64);
-DEFINE_GUID(IID_IActiveScriptParse32, 0xbb1a2ae2, 0xa4f9, 0x11cf, 0x8f, 0x20, 0x00, 0x80, 0x5f, 0x2c, 0xd0, 0x64);
-DEFINE_GUID(IID_IActiveScriptParse64, 0xc7ef7658, 0xe1ee, 0x480e, 0x97, 0xea, 0xd5, 0x2c, 0xb4, 0xd7, 0x6d, 0x17);
-DEFINE_GUID(IID_IActiveScriptEncode, 0xbb1a2ae3, 0xa4f9, 0x11cf, 0x8f, 0x20, 0x00, 0x80, 0x5f, 0x2c, 0xd0, 0x64);
-DEFINE_GUID(IID_IActiveScriptHostEncode, 0xbee9b76e, 0xcfe3, 0x11d1, 0xb7, 0x47, 0x00, 0xc0, 0x4f, 0xc2, 0xb0, 0x85);
-DEFINE_GUID(IID_IActiveScriptParseProcedureOld32, 0x1cff0050, 0x6fdd, 0x11d0, 0x93, 0x28, 0x00, 0xa0, 0xc9, 0x0d, 0xca, 0xa9);
-DEFINE_GUID(IID_IActiveScriptParseProcedureOld64, 0x21f57128, 0x08c9, 0x4638, 0xba, 0x12, 0x22, 0xd1, 0x5d, 0x88, 0xdc, 0x5c);
-DEFINE_GUID(IID_IActiveScriptParseProcedure32, 0xaa5b6a80, 0xb834, 0x11d0, 0x93, 0x2f, 0x00, 0xa0, 0xc9, 0x0d, 0xca, 0xa9);
-DEFINE_GUID(IID_IActiveScriptParseProcedure64, 0xc64713b6, 0xe029, 0x4cc5, 0x92, 0x00, 0x43, 0x8b, 0x72, 0x89, 0x0b, 0x6a);
-DEFINE_GUID(IID_IActiveScriptParseProcedure2_32, 0x71ee5b20, 0xfb04, 0x11d1, 0xb3, 0xa8, 0x00, 0xa0, 0xc9, 0x11, 0xe8, 0xb2);
-DEFINE_GUID(IID_IActiveScriptParseProcedure2_64, 0xfe7c4271, 0x210c, 0x448d, 0x9f, 0x54, 0x76, 0xda, 0xb7, 0x04, 0x7b, 0x28);
-DEFINE_GUID(IID_IActiveScriptSite, 0xdb01a1e3, 0xa42b, 0x11cf, 0x8f, 0x20, 0x00, 0x80, 0x5f, 0x2c, 0xd0, 0x64);
-DEFINE_GUID(IID_IActiveScriptSiteTraceInfo, 0x4b7272ae, 0x1955, 0x4bfe, 0x98, 0xb0, 0x78, 0x6, 0x21, 0x88, 0x85, 0x69);
-DEFINE_GUID(IID_IActiveScriptSiteWindow, 0xd10f6761, 0x83e9, 0x11cf, 0x8f, 0x20, 0x00, 0x80, 0x5f, 0x2c, 0xd0, 0x64);
-DEFINE_GUID(IID_IActiveScriptSiteInterruptPoll, 0x539698a0, 0xcdca, 0x11cf, 0xa5, 0xeb, 0x00, 0xaa, 0x00, 0x47, 0xa0, 0x63);
-DEFINE_GUID(IID_IActiveScriptSiteUIControl, 0xaedae97e, 0xd7ee, 0x4796, 0xb9, 0x60, 0x7f, 0x9, 0x2a, 0xe8, 0x44, 0xab);
-DEFINE_GUID(IID_IActiveScriptError,   0xeae1ba61, 0xa4ed, 0x11cf, 0x8f, 0x20, 0x00, 0x80, 0x5f, 0x2c, 0xd0, 0x64);
-DEFINE_GUID(IID_IActiveScriptError64, 0xb21fb2a1, 0x5b8f, 0x4963, 0x8c, 0x21, 0x21, 0x45, 0x0f, 0x84, 0xed, 0x7f);
-DEFINE_GUID(IID_IBindEventHandler, 0x63cdbcb0, 0xc1b1, 0x11d0, 0x93, 0x36, 0x00, 0xa0, 0xc9, 0x0d, 0xca, 0xa9);
-DEFINE_GUID(IID_IActiveScriptStats, 0xb8da6310, 0xe19b, 0x11d0, 0x93, 0x3c, 0x00, 0xa0, 0xc9, 0x0d, 0xca, 0xa9);
-DEFINE_GUID(IID_IActiveScriptProperty, 0x4954E0D0, 0xFBC7, 0x11D1, 0x84, 0x10, 0x00, 0x60, 0x08, 0xC3, 0xFB, 0xFC);
-DEFINE_GUID(IID_ITridentEventSink, 0x1dc9ca50, 0x6ef, 0x11d2, 0x84, 0x15, 0x00, 0x60, 0x08, 0xc3, 0xfb, 0xfc);
-DEFINE_GUID(IID_IActiveScriptGarbageCollector, 0x6aa2c4a0, 0x2b53, 0x11d4, 0xa2, 0xa0, 0x00, 0x10, 0x4b, 0xd3, 0x50, 0x90);
-DEFINE_GUID(IID_IActiveScriptSIPInfo, 0x764651d0, 0x38de, 0x11d4, 0xa2, 0xa3, 0x00, 0x10, 0x4b, 0xd3, 0x50, 0x90);
-DEFINE_GUID(IID_IActiveScriptTraceInfo, 0xC35456E7, 0xBEBF, 0x4a1b, 0x86, 0xA9, 0x24, 0xD5, 0x6B, 0xE8, 0xB3, 0x69);
 DEFINE_GUID(OID_VBSSIP, 0x1629f04e, 0x2799, 0x4db5, 0x8f, 0xe5, 0xac, 0xe1, 0x0f, 0x17, 0xeb, 0xab);
 DEFINE_GUID(OID_JSSIP,  0x6c9e010, 0x38ce, 0x11d4, 0xa2, 0xa3, 0x00, 0x10, 0x4b, 0xd3, 0x50, 0x90);
 DEFINE_GUID(OID_WSFSIP, 0x1a610570, 0x38ce, 0x11d4, 0xa2, 0xa3, 0x00, 0x10, 0x4b, 0xd3, 0x50, 0x90);
-DEFINE_GUID(IID_IActiveScriptStringCompare, 0x58562769, 0xED52, 0x42f7, 0x84, 0x03, 0x49, 0x63, 0x51, 0x4E, 0x1F, 0x11);
 #endif
 
 #define SCRIPTITEM_ISVISIBLE 0x00000002
diff --git a/x86_64-w64-mingw32/include/adoint_backcompat.h b/x86_64-w64-mingw32/include/adoint_backcompat.h
index bbc3c42..f816cb6 100644
--- a/x86_64-w64-mingw32/include/adoint_backcompat.h
+++ b/x86_64-w64-mingw32/include/adoint_backcompat.h
@@ -461,11 +461,11 @@
   } ConnectModeEnum;
   typedef DECLSPEC_UUID ("00000570-0000-0010-8000-00AA006D2EA4")
   enum RecordCreateOptionsEnum { adCreateCollection = 0x2000,
-    adCreateStructDoc = 0x80000000,
-    adCreateNonCollection = 0,
-    adOpenIfExists = 0x2000000,
-    adCreateOverwrite = 0x4000000,
-    adFailIfNotExists = -1
+    adCreateStructDoc = (int) 0x80000000,
+    adCreateNonCollection = (int) 0,
+    adOpenIfExists = (int) 0x2000000,
+    adCreateOverwrite = (int) 0x4000000,
+    adFailIfNotExists = (int) -1
   } RecordCreateOptionsEnum;
   typedef DECLSPEC_UUID ("00000571-0000-0010-8000-00AA006D2EA4")
   enum RecordOpenOptionsEnum { adOpenRecordUnspecified = -1,
diff --git a/x86_64-w64-mingw32/include/atsmedia.h b/x86_64-w64-mingw32/include/atsmedia.h
index 1284aaf..d6b0651 100644
--- a/x86_64-w64-mingw32/include/atsmedia.h
+++ b/x86_64-w64-mingw32/include/atsmedia.h
@@ -18,7 +18,7 @@
 
 #include <winapifamily.h>
 
-#if WINAPI_FAMILY_PARTION(WINAPI_PARTITION_DESKTOP)
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
 
 #pragma once
 
diff --git a/x86_64-w64-mingw32/include/axextendenums.h b/x86_64-w64-mingw32/include/axextendenums.h
index c4f9205..7ea2ae3 100644
--- a/x86_64-w64-mingw32/include/axextendenums.h
+++ b/x86_64-w64-mingw32/include/axextendenums.h
@@ -40,7 +40,11 @@
   AnalogVideoMask_MCE_SECAM = AnalogVideo_SECAM_B | AnalogVideo_SECAM_D | AnalogVideo_SECAM_G | AnalogVideo_SECAM_H | AnalogVideo_SECAM_K | AnalogVideo_SECAM_K1 | AnalogVideo_SECAM_L | AnalogVideo_SECAM_L1
 } AnalogVideoStandard;
 
-typedef enum tagTunerInputType {
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+enum tagTunerInputType {
   TunerInputCable,
   TunerInputAntenna
 } TunerInputType;
diff --git a/x86_64-w64-mingw32/include/bdaiface.h b/x86_64-w64-mingw32/include/bdaiface.h
index 6df4530..06ab703 100644
--- a/x86_64-w64-mingw32/include/bdaiface.h
+++ b/x86_64-w64-mingw32/include/bdaiface.h
@@ -1,16 +1,131 @@
-/**
- * This file has no copyright assigned and is placed in the Public Domain.
- * This file is part of the mingw-w64 runtime package.
- * No warranty is given; refer to the file DISCLAIMER.PD within this package.
- */
-#ifndef __INC_BDAIFACE__
-#define __INC_BDAIFACE__
+/*** Autogenerated by WIDL 1.6 from include/bdaiface.idl - Do not edit ***/
 
-#include <objbase.h>
-#include <bdatypes.h>
-#include <dshow.h>
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
 
-#if (_WIN32_WINNT >= 0x0600)
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
+
+#ifndef __bdaiface_h__
+#define __bdaiface_h__
+
+/* Forward declarations */
+
+#ifndef __IBDA_NetworkProvider_FWD_DEFINED__
+#define __IBDA_NetworkProvider_FWD_DEFINED__
+typedef interface IBDA_NetworkProvider IBDA_NetworkProvider;
+#endif
+
+#ifndef __IBDA_EthernetFilter_FWD_DEFINED__
+#define __IBDA_EthernetFilter_FWD_DEFINED__
+typedef interface IBDA_EthernetFilter IBDA_EthernetFilter;
+#endif
+
+#ifndef __IBDA_IPV4Filter_FWD_DEFINED__
+#define __IBDA_IPV4Filter_FWD_DEFINED__
+typedef interface IBDA_IPV4Filter IBDA_IPV4Filter;
+#endif
+
+#ifndef __IBDA_IPV6Filter_FWD_DEFINED__
+#define __IBDA_IPV6Filter_FWD_DEFINED__
+typedef interface IBDA_IPV6Filter IBDA_IPV6Filter;
+#endif
+
+#ifndef __IBDA_DeviceControl_FWD_DEFINED__
+#define __IBDA_DeviceControl_FWD_DEFINED__
+typedef interface IBDA_DeviceControl IBDA_DeviceControl;
+#endif
+
+#ifndef __IBDA_PinControl_FWD_DEFINED__
+#define __IBDA_PinControl_FWD_DEFINED__
+typedef interface IBDA_PinControl IBDA_PinControl;
+#endif
+
+#ifndef __IBDA_SignalProperties_FWD_DEFINED__
+#define __IBDA_SignalProperties_FWD_DEFINED__
+typedef interface IBDA_SignalProperties IBDA_SignalProperties;
+#endif
+
+#ifndef __IBDA_SignalStatistics_FWD_DEFINED__
+#define __IBDA_SignalStatistics_FWD_DEFINED__
+typedef interface IBDA_SignalStatistics IBDA_SignalStatistics;
+#endif
+
+#ifndef __IBDA_Topology_FWD_DEFINED__
+#define __IBDA_Topology_FWD_DEFINED__
+typedef interface IBDA_Topology IBDA_Topology;
+#endif
+
+#ifndef __IBDA_VoidTransform_FWD_DEFINED__
+#define __IBDA_VoidTransform_FWD_DEFINED__
+typedef interface IBDA_VoidTransform IBDA_VoidTransform;
+#endif
+
+#ifndef __IBDA_NullTransform_FWD_DEFINED__
+#define __IBDA_NullTransform_FWD_DEFINED__
+typedef interface IBDA_NullTransform IBDA_NullTransform;
+#endif
+
+#ifndef __IBDA_FrequencyFilter_FWD_DEFINED__
+#define __IBDA_FrequencyFilter_FWD_DEFINED__
+typedef interface IBDA_FrequencyFilter IBDA_FrequencyFilter;
+#endif
+
+#ifndef __IBDA_LNBInfo_FWD_DEFINED__
+#define __IBDA_LNBInfo_FWD_DEFINED__
+typedef interface IBDA_LNBInfo IBDA_LNBInfo;
+#endif
+
+#ifndef __IBDA_DiseqCommand_FWD_DEFINED__
+#define __IBDA_DiseqCommand_FWD_DEFINED__
+typedef interface IBDA_DiseqCommand IBDA_DiseqCommand;
+#endif
+
+#ifndef __IBDA_AutoDemodulate_FWD_DEFINED__
+#define __IBDA_AutoDemodulate_FWD_DEFINED__
+typedef interface IBDA_AutoDemodulate IBDA_AutoDemodulate;
+#endif
+
+#ifndef __IBDA_AutoDemodulateEx_FWD_DEFINED__
+#define __IBDA_AutoDemodulateEx_FWD_DEFINED__
+typedef interface IBDA_AutoDemodulateEx IBDA_AutoDemodulateEx;
+#endif
+
+#ifndef __IBDA_DigitalDemodulator_FWD_DEFINED__
+#define __IBDA_DigitalDemodulator_FWD_DEFINED__
+typedef interface IBDA_DigitalDemodulator IBDA_DigitalDemodulator;
+#endif
+
+#ifndef __IBDA_DigitalDemodulator2_FWD_DEFINED__
+#define __IBDA_DigitalDemodulator2_FWD_DEFINED__
+typedef interface IBDA_DigitalDemodulator2 IBDA_DigitalDemodulator2;
+#endif
+
+#ifndef __IBDA_DigitalDemodulator3_FWD_DEFINED__
+#define __IBDA_DigitalDemodulator3_FWD_DEFINED__
+typedef interface IBDA_DigitalDemodulator3 IBDA_DigitalDemodulator3;
+#endif
+
+#ifndef __ICCSubStreamFiltering_FWD_DEFINED__
+#define __ICCSubStreamFiltering_FWD_DEFINED__
+typedef interface ICCSubStreamFiltering ICCSubStreamFiltering;
+#endif
+
+#ifndef __IBDA_IPSinkControl_FWD_DEFINED__
+#define __IBDA_IPSinkControl_FWD_DEFINED__
+typedef interface IBDA_IPSinkControl IBDA_IPSinkControl;
+#endif
+
+#ifndef __IBDA_IPSinkInfo_FWD_DEFINED__
+#define __IBDA_IPSinkInfo_FWD_DEFINED__
+typedef interface IBDA_IPSinkInfo IBDA_IPSinkInfo;
+#endif
 
 #ifndef __IEnumPIDMap_FWD_DEFINED__
 #define __IEnumPIDMap_FWD_DEFINED__
@@ -22,497 +137,8106 @@
 typedef interface IMPEG2PIDMap IMPEG2PIDMap;
 #endif
 
-#ifdef __CRT_UUID_DECL
-__CRT_UUID_DECL(IEnumPIDMap,0xafb6c2a2,0x2c41,0x11d3,0x8a,0x60,0x00,0x00,0xf8,0x1e,0x0e,0x4a);
+#ifndef __IFrequencyMap_FWD_DEFINED__
+#define __IFrequencyMap_FWD_DEFINED__
+typedef interface IFrequencyMap IFrequencyMap;
 #endif
 
-#undef  INTERFACE
-#define INTERFACE IEnumPIDMap
-DECLARE_INTERFACE_(IEnumPIDMap,IUnknown)
-{
-    BEGIN_INTERFACE
-
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-    /* IEnumPIDMap methods */
-    STDMETHOD_(HRESULT,Next)(THIS_ ULONG req, PID_MAP *map, ULONG count) PURE;
-    STDMETHOD_(HRESULT,Skip)(THIS_ ULONG rec) PURE;
-    STDMETHOD_(HRESULT,Reset)(THIS) PURE;
-    STDMETHOD_(HRESULT,Clone)(THIS_ IEnumPIDMap **pIEnumPIDMap) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IEnumPIDMap_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IEnumPIDMap_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IEnumPIDMap_Release(This) (This)->lpVtbl->Release(This)
-#define IEnumPIDMap_Next(This,req,map,count) (This)->lpVtbl->Next(This,req,map,count)
-#define IEnumPIDMap_Skip(This,rec) (This)->lpVtbl->Skip(This,rec)
-#define IEnumPIDMap_Reset(This) (This)->lpVtbl->Reset(This)
-#define IEnumPIDMap_Clone(This,pIEnumPIDMap) (This)->lpVtbl->Clone(This,pIEnumPIDMap)
-#endif /*COBJMACROS*/
-
-#ifdef __CRT_UUID_DECL
-__CRT_UUID_DECL(IMPEG2PIDMap,0xafb6c2a1,0x2c41,0x11d3,0x8a,0x60,0x00,0x00,0xf8,0x1e,0x0e,0x4a);
+#ifndef __IBDA_EasMessage_FWD_DEFINED__
+#define __IBDA_EasMessage_FWD_DEFINED__
+typedef interface IBDA_EasMessage IBDA_EasMessage;
 #endif
 
-#undef  INTERFACE
-#define INTERFACE IMPEG2PIDMap
-DECLARE_INTERFACE_(IMPEG2PIDMap,IUnknown)
-{
-    BEGIN_INTERFACE
-
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IMPEG2PIDMap methods */
-    STDMETHOD_(HRESULT,MapPID)(THIS_ ULONG numPid,ULONG *pPid,MEDIA_SAMPLE_CONTENT MediaSampleContent) PURE;
-    STDMETHOD_(HRESULT,UnmapPID)(THIS_ ULONG numPid,ULONG *pPid) PURE;
-    STDMETHOD_(HRESULT,EnumPIDMap)(THIS_ IEnumPIDMap **pIEnumPIDMap) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IMPEG2PIDMap_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IMPEG2PIDMap_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IMPEG2PIDMap_Release(This) (This)->lpVtbl->Release(This)
-#define IMPEG2PIDMap_MapPID(This,numPid,pPid,MediaSampleContent) (This)->lpVtbl->MapPID(This,numPid,pPid,MediaSampleContent)
-#define IMPEG2PIDMap_UnmapPID(This,numPid,pPid) (This)->lpVtbl->UnmapPID(This,numPid,pPid)
-#define IMPEG2PIDMap_EnumPIDMap(This,pIEnumPIDMap) (This)->lpVtbl->EnumPIDMap(This,pIEnumPIDMap)
-#endif /*COBJMACROS*/
-
-
+#ifndef __IBDA_TransportStreamInfo_FWD_DEFINED__
+#define __IBDA_TransportStreamInfo_FWD_DEFINED__
+typedef interface IBDA_TransportStreamInfo IBDA_TransportStreamInfo;
 #endif
-#if (_WIN32_WINNT >= 0x0601)
 
-typedef enum ApplicationTypeType {
-  SCTE28_ConditionalAccess              = 0,
-  SCTE28_POD_Host_Binding_Information,
-  SCTE28_IPService,
-  SCTE28_NetworkInterface_SCTE55_2,
-  SCTE28_NetworkInterface_SCTE55_1,
-  SCTE28_CopyProtection,
-  SCTE28_Diagnostic,
-  SCTE28_Undesignated,
-  SCTE28_Reserved 
-} ApplicationTypeType;
+#ifndef __IBDA_ConditionalAccess_FWD_DEFINED__
+#define __IBDA_ConditionalAccess_FWD_DEFINED__
+typedef interface IBDA_ConditionalAccess IBDA_ConditionalAccess;
+#endif
 
-typedef enum BDA_DrmPairingError {
-  BDA_DrmPairing_Succeeded            = 0,
-  BDA_DrmPairing_HardwareFailure,
-  BDA_DrmPairing_NeedRevocationData,
-  BDA_DrmPairing_NeedIndiv,
-  BDA_DrmPairing_Other,
-  BDA_DrmPairing_DrmInitFailed,
-  BDA_DrmPairing_DrmNotPaired,
-  BDA_DrmPairing_DrmRePairSoon 
-} BDA_DrmPairingError;
+#ifndef __IBDA_DiagnosticProperties_FWD_DEFINED__
+#define __IBDA_DiagnosticProperties_FWD_DEFINED__
+typedef interface IBDA_DiagnosticProperties IBDA_DiagnosticProperties;
+#endif
 
-typedef enum SmartCardAssociationType {
-  NotAssociated        = 0,
-  Associated,
-  AssociationUnknown 
-} SmartCardAssociationType;
+#ifndef __IBDA_DRM_FWD_DEFINED__
+#define __IBDA_DRM_FWD_DEFINED__
+typedef interface IBDA_DRM IBDA_DRM;
+#endif
 
-enum SmartCardStatusType {
-  CardInserted          = 0,
-  CardRemoved,
-  CardError,
-  CardDataChanged,
-  CardFirmwareUpgrade 
-};
-
-enum UICloseReasonType {
-  NotReady       = 0,
-  UserClosed,
-  SystemClosed,
-  DeviceClosed,
-  ErrorClosed 
-};
-
-/* Guessed from: https://acidframework.googlecode.com/svn-history/r215/trunk/Acid/Multimedia/DirectShow/BDA/BDAIface.cs */
-typedef enum _LocationCodeSchemeType {
-  SCTE_18 = 0
-} LocationCodeSchemeType;
-
-typedef struct _EALocationCodeType {
-  LocationCodeSchemeType LocationCodeScheme;
-  BYTE                   state_code;
-  BYTE                   county_subdivision;
-  WORD                   county_code;
-} EALocationCodeType;
-
-typedef struct _SmartCardApplication {
-  ApplicationTypeType ApplicationType;
-  USHORT              ApplicationVersion;
-  BSTR                pbstrApplicationName;
-  BSTR                pbstrApplicationURL;
-} SmartCardApplication;
-
-typedef struct _TransportSampleStatistics {
-  DWORD          dwWindowSize;
-  DWORD          dwNoOfRunningPackets;
-  DWORD          dwNoOfScrambledPackets;
-  DWORD          dwNoOfDiscontinuity;
-  DWORD          dwNoOfDroppedPackets;
-  REFERENCE_TIME rtCurrentStreamTime;
-  REFERENCE_TIME rtFirstPacketStreamTime;
-  REFERENCE_TIME rtLastPacketStreamTime;
-  REFERENCE_TIME rtLastDemuxInputSampleTime;
-} TRANSPORT_SAMPLE_STATISTICS;
-
-#define PBDA_Encoder_Video_MPEG2PartII 0x00000000
-#define PBDA_Encoder_Video_MPEG4Part10 0x00000001
-#define PBDA_Encoder_Video_MPEG4Part10 0x00000001
-#define PBDA_Encoder_Video_H264 0x00000001
-
-#define PBDA_Encoder_BitrateMode_Constant 0x00000001
-#define PBDA_Encoder_BitrateMode_Variable 0x00000002
-#define PBDA_Encoder_BitrateMode_Average 0x00000003
+#ifndef __IBDA_NameValueService_FWD_DEFINED__
+#define __IBDA_NameValueService_FWD_DEFINED__
+typedef interface IBDA_NameValueService IBDA_NameValueService;
+#endif
 
 #ifndef __IBDA_ConditionalAccessEx_FWD_DEFINED__
 #define __IBDA_ConditionalAccessEx_FWD_DEFINED__
-typedef struct IBDA_ConditionalAccessEx IBDA_ConditionalAccessEx;
+typedef interface IBDA_ConditionalAccessEx IBDA_ConditionalAccessEx;
 #endif
 
-#ifndef __IBDA_DRIDRMService_FWD_DEFINED__
-#define __IBDA_DRIDRMService_FWD_DEFINED__
-typedef struct IBDA_DRIDRMService IBDA_DRIDRMService;
-#endif
-
-#ifndef __IBDA_Encoder_FWD_DEFINED__
-#define __IBDA_Encoder_FWD_DEFINED__
-typedef struct IBDA_Encoder IBDA_Encoder;
+#ifndef __IBDA_ISDBConditionalAccess_FWD_DEFINED__
+#define __IBDA_ISDBConditionalAccess_FWD_DEFINED__
+typedef interface IBDA_ISDBConditionalAccess IBDA_ISDBConditionalAccess;
 #endif
 
 #ifndef __IBDA_EventingService_FWD_DEFINED__
 #define __IBDA_EventingService_FWD_DEFINED__
-typedef struct IBDA_EventingService IBDA_EventingService;
+typedef interface IBDA_EventingService IBDA_EventingService;
+#endif
+
+#ifndef __IBDA_AUX_FWD_DEFINED__
+#define __IBDA_AUX_FWD_DEFINED__
+typedef interface IBDA_AUX IBDA_AUX;
+#endif
+
+#ifndef __IBDA_Encoder_FWD_DEFINED__
+#define __IBDA_Encoder_FWD_DEFINED__
+typedef interface IBDA_Encoder IBDA_Encoder;
 #endif
 
 #ifndef __IBDA_FDC_FWD_DEFINED__
 #define __IBDA_FDC_FWD_DEFINED__
-typedef struct IBDA_FDC IBDA_FDC;
+typedef interface IBDA_FDC IBDA_FDC;
 #endif
 
 #ifndef __IBDA_GuideDataDeliveryService_FWD_DEFINED__
 #define __IBDA_GuideDataDeliveryService_FWD_DEFINED__
-typedef struct IBDA_GuideDataDeliveryService IBDA_GuideDataDeliveryService;
+typedef interface IBDA_GuideDataDeliveryService IBDA_GuideDataDeliveryService;
 #endif
 
-#ifndef __IBDA_ISDBConditionalAccess_FWD_DEFINED__
-#define __IBDA_ISDBConditionalAccess_FWD_DEFINED__
-typedef struct IBDA_ISDBConditionalAccess IBDA_ISDBConditionalAccess;
+#ifndef __IBDA_DRMService_FWD_DEFINED__
+#define __IBDA_DRMService_FWD_DEFINED__
+typedef interface IBDA_DRMService IBDA_DRMService;
+#endif
+
+#ifndef __IBDA_WMDRMSession_FWD_DEFINED__
+#define __IBDA_WMDRMSession_FWD_DEFINED__
+typedef interface IBDA_WMDRMSession IBDA_WMDRMSession;
+#endif
+
+#ifndef __IBDA_WMDRMTuner_FWD_DEFINED__
+#define __IBDA_WMDRMTuner_FWD_DEFINED__
+typedef interface IBDA_WMDRMTuner IBDA_WMDRMTuner;
+#endif
+
+#ifndef __IBDA_DRIDRMService_FWD_DEFINED__
+#define __IBDA_DRIDRMService_FWD_DEFINED__
+typedef interface IBDA_DRIDRMService IBDA_DRIDRMService;
+#endif
+
+#ifndef __IBDA_DRIWMDRMSession_FWD_DEFINED__
+#define __IBDA_DRIWMDRMSession_FWD_DEFINED__
+typedef interface IBDA_DRIWMDRMSession IBDA_DRIWMDRMSession;
 #endif
 
 #ifndef __IBDA_MUX_FWD_DEFINED__
 #define __IBDA_MUX_FWD_DEFINED__
-typedef struct IBDA_MUX IBDA_MUX;
+typedef interface IBDA_MUX IBDA_MUX;
+#endif
+
+#ifndef __IBDA_TransportStreamSelector_FWD_DEFINED__
+#define __IBDA_TransportStreamSelector_FWD_DEFINED__
+typedef interface IBDA_TransportStreamSelector IBDA_TransportStreamSelector;
 #endif
 
 #ifndef __IBDA_UserActivityService_FWD_DEFINED__
 #define __IBDA_UserActivityService_FWD_DEFINED__
-typedef struct IBDA_UserActivityService IBDA_UserActivityService;
+typedef interface IBDA_UserActivityService IBDA_UserActivityService;
 #endif
 
-#ifndef __IBDA_ISDBConditionalAccess_FWD_DEFINED__
-#define __IBDA_ISDBConditionalAccess_FWD_DEFINED__
-typedef struct IBDA_ISDBConditionalAccess IBDA_ISDBConditionalAccess;
+/* Headers for imported files */
+
+#include <unknwn.h>
+#include <strmif.h>
+#include <bdatypes.h>
+
+#ifdef __cplusplus
+extern "C" {
 #endif
 
-#undef  INTERFACE
-#define INTERFACE IBDA_ConditionalAccessEx
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
-#endif
-DECLARE_INTERFACE_(IBDA_ConditionalAccessEx,IUnknown)
+#include <winapifamily.h>
+
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+typedef enum SmartCardStatusType {
+    CardInserted = 0,
+    CardRemoved = 1,
+    CardError = 2,
+    CardDataChanged = 3,
+    CardFirmwareUpgrade = 4
+} SmartCardStatusType;
+typedef enum SmartCardAssociationType {
+    NotAssociated = 0,
+    Associated = 1,
+    AssociationUnknown = 2
+} SmartCardAssociationType;
+typedef enum LocationCodeSchemeType {
+    SCTE_18 = 0
+} LocationCodeSchemeType;
+typedef enum EntitlementType {
+    Entitled = 0,
+    NotEntitled = 1,
+    TechnicalFailure = 2
+} EntitlementType;
+typedef enum UICloseReasonType {
+    NotReady = 0,
+    UserClosed = 1,
+    SystemClosed = 2,
+    DeviceClosed = 3,
+    ErrorClosed = 4
+} UICloseReasonType;
+typedef enum BDA_DrmPairingError {
+    BDA_DrmPairing_Succeeded = 0,
+    BDA_DrmPairing_HardwareFailure = 1,
+    BDA_DrmPairing_NeedRevocationData = 2,
+    BDA_DrmPairing_NeedIndiv = 3,
+    BDA_DrmPairing_Other = 4,
+    BDA_DrmPairing_DrmInitFailed = 5,
+    BDA_DrmPairing_DrmNotPaired = 6,
+    BDA_DrmPairing_DrmRePairSoon = 7,
+    BDA_DrmPairing_Aborted = 8,
+    BDA_DrmPairing_NeedSDKUpdate = 9
+} BDA_DrmPairingError;
+typedef struct EALocationCodeType {
+    LocationCodeSchemeType LocationCodeScheme;
+    BYTE state_code;
+    BYTE county_subdivision;
+    WORD county_code;
+} EALocationCodeType;
+typedef struct SmartCardApplication {
+    ApplicationTypeType ApplicationType;
+    USHORT ApplicationVersion;
+    BSTR pbstrApplicationName;
+    BSTR pbstrApplicationURL;
+} SmartCardApplication;
+
+#define PBDA_Encoder_Audio_AlgorithmType_MPEG1LayerII 0x0
+#define PBDA_Encoder_Audio_AlgorithmType_AC3 0x1
+
+#define PBDA_Encoder_Video_MPEG2PartII 0x0
+#define PBDA_Encoder_Video_MPEG4Part10 0x1
+
+#define PBDA_Encoder_Video_AVC 0x1
+#define PBDA_Encoder_Video_H264 0x1
+
+#define PBDA_Encoder_BitrateMode_Constant 1
+#define PBDA_Encoder_BitrateMode_Variable 2
+#define PBDA_Encoder_BitrateMode_Average 3
+typedef enum __WIDL_bdaiface_generated_name_0000000F {
+    KSPROPERTY_IPSINK_MULTICASTLIST = 0,
+    KSPROPERTY_IPSINK_ADAPTER_DESCRIPTION = 1,
+    KSPROPERTY_IPSINK_ADAPTER_ADDRESS = 2
+} KSPROPERTY_IPSINK;
+/*****************************************************************************
+ * IBDA_NetworkProvider interface
+ */
+#ifndef __IBDA_NetworkProvider_INTERFACE_DEFINED__
+#define __IBDA_NetworkProvider_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_NetworkProvider, 0xfd501041, 0x8ebe, 0x11ce, 0x81,0x83, 0x00,0xaa,0x00,0x57,0x7d,0xa2);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("fd501041-8ebe-11ce-8183-00aa00577da2")
+IBDA_NetworkProvider : public IUnknown
 {
+    virtual HRESULT STDMETHODCALLTYPE PutSignalSource(
+        ULONG ulSignalSource) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSignalSource(
+        ULONG *pulSignalSource) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetNetworkType(
+        GUID *pguidNetworkType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PutTuningSpace(
+        REFGUID guidTuningSpace) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTuningSpace(
+        GUID *pguidTuingSpace) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RegisterDeviceFilter(
+        IUnknown *pUnkFilterControl,
+        ULONG *ppvRegisitrationContext) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnRegisterDeviceFilter(
+        ULONG pvRegistrationContext) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_NetworkProvider, 0xfd501041, 0x8ebe, 0x11ce, 0x81,0x83, 0x00,0xaa,0x00,0x57,0x7d,0xa2)
+#endif
+#else
+typedef struct IBDA_NetworkProviderVtbl {
     BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_NetworkProvider* This,
+        REFIID riid,
+        void **ppvObject);
 
-    /* IBDA_ConditionalAccessEx methods */
-    STDMETHOD_(HRESULT,CheckEntitlementToken)(THIS_ ULONG ulDialogRequest,BSTR bstrLanguage,BDA_CONDITIONALACCESS_REQUESTTYPE RequestType,ULONG ulcbEntitlementTokenLen,BYTE *pbEntitlementToken,ULONG *pulDescrambleStatus) PURE;
-    STDMETHOD_(HRESULT,CloseMmiDialog)(THIS_ ULONG ulDialogRequest,BSTR bstrLanguage,ULONG ulDialogNumber,BDA_CONDITIONALACCESS_MMICLOSEREASON ReasonCode,ULONG *pulSessionResult) PURE;
-    STDMETHOD_(HRESULT,CreateDialogRequestNumber)(THIS_ ULONG *pulDialogRequestNumber) PURE;
-    STDMETHOD_(HRESULT,OpenBroadcastMmi)(THIS_ ULONG ulDialogRequest,BSTR bstrLanguage,ULONG EventId) PURE;
-    STDMETHOD_(HRESULT,SetCaptureToken)(THIS_ ULONG ulcbCaptureTokenLen,BYTE *pbCaptureToken) PURE;
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_NetworkProvider* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_NetworkProvider* This);
+
+    /*** IBDA_NetworkProvider methods ***/
+    HRESULT (STDMETHODCALLTYPE *PutSignalSource)(
+        IBDA_NetworkProvider* This,
+        ULONG ulSignalSource);
+
+    HRESULT (STDMETHODCALLTYPE *GetSignalSource)(
+        IBDA_NetworkProvider* This,
+        ULONG *pulSignalSource);
+
+    HRESULT (STDMETHODCALLTYPE *GetNetworkType)(
+        IBDA_NetworkProvider* This,
+        GUID *pguidNetworkType);
+
+    HRESULT (STDMETHODCALLTYPE *PutTuningSpace)(
+        IBDA_NetworkProvider* This,
+        REFGUID guidTuningSpace);
+
+    HRESULT (STDMETHODCALLTYPE *GetTuningSpace)(
+        IBDA_NetworkProvider* This,
+        GUID *pguidTuingSpace);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterDeviceFilter)(
+        IBDA_NetworkProvider* This,
+        IUnknown *pUnkFilterControl,
+        ULONG *ppvRegisitrationContext);
+
+    HRESULT (STDMETHODCALLTYPE *UnRegisterDeviceFilter)(
+        IBDA_NetworkProvider* This,
+        ULONG pvRegistrationContext);
 
     END_INTERFACE
+} IBDA_NetworkProviderVtbl;
+interface IBDA_NetworkProvider {
+    CONST_VTBL IBDA_NetworkProviderVtbl* lpVtbl;
 };
+
 #ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_NetworkProvider_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_NetworkProvider_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_NetworkProvider_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_NetworkProvider methods ***/
+#define IBDA_NetworkProvider_PutSignalSource(This,ulSignalSource) (This)->lpVtbl->PutSignalSource(This,ulSignalSource)
+#define IBDA_NetworkProvider_GetSignalSource(This,pulSignalSource) (This)->lpVtbl->GetSignalSource(This,pulSignalSource)
+#define IBDA_NetworkProvider_GetNetworkType(This,pguidNetworkType) (This)->lpVtbl->GetNetworkType(This,pguidNetworkType)
+#define IBDA_NetworkProvider_PutTuningSpace(This,guidTuningSpace) (This)->lpVtbl->PutTuningSpace(This,guidTuningSpace)
+#define IBDA_NetworkProvider_GetTuningSpace(This,pguidTuingSpace) (This)->lpVtbl->GetTuningSpace(This,pguidTuingSpace)
+#define IBDA_NetworkProvider_RegisterDeviceFilter(This,pUnkFilterControl,ppvRegisitrationContext) (This)->lpVtbl->RegisterDeviceFilter(This,pUnkFilterControl,ppvRegisitrationContext)
+#define IBDA_NetworkProvider_UnRegisterDeviceFilter(This,pvRegistrationContext) (This)->lpVtbl->UnRegisterDeviceFilter(This,pvRegistrationContext)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_NetworkProvider_QueryInterface(IBDA_NetworkProvider* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_NetworkProvider_AddRef(IBDA_NetworkProvider* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_NetworkProvider_Release(IBDA_NetworkProvider* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_NetworkProvider methods ***/
+static FORCEINLINE HRESULT IBDA_NetworkProvider_PutSignalSource(IBDA_NetworkProvider* This,ULONG ulSignalSource) {
+    return This->lpVtbl->PutSignalSource(This,ulSignalSource);
+}
+static FORCEINLINE HRESULT IBDA_NetworkProvider_GetSignalSource(IBDA_NetworkProvider* This,ULONG *pulSignalSource) {
+    return This->lpVtbl->GetSignalSource(This,pulSignalSource);
+}
+static FORCEINLINE HRESULT IBDA_NetworkProvider_GetNetworkType(IBDA_NetworkProvider* This,GUID *pguidNetworkType) {
+    return This->lpVtbl->GetNetworkType(This,pguidNetworkType);
+}
+static FORCEINLINE HRESULT IBDA_NetworkProvider_PutTuningSpace(IBDA_NetworkProvider* This,REFGUID guidTuningSpace) {
+    return This->lpVtbl->PutTuningSpace(This,guidTuningSpace);
+}
+static FORCEINLINE HRESULT IBDA_NetworkProvider_GetTuningSpace(IBDA_NetworkProvider* This,GUID *pguidTuingSpace) {
+    return This->lpVtbl->GetTuningSpace(This,pguidTuingSpace);
+}
+static FORCEINLINE HRESULT IBDA_NetworkProvider_RegisterDeviceFilter(IBDA_NetworkProvider* This,IUnknown *pUnkFilterControl,ULONG *ppvRegisitrationContext) {
+    return This->lpVtbl->RegisterDeviceFilter(This,pUnkFilterControl,ppvRegisitrationContext);
+}
+static FORCEINLINE HRESULT IBDA_NetworkProvider_UnRegisterDeviceFilter(IBDA_NetworkProvider* This,ULONG pvRegistrationContext) {
+    return This->lpVtbl->UnRegisterDeviceFilter(This,pvRegistrationContext);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_NetworkProvider_PutSignalSource_Proxy(
+    IBDA_NetworkProvider* This,
+    ULONG ulSignalSource);
+void __RPC_STUB IBDA_NetworkProvider_PutSignalSource_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_NetworkProvider_GetSignalSource_Proxy(
+    IBDA_NetworkProvider* This,
+    ULONG *pulSignalSource);
+void __RPC_STUB IBDA_NetworkProvider_GetSignalSource_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_NetworkProvider_GetNetworkType_Proxy(
+    IBDA_NetworkProvider* This,
+    GUID *pguidNetworkType);
+void __RPC_STUB IBDA_NetworkProvider_GetNetworkType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_NetworkProvider_PutTuningSpace_Proxy(
+    IBDA_NetworkProvider* This,
+    REFGUID guidTuningSpace);
+void __RPC_STUB IBDA_NetworkProvider_PutTuningSpace_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_NetworkProvider_GetTuningSpace_Proxy(
+    IBDA_NetworkProvider* This,
+    GUID *pguidTuingSpace);
+void __RPC_STUB IBDA_NetworkProvider_GetTuningSpace_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_NetworkProvider_RegisterDeviceFilter_Proxy(
+    IBDA_NetworkProvider* This,
+    IUnknown *pUnkFilterControl,
+    ULONG *ppvRegisitrationContext);
+void __RPC_STUB IBDA_NetworkProvider_RegisterDeviceFilter_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_NetworkProvider_UnRegisterDeviceFilter_Proxy(
+    IBDA_NetworkProvider* This,
+    ULONG pvRegistrationContext);
+void __RPC_STUB IBDA_NetworkProvider_UnRegisterDeviceFilter_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_NetworkProvider_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_EthernetFilter interface
+ */
+#ifndef __IBDA_EthernetFilter_INTERFACE_DEFINED__
+#define __IBDA_EthernetFilter_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_EthernetFilter, 0x71985f43, 0x1ca1, 0x11d3, 0x9c,0xc8, 0x00,0xc0,0x4f,0x79,0x71,0xe0);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("71985f43-1ca1-11d3-9cc8-00c04f7971e0")
+IBDA_EthernetFilter : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetMulticastListSize(
+        ULONG *pulcbAddresses) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PutMulticastList(
+        ULONG ulcbAddresses,
+        BYTE pAddressList[]) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMulticastList(
+        ULONG *pulcbAddresses,
+        BYTE pAddressList[]) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PutMulticastMode(
+        ULONG ulModeMask) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMulticastMode(
+        ULONG *pulModeMask) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_EthernetFilter, 0x71985f43, 0x1ca1, 0x11d3, 0x9c,0xc8, 0x00,0xc0,0x4f,0x79,0x71,0xe0)
+#endif
+#else
+typedef struct IBDA_EthernetFilterVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_EthernetFilter* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_EthernetFilter* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_EthernetFilter* This);
+
+    /*** IBDA_EthernetFilter methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetMulticastListSize)(
+        IBDA_EthernetFilter* This,
+        ULONG *pulcbAddresses);
+
+    HRESULT (STDMETHODCALLTYPE *PutMulticastList)(
+        IBDA_EthernetFilter* This,
+        ULONG ulcbAddresses,
+        BYTE pAddressList[]);
+
+    HRESULT (STDMETHODCALLTYPE *GetMulticastList)(
+        IBDA_EthernetFilter* This,
+        ULONG *pulcbAddresses,
+        BYTE pAddressList[]);
+
+    HRESULT (STDMETHODCALLTYPE *PutMulticastMode)(
+        IBDA_EthernetFilter* This,
+        ULONG ulModeMask);
+
+    HRESULT (STDMETHODCALLTYPE *GetMulticastMode)(
+        IBDA_EthernetFilter* This,
+        ULONG *pulModeMask);
+
+    END_INTERFACE
+} IBDA_EthernetFilterVtbl;
+interface IBDA_EthernetFilter {
+    CONST_VTBL IBDA_EthernetFilterVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_EthernetFilter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_EthernetFilter_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_EthernetFilter_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_EthernetFilter methods ***/
+#define IBDA_EthernetFilter_GetMulticastListSize(This,pulcbAddresses) (This)->lpVtbl->GetMulticastListSize(This,pulcbAddresses)
+#define IBDA_EthernetFilter_PutMulticastList(This,ulcbAddresses,pAddressList) (This)->lpVtbl->PutMulticastList(This,ulcbAddresses,pAddressList)
+#define IBDA_EthernetFilter_GetMulticastList(This,pulcbAddresses,pAddressList) (This)->lpVtbl->GetMulticastList(This,pulcbAddresses,pAddressList)
+#define IBDA_EthernetFilter_PutMulticastMode(This,ulModeMask) (This)->lpVtbl->PutMulticastMode(This,ulModeMask)
+#define IBDA_EthernetFilter_GetMulticastMode(This,pulModeMask) (This)->lpVtbl->GetMulticastMode(This,pulModeMask)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_EthernetFilter_QueryInterface(IBDA_EthernetFilter* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_EthernetFilter_AddRef(IBDA_EthernetFilter* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_EthernetFilter_Release(IBDA_EthernetFilter* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_EthernetFilter methods ***/
+static FORCEINLINE HRESULT IBDA_EthernetFilter_GetMulticastListSize(IBDA_EthernetFilter* This,ULONG *pulcbAddresses) {
+    return This->lpVtbl->GetMulticastListSize(This,pulcbAddresses);
+}
+static FORCEINLINE HRESULT IBDA_EthernetFilter_PutMulticastList(IBDA_EthernetFilter* This,ULONG ulcbAddresses,BYTE pAddressList[]) {
+    return This->lpVtbl->PutMulticastList(This,ulcbAddresses,pAddressList);
+}
+static FORCEINLINE HRESULT IBDA_EthernetFilter_GetMulticastList(IBDA_EthernetFilter* This,ULONG *pulcbAddresses,BYTE pAddressList[]) {
+    return This->lpVtbl->GetMulticastList(This,pulcbAddresses,pAddressList);
+}
+static FORCEINLINE HRESULT IBDA_EthernetFilter_PutMulticastMode(IBDA_EthernetFilter* This,ULONG ulModeMask) {
+    return This->lpVtbl->PutMulticastMode(This,ulModeMask);
+}
+static FORCEINLINE HRESULT IBDA_EthernetFilter_GetMulticastMode(IBDA_EthernetFilter* This,ULONG *pulModeMask) {
+    return This->lpVtbl->GetMulticastMode(This,pulModeMask);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_EthernetFilter_GetMulticastListSize_Proxy(
+    IBDA_EthernetFilter* This,
+    ULONG *pulcbAddresses);
+void __RPC_STUB IBDA_EthernetFilter_GetMulticastListSize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_EthernetFilter_PutMulticastList_Proxy(
+    IBDA_EthernetFilter* This,
+    ULONG ulcbAddresses,
+    BYTE pAddressList[]);
+void __RPC_STUB IBDA_EthernetFilter_PutMulticastList_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_EthernetFilter_GetMulticastList_Proxy(
+    IBDA_EthernetFilter* This,
+    ULONG *pulcbAddresses,
+    BYTE pAddressList[]);
+void __RPC_STUB IBDA_EthernetFilter_GetMulticastList_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_EthernetFilter_PutMulticastMode_Proxy(
+    IBDA_EthernetFilter* This,
+    ULONG ulModeMask);
+void __RPC_STUB IBDA_EthernetFilter_PutMulticastMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_EthernetFilter_GetMulticastMode_Proxy(
+    IBDA_EthernetFilter* This,
+    ULONG *pulModeMask);
+void __RPC_STUB IBDA_EthernetFilter_GetMulticastMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_EthernetFilter_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_IPV4Filter interface
+ */
+#ifndef __IBDA_IPV4Filter_INTERFACE_DEFINED__
+#define __IBDA_IPV4Filter_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_IPV4Filter, 0x71985f44, 0x1ca1, 0x11d3, 0x9c,0xc8, 0x00,0xc0,0x4f,0x79,0x71,0xe0);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("71985f44-1ca1-11d3-9cc8-00c04f7971e0")
+IBDA_IPV4Filter : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetMulticastListSize(
+        ULONG *pulcbAddresses) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PutMulticastList(
+        ULONG ulcbAddresses,
+        BYTE pAddressList[]) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMulticastList(
+        ULONG *pulcbAddresses,
+        BYTE pAddressList[]) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PutMulticastMode(
+        ULONG ulModeMask) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMulticastMode(
+        ULONG *pulModeMask) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_IPV4Filter, 0x71985f44, 0x1ca1, 0x11d3, 0x9c,0xc8, 0x00,0xc0,0x4f,0x79,0x71,0xe0)
+#endif
+#else
+typedef struct IBDA_IPV4FilterVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_IPV4Filter* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_IPV4Filter* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_IPV4Filter* This);
+
+    /*** IBDA_IPV4Filter methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetMulticastListSize)(
+        IBDA_IPV4Filter* This,
+        ULONG *pulcbAddresses);
+
+    HRESULT (STDMETHODCALLTYPE *PutMulticastList)(
+        IBDA_IPV4Filter* This,
+        ULONG ulcbAddresses,
+        BYTE pAddressList[]);
+
+    HRESULT (STDMETHODCALLTYPE *GetMulticastList)(
+        IBDA_IPV4Filter* This,
+        ULONG *pulcbAddresses,
+        BYTE pAddressList[]);
+
+    HRESULT (STDMETHODCALLTYPE *PutMulticastMode)(
+        IBDA_IPV4Filter* This,
+        ULONG ulModeMask);
+
+    HRESULT (STDMETHODCALLTYPE *GetMulticastMode)(
+        IBDA_IPV4Filter* This,
+        ULONG *pulModeMask);
+
+    END_INTERFACE
+} IBDA_IPV4FilterVtbl;
+interface IBDA_IPV4Filter {
+    CONST_VTBL IBDA_IPV4FilterVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_IPV4Filter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_IPV4Filter_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_IPV4Filter_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_IPV4Filter methods ***/
+#define IBDA_IPV4Filter_GetMulticastListSize(This,pulcbAddresses) (This)->lpVtbl->GetMulticastListSize(This,pulcbAddresses)
+#define IBDA_IPV4Filter_PutMulticastList(This,ulcbAddresses,pAddressList) (This)->lpVtbl->PutMulticastList(This,ulcbAddresses,pAddressList)
+#define IBDA_IPV4Filter_GetMulticastList(This,pulcbAddresses,pAddressList) (This)->lpVtbl->GetMulticastList(This,pulcbAddresses,pAddressList)
+#define IBDA_IPV4Filter_PutMulticastMode(This,ulModeMask) (This)->lpVtbl->PutMulticastMode(This,ulModeMask)
+#define IBDA_IPV4Filter_GetMulticastMode(This,pulModeMask) (This)->lpVtbl->GetMulticastMode(This,pulModeMask)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_IPV4Filter_QueryInterface(IBDA_IPV4Filter* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_IPV4Filter_AddRef(IBDA_IPV4Filter* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_IPV4Filter_Release(IBDA_IPV4Filter* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_IPV4Filter methods ***/
+static FORCEINLINE HRESULT IBDA_IPV4Filter_GetMulticastListSize(IBDA_IPV4Filter* This,ULONG *pulcbAddresses) {
+    return This->lpVtbl->GetMulticastListSize(This,pulcbAddresses);
+}
+static FORCEINLINE HRESULT IBDA_IPV4Filter_PutMulticastList(IBDA_IPV4Filter* This,ULONG ulcbAddresses,BYTE pAddressList[]) {
+    return This->lpVtbl->PutMulticastList(This,ulcbAddresses,pAddressList);
+}
+static FORCEINLINE HRESULT IBDA_IPV4Filter_GetMulticastList(IBDA_IPV4Filter* This,ULONG *pulcbAddresses,BYTE pAddressList[]) {
+    return This->lpVtbl->GetMulticastList(This,pulcbAddresses,pAddressList);
+}
+static FORCEINLINE HRESULT IBDA_IPV4Filter_PutMulticastMode(IBDA_IPV4Filter* This,ULONG ulModeMask) {
+    return This->lpVtbl->PutMulticastMode(This,ulModeMask);
+}
+static FORCEINLINE HRESULT IBDA_IPV4Filter_GetMulticastMode(IBDA_IPV4Filter* This,ULONG *pulModeMask) {
+    return This->lpVtbl->GetMulticastMode(This,pulModeMask);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_IPV4Filter_GetMulticastListSize_Proxy(
+    IBDA_IPV4Filter* This,
+    ULONG *pulcbAddresses);
+void __RPC_STUB IBDA_IPV4Filter_GetMulticastListSize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_IPV4Filter_PutMulticastList_Proxy(
+    IBDA_IPV4Filter* This,
+    ULONG ulcbAddresses,
+    BYTE pAddressList[]);
+void __RPC_STUB IBDA_IPV4Filter_PutMulticastList_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_IPV4Filter_GetMulticastList_Proxy(
+    IBDA_IPV4Filter* This,
+    ULONG *pulcbAddresses,
+    BYTE pAddressList[]);
+void __RPC_STUB IBDA_IPV4Filter_GetMulticastList_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_IPV4Filter_PutMulticastMode_Proxy(
+    IBDA_IPV4Filter* This,
+    ULONG ulModeMask);
+void __RPC_STUB IBDA_IPV4Filter_PutMulticastMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_IPV4Filter_GetMulticastMode_Proxy(
+    IBDA_IPV4Filter* This,
+    ULONG *pulModeMask);
+void __RPC_STUB IBDA_IPV4Filter_GetMulticastMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_IPV4Filter_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_IPV6Filter interface
+ */
+#ifndef __IBDA_IPV6Filter_INTERFACE_DEFINED__
+#define __IBDA_IPV6Filter_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_IPV6Filter, 0xe1785a74, 0x2a23, 0x4fb3, 0x92,0x45, 0xa8,0xf8,0x80,0x17,0xef,0x33);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("e1785a74-2a23-4fb3-9245-a8f88017ef33")
+IBDA_IPV6Filter : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetMulticastListSize(
+        ULONG *pulcbAddresses) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PutMulticastList(
+        ULONG ulcbAddresses,
+        BYTE pAddressList[]) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMulticastList(
+        ULONG *pulcbAddresses,
+        BYTE pAddressList[]) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PutMulticastMode(
+        ULONG ulModeMask) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMulticastMode(
+        ULONG *pulModeMask) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_IPV6Filter, 0xe1785a74, 0x2a23, 0x4fb3, 0x92,0x45, 0xa8,0xf8,0x80,0x17,0xef,0x33)
+#endif
+#else
+typedef struct IBDA_IPV6FilterVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_IPV6Filter* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_IPV6Filter* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_IPV6Filter* This);
+
+    /*** IBDA_IPV6Filter methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetMulticastListSize)(
+        IBDA_IPV6Filter* This,
+        ULONG *pulcbAddresses);
+
+    HRESULT (STDMETHODCALLTYPE *PutMulticastList)(
+        IBDA_IPV6Filter* This,
+        ULONG ulcbAddresses,
+        BYTE pAddressList[]);
+
+    HRESULT (STDMETHODCALLTYPE *GetMulticastList)(
+        IBDA_IPV6Filter* This,
+        ULONG *pulcbAddresses,
+        BYTE pAddressList[]);
+
+    HRESULT (STDMETHODCALLTYPE *PutMulticastMode)(
+        IBDA_IPV6Filter* This,
+        ULONG ulModeMask);
+
+    HRESULT (STDMETHODCALLTYPE *GetMulticastMode)(
+        IBDA_IPV6Filter* This,
+        ULONG *pulModeMask);
+
+    END_INTERFACE
+} IBDA_IPV6FilterVtbl;
+interface IBDA_IPV6Filter {
+    CONST_VTBL IBDA_IPV6FilterVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_IPV6Filter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_IPV6Filter_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_IPV6Filter_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_IPV6Filter methods ***/
+#define IBDA_IPV6Filter_GetMulticastListSize(This,pulcbAddresses) (This)->lpVtbl->GetMulticastListSize(This,pulcbAddresses)
+#define IBDA_IPV6Filter_PutMulticastList(This,ulcbAddresses,pAddressList) (This)->lpVtbl->PutMulticastList(This,ulcbAddresses,pAddressList)
+#define IBDA_IPV6Filter_GetMulticastList(This,pulcbAddresses,pAddressList) (This)->lpVtbl->GetMulticastList(This,pulcbAddresses,pAddressList)
+#define IBDA_IPV6Filter_PutMulticastMode(This,ulModeMask) (This)->lpVtbl->PutMulticastMode(This,ulModeMask)
+#define IBDA_IPV6Filter_GetMulticastMode(This,pulModeMask) (This)->lpVtbl->GetMulticastMode(This,pulModeMask)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_IPV6Filter_QueryInterface(IBDA_IPV6Filter* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_IPV6Filter_AddRef(IBDA_IPV6Filter* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_IPV6Filter_Release(IBDA_IPV6Filter* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_IPV6Filter methods ***/
+static FORCEINLINE HRESULT IBDA_IPV6Filter_GetMulticastListSize(IBDA_IPV6Filter* This,ULONG *pulcbAddresses) {
+    return This->lpVtbl->GetMulticastListSize(This,pulcbAddresses);
+}
+static FORCEINLINE HRESULT IBDA_IPV6Filter_PutMulticastList(IBDA_IPV6Filter* This,ULONG ulcbAddresses,BYTE pAddressList[]) {
+    return This->lpVtbl->PutMulticastList(This,ulcbAddresses,pAddressList);
+}
+static FORCEINLINE HRESULT IBDA_IPV6Filter_GetMulticastList(IBDA_IPV6Filter* This,ULONG *pulcbAddresses,BYTE pAddressList[]) {
+    return This->lpVtbl->GetMulticastList(This,pulcbAddresses,pAddressList);
+}
+static FORCEINLINE HRESULT IBDA_IPV6Filter_PutMulticastMode(IBDA_IPV6Filter* This,ULONG ulModeMask) {
+    return This->lpVtbl->PutMulticastMode(This,ulModeMask);
+}
+static FORCEINLINE HRESULT IBDA_IPV6Filter_GetMulticastMode(IBDA_IPV6Filter* This,ULONG *pulModeMask) {
+    return This->lpVtbl->GetMulticastMode(This,pulModeMask);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_IPV6Filter_GetMulticastListSize_Proxy(
+    IBDA_IPV6Filter* This,
+    ULONG *pulcbAddresses);
+void __RPC_STUB IBDA_IPV6Filter_GetMulticastListSize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_IPV6Filter_PutMulticastList_Proxy(
+    IBDA_IPV6Filter* This,
+    ULONG ulcbAddresses,
+    BYTE pAddressList[]);
+void __RPC_STUB IBDA_IPV6Filter_PutMulticastList_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_IPV6Filter_GetMulticastList_Proxy(
+    IBDA_IPV6Filter* This,
+    ULONG *pulcbAddresses,
+    BYTE pAddressList[]);
+void __RPC_STUB IBDA_IPV6Filter_GetMulticastList_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_IPV6Filter_PutMulticastMode_Proxy(
+    IBDA_IPV6Filter* This,
+    ULONG ulModeMask);
+void __RPC_STUB IBDA_IPV6Filter_PutMulticastMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_IPV6Filter_GetMulticastMode_Proxy(
+    IBDA_IPV6Filter* This,
+    ULONG *pulModeMask);
+void __RPC_STUB IBDA_IPV6Filter_GetMulticastMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_IPV6Filter_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_DeviceControl interface
+ */
+#ifndef __IBDA_DeviceControl_INTERFACE_DEFINED__
+#define __IBDA_DeviceControl_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_DeviceControl, 0xfd0a5af3, 0xb41d, 0x11d2, 0x9c,0x95, 0x00,0xc0,0x4f,0x79,0x71,0xe0);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("fd0a5af3-b41d-11d2-9c95-00c04f7971e0")
+IBDA_DeviceControl : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE StartChanges(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CheckChanges(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CommitChanges(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetChangeState(
+        ULONG *pState) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_DeviceControl, 0xfd0a5af3, 0xb41d, 0x11d2, 0x9c,0x95, 0x00,0xc0,0x4f,0x79,0x71,0xe0)
+#endif
+#else
+typedef struct IBDA_DeviceControlVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_DeviceControl* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_DeviceControl* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_DeviceControl* This);
+
+    /*** IBDA_DeviceControl methods ***/
+    HRESULT (STDMETHODCALLTYPE *StartChanges)(
+        IBDA_DeviceControl* This);
+
+    HRESULT (STDMETHODCALLTYPE *CheckChanges)(
+        IBDA_DeviceControl* This);
+
+    HRESULT (STDMETHODCALLTYPE *CommitChanges)(
+        IBDA_DeviceControl* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetChangeState)(
+        IBDA_DeviceControl* This,
+        ULONG *pState);
+
+    END_INTERFACE
+} IBDA_DeviceControlVtbl;
+interface IBDA_DeviceControl {
+    CONST_VTBL IBDA_DeviceControlVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_DeviceControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_DeviceControl_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_DeviceControl_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_DeviceControl methods ***/
+#define IBDA_DeviceControl_StartChanges(This) (This)->lpVtbl->StartChanges(This)
+#define IBDA_DeviceControl_CheckChanges(This) (This)->lpVtbl->CheckChanges(This)
+#define IBDA_DeviceControl_CommitChanges(This) (This)->lpVtbl->CommitChanges(This)
+#define IBDA_DeviceControl_GetChangeState(This,pState) (This)->lpVtbl->GetChangeState(This,pState)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_DeviceControl_QueryInterface(IBDA_DeviceControl* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_DeviceControl_AddRef(IBDA_DeviceControl* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_DeviceControl_Release(IBDA_DeviceControl* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_DeviceControl methods ***/
+static FORCEINLINE HRESULT IBDA_DeviceControl_StartChanges(IBDA_DeviceControl* This) {
+    return This->lpVtbl->StartChanges(This);
+}
+static FORCEINLINE HRESULT IBDA_DeviceControl_CheckChanges(IBDA_DeviceControl* This) {
+    return This->lpVtbl->CheckChanges(This);
+}
+static FORCEINLINE HRESULT IBDA_DeviceControl_CommitChanges(IBDA_DeviceControl* This) {
+    return This->lpVtbl->CommitChanges(This);
+}
+static FORCEINLINE HRESULT IBDA_DeviceControl_GetChangeState(IBDA_DeviceControl* This,ULONG *pState) {
+    return This->lpVtbl->GetChangeState(This,pState);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_DeviceControl_StartChanges_Proxy(
+    IBDA_DeviceControl* This);
+void __RPC_STUB IBDA_DeviceControl_StartChanges_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DeviceControl_CheckChanges_Proxy(
+    IBDA_DeviceControl* This);
+void __RPC_STUB IBDA_DeviceControl_CheckChanges_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DeviceControl_CommitChanges_Proxy(
+    IBDA_DeviceControl* This);
+void __RPC_STUB IBDA_DeviceControl_CommitChanges_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DeviceControl_GetChangeState_Proxy(
+    IBDA_DeviceControl* This,
+    ULONG *pState);
+void __RPC_STUB IBDA_DeviceControl_GetChangeState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_DeviceControl_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_PinControl interface
+ */
+#ifndef __IBDA_PinControl_INTERFACE_DEFINED__
+#define __IBDA_PinControl_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_PinControl, 0x0ded49d5, 0xa8b7, 0x4d5d, 0x97,0xa1, 0x12,0xb0,0xc1,0x95,0x87,0x4d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("0ded49d5-a8b7-4d5d-97a1-12b0c195874d")
+IBDA_PinControl : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetPinID(
+        ULONG *pulPinID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPinType(
+        ULONG *pulPinType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RegistrationContext(
+        ULONG *pulRegistrationCtx) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_PinControl, 0x0ded49d5, 0xa8b7, 0x4d5d, 0x97,0xa1, 0x12,0xb0,0xc1,0x95,0x87,0x4d)
+#endif
+#else
+typedef struct IBDA_PinControlVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_PinControl* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_PinControl* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_PinControl* This);
+
+    /*** IBDA_PinControl methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetPinID)(
+        IBDA_PinControl* This,
+        ULONG *pulPinID);
+
+    HRESULT (STDMETHODCALLTYPE *GetPinType)(
+        IBDA_PinControl* This,
+        ULONG *pulPinType);
+
+    HRESULT (STDMETHODCALLTYPE *RegistrationContext)(
+        IBDA_PinControl* This,
+        ULONG *pulRegistrationCtx);
+
+    END_INTERFACE
+} IBDA_PinControlVtbl;
+interface IBDA_PinControl {
+    CONST_VTBL IBDA_PinControlVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_PinControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_PinControl_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_PinControl_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_PinControl methods ***/
+#define IBDA_PinControl_GetPinID(This,pulPinID) (This)->lpVtbl->GetPinID(This,pulPinID)
+#define IBDA_PinControl_GetPinType(This,pulPinType) (This)->lpVtbl->GetPinType(This,pulPinType)
+#define IBDA_PinControl_RegistrationContext(This,pulRegistrationCtx) (This)->lpVtbl->RegistrationContext(This,pulRegistrationCtx)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_PinControl_QueryInterface(IBDA_PinControl* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_PinControl_AddRef(IBDA_PinControl* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_PinControl_Release(IBDA_PinControl* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_PinControl methods ***/
+static FORCEINLINE HRESULT IBDA_PinControl_GetPinID(IBDA_PinControl* This,ULONG *pulPinID) {
+    return This->lpVtbl->GetPinID(This,pulPinID);
+}
+static FORCEINLINE HRESULT IBDA_PinControl_GetPinType(IBDA_PinControl* This,ULONG *pulPinType) {
+    return This->lpVtbl->GetPinType(This,pulPinType);
+}
+static FORCEINLINE HRESULT IBDA_PinControl_RegistrationContext(IBDA_PinControl* This,ULONG *pulRegistrationCtx) {
+    return This->lpVtbl->RegistrationContext(This,pulRegistrationCtx);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_PinControl_GetPinID_Proxy(
+    IBDA_PinControl* This,
+    ULONG *pulPinID);
+void __RPC_STUB IBDA_PinControl_GetPinID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_PinControl_GetPinType_Proxy(
+    IBDA_PinControl* This,
+    ULONG *pulPinType);
+void __RPC_STUB IBDA_PinControl_GetPinType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_PinControl_RegistrationContext_Proxy(
+    IBDA_PinControl* This,
+    ULONG *pulRegistrationCtx);
+void __RPC_STUB IBDA_PinControl_RegistrationContext_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_PinControl_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_SignalProperties interface
+ */
+#ifndef __IBDA_SignalProperties_INTERFACE_DEFINED__
+#define __IBDA_SignalProperties_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_SignalProperties, 0xd2f1644b, 0xb409, 0x11d2, 0xbc,0x69, 0x00,0xa0,0xc9,0xee,0x9e,0x16);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("d2f1644b-b409-11d2-bc69-00a0c9ee9e16")
+IBDA_SignalProperties : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE PutNetworkType(
+        REFGUID guidNetworkType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetNetworkType(
+        GUID *pguidNetworkType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PutSignalSource(
+        ULONG ulSignalSource) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSignalSource(
+        ULONG *pulSignalSource) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PutTuningSpace(
+        REFGUID guidTuningSpace) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTuningSpace(
+        GUID *pguidTuingSpace) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_SignalProperties, 0xd2f1644b, 0xb409, 0x11d2, 0xbc,0x69, 0x00,0xa0,0xc9,0xee,0x9e,0x16)
+#endif
+#else
+typedef struct IBDA_SignalPropertiesVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_SignalProperties* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_SignalProperties* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_SignalProperties* This);
+
+    /*** IBDA_SignalProperties methods ***/
+    HRESULT (STDMETHODCALLTYPE *PutNetworkType)(
+        IBDA_SignalProperties* This,
+        REFGUID guidNetworkType);
+
+    HRESULT (STDMETHODCALLTYPE *GetNetworkType)(
+        IBDA_SignalProperties* This,
+        GUID *pguidNetworkType);
+
+    HRESULT (STDMETHODCALLTYPE *PutSignalSource)(
+        IBDA_SignalProperties* This,
+        ULONG ulSignalSource);
+
+    HRESULT (STDMETHODCALLTYPE *GetSignalSource)(
+        IBDA_SignalProperties* This,
+        ULONG *pulSignalSource);
+
+    HRESULT (STDMETHODCALLTYPE *PutTuningSpace)(
+        IBDA_SignalProperties* This,
+        REFGUID guidTuningSpace);
+
+    HRESULT (STDMETHODCALLTYPE *GetTuningSpace)(
+        IBDA_SignalProperties* This,
+        GUID *pguidTuingSpace);
+
+    END_INTERFACE
+} IBDA_SignalPropertiesVtbl;
+interface IBDA_SignalProperties {
+    CONST_VTBL IBDA_SignalPropertiesVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_SignalProperties_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_SignalProperties_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_SignalProperties_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_SignalProperties methods ***/
+#define IBDA_SignalProperties_PutNetworkType(This,guidNetworkType) (This)->lpVtbl->PutNetworkType(This,guidNetworkType)
+#define IBDA_SignalProperties_GetNetworkType(This,pguidNetworkType) (This)->lpVtbl->GetNetworkType(This,pguidNetworkType)
+#define IBDA_SignalProperties_PutSignalSource(This,ulSignalSource) (This)->lpVtbl->PutSignalSource(This,ulSignalSource)
+#define IBDA_SignalProperties_GetSignalSource(This,pulSignalSource) (This)->lpVtbl->GetSignalSource(This,pulSignalSource)
+#define IBDA_SignalProperties_PutTuningSpace(This,guidTuningSpace) (This)->lpVtbl->PutTuningSpace(This,guidTuningSpace)
+#define IBDA_SignalProperties_GetTuningSpace(This,pguidTuingSpace) (This)->lpVtbl->GetTuningSpace(This,pguidTuingSpace)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_SignalProperties_QueryInterface(IBDA_SignalProperties* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_SignalProperties_AddRef(IBDA_SignalProperties* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_SignalProperties_Release(IBDA_SignalProperties* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_SignalProperties methods ***/
+static FORCEINLINE HRESULT IBDA_SignalProperties_PutNetworkType(IBDA_SignalProperties* This,REFGUID guidNetworkType) {
+    return This->lpVtbl->PutNetworkType(This,guidNetworkType);
+}
+static FORCEINLINE HRESULT IBDA_SignalProperties_GetNetworkType(IBDA_SignalProperties* This,GUID *pguidNetworkType) {
+    return This->lpVtbl->GetNetworkType(This,pguidNetworkType);
+}
+static FORCEINLINE HRESULT IBDA_SignalProperties_PutSignalSource(IBDA_SignalProperties* This,ULONG ulSignalSource) {
+    return This->lpVtbl->PutSignalSource(This,ulSignalSource);
+}
+static FORCEINLINE HRESULT IBDA_SignalProperties_GetSignalSource(IBDA_SignalProperties* This,ULONG *pulSignalSource) {
+    return This->lpVtbl->GetSignalSource(This,pulSignalSource);
+}
+static FORCEINLINE HRESULT IBDA_SignalProperties_PutTuningSpace(IBDA_SignalProperties* This,REFGUID guidTuningSpace) {
+    return This->lpVtbl->PutTuningSpace(This,guidTuningSpace);
+}
+static FORCEINLINE HRESULT IBDA_SignalProperties_GetTuningSpace(IBDA_SignalProperties* This,GUID *pguidTuingSpace) {
+    return This->lpVtbl->GetTuningSpace(This,pguidTuingSpace);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_SignalProperties_PutNetworkType_Proxy(
+    IBDA_SignalProperties* This,
+    REFGUID guidNetworkType);
+void __RPC_STUB IBDA_SignalProperties_PutNetworkType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_SignalProperties_GetNetworkType_Proxy(
+    IBDA_SignalProperties* This,
+    GUID *pguidNetworkType);
+void __RPC_STUB IBDA_SignalProperties_GetNetworkType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_SignalProperties_PutSignalSource_Proxy(
+    IBDA_SignalProperties* This,
+    ULONG ulSignalSource);
+void __RPC_STUB IBDA_SignalProperties_PutSignalSource_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_SignalProperties_GetSignalSource_Proxy(
+    IBDA_SignalProperties* This,
+    ULONG *pulSignalSource);
+void __RPC_STUB IBDA_SignalProperties_GetSignalSource_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_SignalProperties_PutTuningSpace_Proxy(
+    IBDA_SignalProperties* This,
+    REFGUID guidTuningSpace);
+void __RPC_STUB IBDA_SignalProperties_PutTuningSpace_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_SignalProperties_GetTuningSpace_Proxy(
+    IBDA_SignalProperties* This,
+    GUID *pguidTuingSpace);
+void __RPC_STUB IBDA_SignalProperties_GetTuningSpace_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_SignalProperties_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_SignalStatistics interface
+ */
+#ifndef __IBDA_SignalStatistics_INTERFACE_DEFINED__
+#define __IBDA_SignalStatistics_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_SignalStatistics, 0x1347d106, 0xcf3a, 0x428a, 0xa5,0xcb, 0xac,0x0d,0x9a,0x2a,0x43,0x38);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("1347d106-cf3a-428a-a5cb-ac0d9a2a4338")
+IBDA_SignalStatistics : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE put_SignalStrength(
+        LONG lDbStrength) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SignalStrength(
+        LONG *plDbStrength) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_SignalQuality(
+        LONG lPercentQuality) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SignalQuality(
+        LONG *plPercentQuality) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_SignalPresent(
+        BOOLEAN fPresent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SignalPresent(
+        BOOLEAN *pfPresent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_SignalLocked(
+        BOOLEAN fLocked) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SignalLocked(
+        BOOLEAN *pfLocked) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_SampleTime(
+        LONG lmsSampleTime) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SampleTime(
+        LONG *plmsSampleTime) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_SignalStatistics, 0x1347d106, 0xcf3a, 0x428a, 0xa5,0xcb, 0xac,0x0d,0x9a,0x2a,0x43,0x38)
+#endif
+#else
+typedef struct IBDA_SignalStatisticsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_SignalStatistics* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_SignalStatistics* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_SignalStatistics* This);
+
+    /*** IBDA_SignalStatistics methods ***/
+    HRESULT (STDMETHODCALLTYPE *put_SignalStrength)(
+        IBDA_SignalStatistics* This,
+        LONG lDbStrength);
+
+    HRESULT (STDMETHODCALLTYPE *get_SignalStrength)(
+        IBDA_SignalStatistics* This,
+        LONG *plDbStrength);
+
+    HRESULT (STDMETHODCALLTYPE *put_SignalQuality)(
+        IBDA_SignalStatistics* This,
+        LONG lPercentQuality);
+
+    HRESULT (STDMETHODCALLTYPE *get_SignalQuality)(
+        IBDA_SignalStatistics* This,
+        LONG *plPercentQuality);
+
+    HRESULT (STDMETHODCALLTYPE *put_SignalPresent)(
+        IBDA_SignalStatistics* This,
+        BOOLEAN fPresent);
+
+    HRESULT (STDMETHODCALLTYPE *get_SignalPresent)(
+        IBDA_SignalStatistics* This,
+        BOOLEAN *pfPresent);
+
+    HRESULT (STDMETHODCALLTYPE *put_SignalLocked)(
+        IBDA_SignalStatistics* This,
+        BOOLEAN fLocked);
+
+    HRESULT (STDMETHODCALLTYPE *get_SignalLocked)(
+        IBDA_SignalStatistics* This,
+        BOOLEAN *pfLocked);
+
+    HRESULT (STDMETHODCALLTYPE *put_SampleTime)(
+        IBDA_SignalStatistics* This,
+        LONG lmsSampleTime);
+
+    HRESULT (STDMETHODCALLTYPE *get_SampleTime)(
+        IBDA_SignalStatistics* This,
+        LONG *plmsSampleTime);
+
+    END_INTERFACE
+} IBDA_SignalStatisticsVtbl;
+interface IBDA_SignalStatistics {
+    CONST_VTBL IBDA_SignalStatisticsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_SignalStatistics_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_SignalStatistics_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_SignalStatistics_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_SignalStatistics methods ***/
+#define IBDA_SignalStatistics_put_SignalStrength(This,lDbStrength) (This)->lpVtbl->put_SignalStrength(This,lDbStrength)
+#define IBDA_SignalStatistics_get_SignalStrength(This,plDbStrength) (This)->lpVtbl->get_SignalStrength(This,plDbStrength)
+#define IBDA_SignalStatistics_put_SignalQuality(This,lPercentQuality) (This)->lpVtbl->put_SignalQuality(This,lPercentQuality)
+#define IBDA_SignalStatistics_get_SignalQuality(This,plPercentQuality) (This)->lpVtbl->get_SignalQuality(This,plPercentQuality)
+#define IBDA_SignalStatistics_put_SignalPresent(This,fPresent) (This)->lpVtbl->put_SignalPresent(This,fPresent)
+#define IBDA_SignalStatistics_get_SignalPresent(This,pfPresent) (This)->lpVtbl->get_SignalPresent(This,pfPresent)
+#define IBDA_SignalStatistics_put_SignalLocked(This,fLocked) (This)->lpVtbl->put_SignalLocked(This,fLocked)
+#define IBDA_SignalStatistics_get_SignalLocked(This,pfLocked) (This)->lpVtbl->get_SignalLocked(This,pfLocked)
+#define IBDA_SignalStatistics_put_SampleTime(This,lmsSampleTime) (This)->lpVtbl->put_SampleTime(This,lmsSampleTime)
+#define IBDA_SignalStatistics_get_SampleTime(This,plmsSampleTime) (This)->lpVtbl->get_SampleTime(This,plmsSampleTime)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_SignalStatistics_QueryInterface(IBDA_SignalStatistics* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_SignalStatistics_AddRef(IBDA_SignalStatistics* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_SignalStatistics_Release(IBDA_SignalStatistics* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_SignalStatistics methods ***/
+static FORCEINLINE HRESULT IBDA_SignalStatistics_put_SignalStrength(IBDA_SignalStatistics* This,LONG lDbStrength) {
+    return This->lpVtbl->put_SignalStrength(This,lDbStrength);
+}
+static FORCEINLINE HRESULT IBDA_SignalStatistics_get_SignalStrength(IBDA_SignalStatistics* This,LONG *plDbStrength) {
+    return This->lpVtbl->get_SignalStrength(This,plDbStrength);
+}
+static FORCEINLINE HRESULT IBDA_SignalStatistics_put_SignalQuality(IBDA_SignalStatistics* This,LONG lPercentQuality) {
+    return This->lpVtbl->put_SignalQuality(This,lPercentQuality);
+}
+static FORCEINLINE HRESULT IBDA_SignalStatistics_get_SignalQuality(IBDA_SignalStatistics* This,LONG *plPercentQuality) {
+    return This->lpVtbl->get_SignalQuality(This,plPercentQuality);
+}
+static FORCEINLINE HRESULT IBDA_SignalStatistics_put_SignalPresent(IBDA_SignalStatistics* This,BOOLEAN fPresent) {
+    return This->lpVtbl->put_SignalPresent(This,fPresent);
+}
+static FORCEINLINE HRESULT IBDA_SignalStatistics_get_SignalPresent(IBDA_SignalStatistics* This,BOOLEAN *pfPresent) {
+    return This->lpVtbl->get_SignalPresent(This,pfPresent);
+}
+static FORCEINLINE HRESULT IBDA_SignalStatistics_put_SignalLocked(IBDA_SignalStatistics* This,BOOLEAN fLocked) {
+    return This->lpVtbl->put_SignalLocked(This,fLocked);
+}
+static FORCEINLINE HRESULT IBDA_SignalStatistics_get_SignalLocked(IBDA_SignalStatistics* This,BOOLEAN *pfLocked) {
+    return This->lpVtbl->get_SignalLocked(This,pfLocked);
+}
+static FORCEINLINE HRESULT IBDA_SignalStatistics_put_SampleTime(IBDA_SignalStatistics* This,LONG lmsSampleTime) {
+    return This->lpVtbl->put_SampleTime(This,lmsSampleTime);
+}
+static FORCEINLINE HRESULT IBDA_SignalStatistics_get_SampleTime(IBDA_SignalStatistics* This,LONG *plmsSampleTime) {
+    return This->lpVtbl->get_SampleTime(This,plmsSampleTime);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_SignalStatistics_put_SignalStrength_Proxy(
+    IBDA_SignalStatistics* This,
+    LONG lDbStrength);
+void __RPC_STUB IBDA_SignalStatistics_put_SignalStrength_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_SignalStatistics_get_SignalStrength_Proxy(
+    IBDA_SignalStatistics* This,
+    LONG *plDbStrength);
+void __RPC_STUB IBDA_SignalStatistics_get_SignalStrength_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_SignalStatistics_put_SignalQuality_Proxy(
+    IBDA_SignalStatistics* This,
+    LONG lPercentQuality);
+void __RPC_STUB IBDA_SignalStatistics_put_SignalQuality_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_SignalStatistics_get_SignalQuality_Proxy(
+    IBDA_SignalStatistics* This,
+    LONG *plPercentQuality);
+void __RPC_STUB IBDA_SignalStatistics_get_SignalQuality_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_SignalStatistics_put_SignalPresent_Proxy(
+    IBDA_SignalStatistics* This,
+    BOOLEAN fPresent);
+void __RPC_STUB IBDA_SignalStatistics_put_SignalPresent_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_SignalStatistics_get_SignalPresent_Proxy(
+    IBDA_SignalStatistics* This,
+    BOOLEAN *pfPresent);
+void __RPC_STUB IBDA_SignalStatistics_get_SignalPresent_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_SignalStatistics_put_SignalLocked_Proxy(
+    IBDA_SignalStatistics* This,
+    BOOLEAN fLocked);
+void __RPC_STUB IBDA_SignalStatistics_put_SignalLocked_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_SignalStatistics_get_SignalLocked_Proxy(
+    IBDA_SignalStatistics* This,
+    BOOLEAN *pfLocked);
+void __RPC_STUB IBDA_SignalStatistics_get_SignalLocked_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_SignalStatistics_put_SampleTime_Proxy(
+    IBDA_SignalStatistics* This,
+    LONG lmsSampleTime);
+void __RPC_STUB IBDA_SignalStatistics_put_SampleTime_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_SignalStatistics_get_SampleTime_Proxy(
+    IBDA_SignalStatistics* This,
+    LONG *plmsSampleTime);
+void __RPC_STUB IBDA_SignalStatistics_get_SampleTime_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_SignalStatistics_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_Topology interface
+ */
+#ifndef __IBDA_Topology_INTERFACE_DEFINED__
+#define __IBDA_Topology_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_Topology, 0x79b56888, 0x7fea, 0x4690, 0xb4,0x5d, 0x38,0xfd,0x3c,0x78,0x49,0xbe);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("79b56888-7fea-4690-b45d-38fd3c7849be")
+IBDA_Topology : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetNodeTypes(
+        ULONG *pulcNodeTypes,
+        ULONG ulcNodeTypesMax,
+        ULONG rgulNodeTypes[]) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetNodeDescriptors(
+        ULONG *ulcNodeDescriptors,
+        ULONG ulcNodeDescriptorsMax,
+        BDANODE_DESCRIPTOR rgNodeDescriptors[]) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetNodeInterfaces(
+        ULONG ulNodeType,
+        ULONG *pulcInterfaces,
+        ULONG ulcInterfacesMax,
+        GUID rgguidInterfaces[]) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPinTypes(
+        ULONG *pulcPinTypes,
+        ULONG ulcPinTypesMax,
+        ULONG rgulPinTypes[]) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTemplateConnections(
+        ULONG *pulcConnections,
+        ULONG ulcConnectionsMax,
+        BDA_TEMPLATE_CONNECTION rgConnections[]) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreatePin(
+        ULONG ulPinType,
+        ULONG *pulPinId) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DeletePin(
+        ULONG ulPinId) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetMediaType(
+        ULONG ulPinId,
+        AM_MEDIA_TYPE *pMediaType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetMedium(
+        ULONG ulPinId,
+        REGPINMEDIUM *pMedium) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateTopology(
+        ULONG ulInputPinId,
+        ULONG ulOutputPinId) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetControlNode(
+        ULONG ulInputPinId,
+        ULONG ulOutputPinId,
+        ULONG ulNodeType,
+        IUnknown **ppControlNode) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_Topology, 0x79b56888, 0x7fea, 0x4690, 0xb4,0x5d, 0x38,0xfd,0x3c,0x78,0x49,0xbe)
+#endif
+#else
+typedef struct IBDA_TopologyVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_Topology* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_Topology* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_Topology* This);
+
+    /*** IBDA_Topology methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetNodeTypes)(
+        IBDA_Topology* This,
+        ULONG *pulcNodeTypes,
+        ULONG ulcNodeTypesMax,
+        ULONG rgulNodeTypes[]);
+
+    HRESULT (STDMETHODCALLTYPE *GetNodeDescriptors)(
+        IBDA_Topology* This,
+        ULONG *ulcNodeDescriptors,
+        ULONG ulcNodeDescriptorsMax,
+        BDANODE_DESCRIPTOR rgNodeDescriptors[]);
+
+    HRESULT (STDMETHODCALLTYPE *GetNodeInterfaces)(
+        IBDA_Topology* This,
+        ULONG ulNodeType,
+        ULONG *pulcInterfaces,
+        ULONG ulcInterfacesMax,
+        GUID rgguidInterfaces[]);
+
+    HRESULT (STDMETHODCALLTYPE *GetPinTypes)(
+        IBDA_Topology* This,
+        ULONG *pulcPinTypes,
+        ULONG ulcPinTypesMax,
+        ULONG rgulPinTypes[]);
+
+    HRESULT (STDMETHODCALLTYPE *GetTemplateConnections)(
+        IBDA_Topology* This,
+        ULONG *pulcConnections,
+        ULONG ulcConnectionsMax,
+        BDA_TEMPLATE_CONNECTION rgConnections[]);
+
+    HRESULT (STDMETHODCALLTYPE *CreatePin)(
+        IBDA_Topology* This,
+        ULONG ulPinType,
+        ULONG *pulPinId);
+
+    HRESULT (STDMETHODCALLTYPE *DeletePin)(
+        IBDA_Topology* This,
+        ULONG ulPinId);
+
+    HRESULT (STDMETHODCALLTYPE *SetMediaType)(
+        IBDA_Topology* This,
+        ULONG ulPinId,
+        AM_MEDIA_TYPE *pMediaType);
+
+    HRESULT (STDMETHODCALLTYPE *SetMedium)(
+        IBDA_Topology* This,
+        ULONG ulPinId,
+        REGPINMEDIUM *pMedium);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTopology)(
+        IBDA_Topology* This,
+        ULONG ulInputPinId,
+        ULONG ulOutputPinId);
+
+    HRESULT (STDMETHODCALLTYPE *GetControlNode)(
+        IBDA_Topology* This,
+        ULONG ulInputPinId,
+        ULONG ulOutputPinId,
+        ULONG ulNodeType,
+        IUnknown **ppControlNode);
+
+    END_INTERFACE
+} IBDA_TopologyVtbl;
+interface IBDA_Topology {
+    CONST_VTBL IBDA_TopologyVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_Topology_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_Topology_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_Topology_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_Topology methods ***/
+#define IBDA_Topology_GetNodeTypes(This,pulcNodeTypes,ulcNodeTypesMax,rgulNodeTypes) (This)->lpVtbl->GetNodeTypes(This,pulcNodeTypes,ulcNodeTypesMax,rgulNodeTypes)
+#define IBDA_Topology_GetNodeDescriptors(This,ulcNodeDescriptors,ulcNodeDescriptorsMax,rgNodeDescriptors) (This)->lpVtbl->GetNodeDescriptors(This,ulcNodeDescriptors,ulcNodeDescriptorsMax,rgNodeDescriptors)
+#define IBDA_Topology_GetNodeInterfaces(This,ulNodeType,pulcInterfaces,ulcInterfacesMax,rgguidInterfaces) (This)->lpVtbl->GetNodeInterfaces(This,ulNodeType,pulcInterfaces,ulcInterfacesMax,rgguidInterfaces)
+#define IBDA_Topology_GetPinTypes(This,pulcPinTypes,ulcPinTypesMax,rgulPinTypes) (This)->lpVtbl->GetPinTypes(This,pulcPinTypes,ulcPinTypesMax,rgulPinTypes)
+#define IBDA_Topology_GetTemplateConnections(This,pulcConnections,ulcConnectionsMax,rgConnections) (This)->lpVtbl->GetTemplateConnections(This,pulcConnections,ulcConnectionsMax,rgConnections)
+#define IBDA_Topology_CreatePin(This,ulPinType,pulPinId) (This)->lpVtbl->CreatePin(This,ulPinType,pulPinId)
+#define IBDA_Topology_DeletePin(This,ulPinId) (This)->lpVtbl->DeletePin(This,ulPinId)
+#define IBDA_Topology_SetMediaType(This,ulPinId,pMediaType) (This)->lpVtbl->SetMediaType(This,ulPinId,pMediaType)
+#define IBDA_Topology_SetMedium(This,ulPinId,pMedium) (This)->lpVtbl->SetMedium(This,ulPinId,pMedium)
+#define IBDA_Topology_CreateTopology(This,ulInputPinId,ulOutputPinId) (This)->lpVtbl->CreateTopology(This,ulInputPinId,ulOutputPinId)
+#define IBDA_Topology_GetControlNode(This,ulInputPinId,ulOutputPinId,ulNodeType,ppControlNode) (This)->lpVtbl->GetControlNode(This,ulInputPinId,ulOutputPinId,ulNodeType,ppControlNode)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_Topology_QueryInterface(IBDA_Topology* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_Topology_AddRef(IBDA_Topology* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_Topology_Release(IBDA_Topology* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_Topology methods ***/
+static FORCEINLINE HRESULT IBDA_Topology_GetNodeTypes(IBDA_Topology* This,ULONG *pulcNodeTypes,ULONG ulcNodeTypesMax,ULONG rgulNodeTypes[]) {
+    return This->lpVtbl->GetNodeTypes(This,pulcNodeTypes,ulcNodeTypesMax,rgulNodeTypes);
+}
+static FORCEINLINE HRESULT IBDA_Topology_GetNodeDescriptors(IBDA_Topology* This,ULONG *ulcNodeDescriptors,ULONG ulcNodeDescriptorsMax,BDANODE_DESCRIPTOR rgNodeDescriptors[]) {
+    return This->lpVtbl->GetNodeDescriptors(This,ulcNodeDescriptors,ulcNodeDescriptorsMax,rgNodeDescriptors);
+}
+static FORCEINLINE HRESULT IBDA_Topology_GetNodeInterfaces(IBDA_Topology* This,ULONG ulNodeType,ULONG *pulcInterfaces,ULONG ulcInterfacesMax,GUID rgguidInterfaces[]) {
+    return This->lpVtbl->GetNodeInterfaces(This,ulNodeType,pulcInterfaces,ulcInterfacesMax,rgguidInterfaces);
+}
+static FORCEINLINE HRESULT IBDA_Topology_GetPinTypes(IBDA_Topology* This,ULONG *pulcPinTypes,ULONG ulcPinTypesMax,ULONG rgulPinTypes[]) {
+    return This->lpVtbl->GetPinTypes(This,pulcPinTypes,ulcPinTypesMax,rgulPinTypes);
+}
+static FORCEINLINE HRESULT IBDA_Topology_GetTemplateConnections(IBDA_Topology* This,ULONG *pulcConnections,ULONG ulcConnectionsMax,BDA_TEMPLATE_CONNECTION rgConnections[]) {
+    return This->lpVtbl->GetTemplateConnections(This,pulcConnections,ulcConnectionsMax,rgConnections);
+}
+static FORCEINLINE HRESULT IBDA_Topology_CreatePin(IBDA_Topology* This,ULONG ulPinType,ULONG *pulPinId) {
+    return This->lpVtbl->CreatePin(This,ulPinType,pulPinId);
+}
+static FORCEINLINE HRESULT IBDA_Topology_DeletePin(IBDA_Topology* This,ULONG ulPinId) {
+    return This->lpVtbl->DeletePin(This,ulPinId);
+}
+static FORCEINLINE HRESULT IBDA_Topology_SetMediaType(IBDA_Topology* This,ULONG ulPinId,AM_MEDIA_TYPE *pMediaType) {
+    return This->lpVtbl->SetMediaType(This,ulPinId,pMediaType);
+}
+static FORCEINLINE HRESULT IBDA_Topology_SetMedium(IBDA_Topology* This,ULONG ulPinId,REGPINMEDIUM *pMedium) {
+    return This->lpVtbl->SetMedium(This,ulPinId,pMedium);
+}
+static FORCEINLINE HRESULT IBDA_Topology_CreateTopology(IBDA_Topology* This,ULONG ulInputPinId,ULONG ulOutputPinId) {
+    return This->lpVtbl->CreateTopology(This,ulInputPinId,ulOutputPinId);
+}
+static FORCEINLINE HRESULT IBDA_Topology_GetControlNode(IBDA_Topology* This,ULONG ulInputPinId,ULONG ulOutputPinId,ULONG ulNodeType,IUnknown **ppControlNode) {
+    return This->lpVtbl->GetControlNode(This,ulInputPinId,ulOutputPinId,ulNodeType,ppControlNode);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_Topology_GetNodeTypes_Proxy(
+    IBDA_Topology* This,
+    ULONG *pulcNodeTypes,
+    ULONG ulcNodeTypesMax,
+    ULONG rgulNodeTypes[]);
+void __RPC_STUB IBDA_Topology_GetNodeTypes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_Topology_GetNodeDescriptors_Proxy(
+    IBDA_Topology* This,
+    ULONG *ulcNodeDescriptors,
+    ULONG ulcNodeDescriptorsMax,
+    BDANODE_DESCRIPTOR rgNodeDescriptors[]);
+void __RPC_STUB IBDA_Topology_GetNodeDescriptors_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_Topology_GetNodeInterfaces_Proxy(
+    IBDA_Topology* This,
+    ULONG ulNodeType,
+    ULONG *pulcInterfaces,
+    ULONG ulcInterfacesMax,
+    GUID rgguidInterfaces[]);
+void __RPC_STUB IBDA_Topology_GetNodeInterfaces_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_Topology_GetPinTypes_Proxy(
+    IBDA_Topology* This,
+    ULONG *pulcPinTypes,
+    ULONG ulcPinTypesMax,
+    ULONG rgulPinTypes[]);
+void __RPC_STUB IBDA_Topology_GetPinTypes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_Topology_GetTemplateConnections_Proxy(
+    IBDA_Topology* This,
+    ULONG *pulcConnections,
+    ULONG ulcConnectionsMax,
+    BDA_TEMPLATE_CONNECTION rgConnections[]);
+void __RPC_STUB IBDA_Topology_GetTemplateConnections_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_Topology_CreatePin_Proxy(
+    IBDA_Topology* This,
+    ULONG ulPinType,
+    ULONG *pulPinId);
+void __RPC_STUB IBDA_Topology_CreatePin_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_Topology_DeletePin_Proxy(
+    IBDA_Topology* This,
+    ULONG ulPinId);
+void __RPC_STUB IBDA_Topology_DeletePin_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_Topology_SetMediaType_Proxy(
+    IBDA_Topology* This,
+    ULONG ulPinId,
+    AM_MEDIA_TYPE *pMediaType);
+void __RPC_STUB IBDA_Topology_SetMediaType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_Topology_SetMedium_Proxy(
+    IBDA_Topology* This,
+    ULONG ulPinId,
+    REGPINMEDIUM *pMedium);
+void __RPC_STUB IBDA_Topology_SetMedium_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_Topology_CreateTopology_Proxy(
+    IBDA_Topology* This,
+    ULONG ulInputPinId,
+    ULONG ulOutputPinId);
+void __RPC_STUB IBDA_Topology_CreateTopology_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_Topology_GetControlNode_Proxy(
+    IBDA_Topology* This,
+    ULONG ulInputPinId,
+    ULONG ulOutputPinId,
+    ULONG ulNodeType,
+    IUnknown **ppControlNode);
+void __RPC_STUB IBDA_Topology_GetControlNode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_Topology_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_VoidTransform interface
+ */
+#ifndef __IBDA_VoidTransform_INTERFACE_DEFINED__
+#define __IBDA_VoidTransform_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_VoidTransform, 0x71985f46, 0x1ca1, 0x11d3, 0x9c,0xc8, 0x00,0xc0,0x4f,0x79,0x71,0xe0);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("71985f46-1ca1-11d3-9cc8-00c04f7971e0")
+IBDA_VoidTransform : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Start(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Stop(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_VoidTransform, 0x71985f46, 0x1ca1, 0x11d3, 0x9c,0xc8, 0x00,0xc0,0x4f,0x79,0x71,0xe0)
+#endif
+#else
+typedef struct IBDA_VoidTransformVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_VoidTransform* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_VoidTransform* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_VoidTransform* This);
+
+    /*** IBDA_VoidTransform methods ***/
+    HRESULT (STDMETHODCALLTYPE *Start)(
+        IBDA_VoidTransform* This);
+
+    HRESULT (STDMETHODCALLTYPE *Stop)(
+        IBDA_VoidTransform* This);
+
+    END_INTERFACE
+} IBDA_VoidTransformVtbl;
+interface IBDA_VoidTransform {
+    CONST_VTBL IBDA_VoidTransformVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_VoidTransform_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_VoidTransform_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_VoidTransform_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_VoidTransform methods ***/
+#define IBDA_VoidTransform_Start(This) (This)->lpVtbl->Start(This)
+#define IBDA_VoidTransform_Stop(This) (This)->lpVtbl->Stop(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_VoidTransform_QueryInterface(IBDA_VoidTransform* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_VoidTransform_AddRef(IBDA_VoidTransform* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_VoidTransform_Release(IBDA_VoidTransform* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_VoidTransform methods ***/
+static FORCEINLINE HRESULT IBDA_VoidTransform_Start(IBDA_VoidTransform* This) {
+    return This->lpVtbl->Start(This);
+}
+static FORCEINLINE HRESULT IBDA_VoidTransform_Stop(IBDA_VoidTransform* This) {
+    return This->lpVtbl->Stop(This);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_VoidTransform_Start_Proxy(
+    IBDA_VoidTransform* This);
+void __RPC_STUB IBDA_VoidTransform_Start_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_VoidTransform_Stop_Proxy(
+    IBDA_VoidTransform* This);
+void __RPC_STUB IBDA_VoidTransform_Stop_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_VoidTransform_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_NullTransform interface
+ */
+#ifndef __IBDA_NullTransform_INTERFACE_DEFINED__
+#define __IBDA_NullTransform_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_NullTransform, 0xddf15b0d, 0xbd25, 0x11d2, 0x9c,0xa0, 0x00,0xc0,0x4f,0x79,0x71,0xe0);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("ddf15b0d-bd25-11d2-9ca0-00c04f7971e0")
+IBDA_NullTransform : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Start(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Stop(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_NullTransform, 0xddf15b0d, 0xbd25, 0x11d2, 0x9c,0xa0, 0x00,0xc0,0x4f,0x79,0x71,0xe0)
+#endif
+#else
+typedef struct IBDA_NullTransformVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_NullTransform* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_NullTransform* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_NullTransform* This);
+
+    /*** IBDA_NullTransform methods ***/
+    HRESULT (STDMETHODCALLTYPE *Start)(
+        IBDA_NullTransform* This);
+
+    HRESULT (STDMETHODCALLTYPE *Stop)(
+        IBDA_NullTransform* This);
+
+    END_INTERFACE
+} IBDA_NullTransformVtbl;
+interface IBDA_NullTransform {
+    CONST_VTBL IBDA_NullTransformVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_NullTransform_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_NullTransform_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_NullTransform_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_NullTransform methods ***/
+#define IBDA_NullTransform_Start(This) (This)->lpVtbl->Start(This)
+#define IBDA_NullTransform_Stop(This) (This)->lpVtbl->Stop(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_NullTransform_QueryInterface(IBDA_NullTransform* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_NullTransform_AddRef(IBDA_NullTransform* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_NullTransform_Release(IBDA_NullTransform* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_NullTransform methods ***/
+static FORCEINLINE HRESULT IBDA_NullTransform_Start(IBDA_NullTransform* This) {
+    return This->lpVtbl->Start(This);
+}
+static FORCEINLINE HRESULT IBDA_NullTransform_Stop(IBDA_NullTransform* This) {
+    return This->lpVtbl->Stop(This);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_NullTransform_Start_Proxy(
+    IBDA_NullTransform* This);
+void __RPC_STUB IBDA_NullTransform_Start_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_NullTransform_Stop_Proxy(
+    IBDA_NullTransform* This);
+void __RPC_STUB IBDA_NullTransform_Stop_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_NullTransform_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_FrequencyFilter interface
+ */
+#ifndef __IBDA_FrequencyFilter_INTERFACE_DEFINED__
+#define __IBDA_FrequencyFilter_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_FrequencyFilter, 0x71985f47, 0x1ca1, 0x11d3, 0x9c,0xc8, 0x00,0xc0,0x4f,0x79,0x71,0xe0);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("71985f47-1ca1-11d3-9cc8-00c04f7971e0")
+IBDA_FrequencyFilter : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE put_Autotune(
+        ULONG ulTransponder) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Autotune(
+        ULONG *pulTransponder) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Frequency(
+        ULONG ulFrequency) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Frequency(
+        ULONG *pulFrequency) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Polarity(
+        Polarisation Polarity) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Polarity(
+        Polarisation *pPolarity) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Range(
+        ULONG ulRange) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Range(
+        ULONG *pulRange) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Bandwidth(
+        ULONG ulBandwidth) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Bandwidth(
+        ULONG *pulBandwidth) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_FrequencyMultiplier(
+        ULONG ulMultiplier) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_FrequencyMultiplier(
+        ULONG *pulMultiplier) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_FrequencyFilter, 0x71985f47, 0x1ca1, 0x11d3, 0x9c,0xc8, 0x00,0xc0,0x4f,0x79,0x71,0xe0)
+#endif
+#else
+typedef struct IBDA_FrequencyFilterVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_FrequencyFilter* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_FrequencyFilter* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_FrequencyFilter* This);
+
+    /*** IBDA_FrequencyFilter methods ***/
+    HRESULT (STDMETHODCALLTYPE *put_Autotune)(
+        IBDA_FrequencyFilter* This,
+        ULONG ulTransponder);
+
+    HRESULT (STDMETHODCALLTYPE *get_Autotune)(
+        IBDA_FrequencyFilter* This,
+        ULONG *pulTransponder);
+
+    HRESULT (STDMETHODCALLTYPE *put_Frequency)(
+        IBDA_FrequencyFilter* This,
+        ULONG ulFrequency);
+
+    HRESULT (STDMETHODCALLTYPE *get_Frequency)(
+        IBDA_FrequencyFilter* This,
+        ULONG *pulFrequency);
+
+    HRESULT (STDMETHODCALLTYPE *put_Polarity)(
+        IBDA_FrequencyFilter* This,
+        Polarisation Polarity);
+
+    HRESULT (STDMETHODCALLTYPE *get_Polarity)(
+        IBDA_FrequencyFilter* This,
+        Polarisation *pPolarity);
+
+    HRESULT (STDMETHODCALLTYPE *put_Range)(
+        IBDA_FrequencyFilter* This,
+        ULONG ulRange);
+
+    HRESULT (STDMETHODCALLTYPE *get_Range)(
+        IBDA_FrequencyFilter* This,
+        ULONG *pulRange);
+
+    HRESULT (STDMETHODCALLTYPE *put_Bandwidth)(
+        IBDA_FrequencyFilter* This,
+        ULONG ulBandwidth);
+
+    HRESULT (STDMETHODCALLTYPE *get_Bandwidth)(
+        IBDA_FrequencyFilter* This,
+        ULONG *pulBandwidth);
+
+    HRESULT (STDMETHODCALLTYPE *put_FrequencyMultiplier)(
+        IBDA_FrequencyFilter* This,
+        ULONG ulMultiplier);
+
+    HRESULT (STDMETHODCALLTYPE *get_FrequencyMultiplier)(
+        IBDA_FrequencyFilter* This,
+        ULONG *pulMultiplier);
+
+    END_INTERFACE
+} IBDA_FrequencyFilterVtbl;
+interface IBDA_FrequencyFilter {
+    CONST_VTBL IBDA_FrequencyFilterVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_FrequencyFilter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_FrequencyFilter_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_FrequencyFilter_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_FrequencyFilter methods ***/
+#define IBDA_FrequencyFilter_put_Autotune(This,ulTransponder) (This)->lpVtbl->put_Autotune(This,ulTransponder)
+#define IBDA_FrequencyFilter_get_Autotune(This,pulTransponder) (This)->lpVtbl->get_Autotune(This,pulTransponder)
+#define IBDA_FrequencyFilter_put_Frequency(This,ulFrequency) (This)->lpVtbl->put_Frequency(This,ulFrequency)
+#define IBDA_FrequencyFilter_get_Frequency(This,pulFrequency) (This)->lpVtbl->get_Frequency(This,pulFrequency)
+#define IBDA_FrequencyFilter_put_Polarity(This,Polarity) (This)->lpVtbl->put_Polarity(This,Polarity)
+#define IBDA_FrequencyFilter_get_Polarity(This,pPolarity) (This)->lpVtbl->get_Polarity(This,pPolarity)
+#define IBDA_FrequencyFilter_put_Range(This,ulRange) (This)->lpVtbl->put_Range(This,ulRange)
+#define IBDA_FrequencyFilter_get_Range(This,pulRange) (This)->lpVtbl->get_Range(This,pulRange)
+#define IBDA_FrequencyFilter_put_Bandwidth(This,ulBandwidth) (This)->lpVtbl->put_Bandwidth(This,ulBandwidth)
+#define IBDA_FrequencyFilter_get_Bandwidth(This,pulBandwidth) (This)->lpVtbl->get_Bandwidth(This,pulBandwidth)
+#define IBDA_FrequencyFilter_put_FrequencyMultiplier(This,ulMultiplier) (This)->lpVtbl->put_FrequencyMultiplier(This,ulMultiplier)
+#define IBDA_FrequencyFilter_get_FrequencyMultiplier(This,pulMultiplier) (This)->lpVtbl->get_FrequencyMultiplier(This,pulMultiplier)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_FrequencyFilter_QueryInterface(IBDA_FrequencyFilter* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_FrequencyFilter_AddRef(IBDA_FrequencyFilter* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_FrequencyFilter_Release(IBDA_FrequencyFilter* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_FrequencyFilter methods ***/
+static FORCEINLINE HRESULT IBDA_FrequencyFilter_put_Autotune(IBDA_FrequencyFilter* This,ULONG ulTransponder) {
+    return This->lpVtbl->put_Autotune(This,ulTransponder);
+}
+static FORCEINLINE HRESULT IBDA_FrequencyFilter_get_Autotune(IBDA_FrequencyFilter* This,ULONG *pulTransponder) {
+    return This->lpVtbl->get_Autotune(This,pulTransponder);
+}
+static FORCEINLINE HRESULT IBDA_FrequencyFilter_put_Frequency(IBDA_FrequencyFilter* This,ULONG ulFrequency) {
+    return This->lpVtbl->put_Frequency(This,ulFrequency);
+}
+static FORCEINLINE HRESULT IBDA_FrequencyFilter_get_Frequency(IBDA_FrequencyFilter* This,ULONG *pulFrequency) {
+    return This->lpVtbl->get_Frequency(This,pulFrequency);
+}
+static FORCEINLINE HRESULT IBDA_FrequencyFilter_put_Polarity(IBDA_FrequencyFilter* This,Polarisation Polarity) {
+    return This->lpVtbl->put_Polarity(This,Polarity);
+}
+static FORCEINLINE HRESULT IBDA_FrequencyFilter_get_Polarity(IBDA_FrequencyFilter* This,Polarisation *pPolarity) {
+    return This->lpVtbl->get_Polarity(This,pPolarity);
+}
+static FORCEINLINE HRESULT IBDA_FrequencyFilter_put_Range(IBDA_FrequencyFilter* This,ULONG ulRange) {
+    return This->lpVtbl->put_Range(This,ulRange);
+}
+static FORCEINLINE HRESULT IBDA_FrequencyFilter_get_Range(IBDA_FrequencyFilter* This,ULONG *pulRange) {
+    return This->lpVtbl->get_Range(This,pulRange);
+}
+static FORCEINLINE HRESULT IBDA_FrequencyFilter_put_Bandwidth(IBDA_FrequencyFilter* This,ULONG ulBandwidth) {
+    return This->lpVtbl->put_Bandwidth(This,ulBandwidth);
+}
+static FORCEINLINE HRESULT IBDA_FrequencyFilter_get_Bandwidth(IBDA_FrequencyFilter* This,ULONG *pulBandwidth) {
+    return This->lpVtbl->get_Bandwidth(This,pulBandwidth);
+}
+static FORCEINLINE HRESULT IBDA_FrequencyFilter_put_FrequencyMultiplier(IBDA_FrequencyFilter* This,ULONG ulMultiplier) {
+    return This->lpVtbl->put_FrequencyMultiplier(This,ulMultiplier);
+}
+static FORCEINLINE HRESULT IBDA_FrequencyFilter_get_FrequencyMultiplier(IBDA_FrequencyFilter* This,ULONG *pulMultiplier) {
+    return This->lpVtbl->get_FrequencyMultiplier(This,pulMultiplier);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_FrequencyFilter_put_Autotune_Proxy(
+    IBDA_FrequencyFilter* This,
+    ULONG ulTransponder);
+void __RPC_STUB IBDA_FrequencyFilter_put_Autotune_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_FrequencyFilter_get_Autotune_Proxy(
+    IBDA_FrequencyFilter* This,
+    ULONG *pulTransponder);
+void __RPC_STUB IBDA_FrequencyFilter_get_Autotune_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_FrequencyFilter_put_Frequency_Proxy(
+    IBDA_FrequencyFilter* This,
+    ULONG ulFrequency);
+void __RPC_STUB IBDA_FrequencyFilter_put_Frequency_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_FrequencyFilter_get_Frequency_Proxy(
+    IBDA_FrequencyFilter* This,
+    ULONG *pulFrequency);
+void __RPC_STUB IBDA_FrequencyFilter_get_Frequency_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_FrequencyFilter_put_Polarity_Proxy(
+    IBDA_FrequencyFilter* This,
+    Polarisation Polarity);
+void __RPC_STUB IBDA_FrequencyFilter_put_Polarity_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_FrequencyFilter_get_Polarity_Proxy(
+    IBDA_FrequencyFilter* This,
+    Polarisation *pPolarity);
+void __RPC_STUB IBDA_FrequencyFilter_get_Polarity_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_FrequencyFilter_put_Range_Proxy(
+    IBDA_FrequencyFilter* This,
+    ULONG ulRange);
+void __RPC_STUB IBDA_FrequencyFilter_put_Range_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_FrequencyFilter_get_Range_Proxy(
+    IBDA_FrequencyFilter* This,
+    ULONG *pulRange);
+void __RPC_STUB IBDA_FrequencyFilter_get_Range_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_FrequencyFilter_put_Bandwidth_Proxy(
+    IBDA_FrequencyFilter* This,
+    ULONG ulBandwidth);
+void __RPC_STUB IBDA_FrequencyFilter_put_Bandwidth_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_FrequencyFilter_get_Bandwidth_Proxy(
+    IBDA_FrequencyFilter* This,
+    ULONG *pulBandwidth);
+void __RPC_STUB IBDA_FrequencyFilter_get_Bandwidth_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_FrequencyFilter_put_FrequencyMultiplier_Proxy(
+    IBDA_FrequencyFilter* This,
+    ULONG ulMultiplier);
+void __RPC_STUB IBDA_FrequencyFilter_put_FrequencyMultiplier_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_FrequencyFilter_get_FrequencyMultiplier_Proxy(
+    IBDA_FrequencyFilter* This,
+    ULONG *pulMultiplier);
+void __RPC_STUB IBDA_FrequencyFilter_get_FrequencyMultiplier_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_FrequencyFilter_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_LNBInfo interface
+ */
+#ifndef __IBDA_LNBInfo_INTERFACE_DEFINED__
+#define __IBDA_LNBInfo_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_LNBInfo, 0x992cf102, 0x49f9, 0x4719, 0xa6,0x64, 0xc4,0xf2,0x3e,0x24,0x08,0xf4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("992cf102-49f9-4719-a664-c4f23e2408f4")
+IBDA_LNBInfo : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE put_LocalOscilatorFrequencyLowBand(
+        ULONG ulLOFLow) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_LocalOscilatorFrequencyLowBand(
+        ULONG *pulLOFLow) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_LocalOscilatorFrequencyHighBand(
+        ULONG ulLOFHigh) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_LocalOscilatorFrequencyHighBand(
+        ULONG *pulLOFHigh) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_HighLowSwitchFrequency(
+        ULONG ulSwitchFrequency) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_HighLowSwitchFrequency(
+        ULONG *pulSwitchFrequency) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_LNBInfo, 0x992cf102, 0x49f9, 0x4719, 0xa6,0x64, 0xc4,0xf2,0x3e,0x24,0x08,0xf4)
+#endif
+#else
+typedef struct IBDA_LNBInfoVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_LNBInfo* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_LNBInfo* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_LNBInfo* This);
+
+    /*** IBDA_LNBInfo methods ***/
+    HRESULT (STDMETHODCALLTYPE *put_LocalOscilatorFrequencyLowBand)(
+        IBDA_LNBInfo* This,
+        ULONG ulLOFLow);
+
+    HRESULT (STDMETHODCALLTYPE *get_LocalOscilatorFrequencyLowBand)(
+        IBDA_LNBInfo* This,
+        ULONG *pulLOFLow);
+
+    HRESULT (STDMETHODCALLTYPE *put_LocalOscilatorFrequencyHighBand)(
+        IBDA_LNBInfo* This,
+        ULONG ulLOFHigh);
+
+    HRESULT (STDMETHODCALLTYPE *get_LocalOscilatorFrequencyHighBand)(
+        IBDA_LNBInfo* This,
+        ULONG *pulLOFHigh);
+
+    HRESULT (STDMETHODCALLTYPE *put_HighLowSwitchFrequency)(
+        IBDA_LNBInfo* This,
+        ULONG ulSwitchFrequency);
+
+    HRESULT (STDMETHODCALLTYPE *get_HighLowSwitchFrequency)(
+        IBDA_LNBInfo* This,
+        ULONG *pulSwitchFrequency);
+
+    END_INTERFACE
+} IBDA_LNBInfoVtbl;
+interface IBDA_LNBInfo {
+    CONST_VTBL IBDA_LNBInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_LNBInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_LNBInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_LNBInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_LNBInfo methods ***/
+#define IBDA_LNBInfo_put_LocalOscilatorFrequencyLowBand(This,ulLOFLow) (This)->lpVtbl->put_LocalOscilatorFrequencyLowBand(This,ulLOFLow)
+#define IBDA_LNBInfo_get_LocalOscilatorFrequencyLowBand(This,pulLOFLow) (This)->lpVtbl->get_LocalOscilatorFrequencyLowBand(This,pulLOFLow)
+#define IBDA_LNBInfo_put_LocalOscilatorFrequencyHighBand(This,ulLOFHigh) (This)->lpVtbl->put_LocalOscilatorFrequencyHighBand(This,ulLOFHigh)
+#define IBDA_LNBInfo_get_LocalOscilatorFrequencyHighBand(This,pulLOFHigh) (This)->lpVtbl->get_LocalOscilatorFrequencyHighBand(This,pulLOFHigh)
+#define IBDA_LNBInfo_put_HighLowSwitchFrequency(This,ulSwitchFrequency) (This)->lpVtbl->put_HighLowSwitchFrequency(This,ulSwitchFrequency)
+#define IBDA_LNBInfo_get_HighLowSwitchFrequency(This,pulSwitchFrequency) (This)->lpVtbl->get_HighLowSwitchFrequency(This,pulSwitchFrequency)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_LNBInfo_QueryInterface(IBDA_LNBInfo* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_LNBInfo_AddRef(IBDA_LNBInfo* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_LNBInfo_Release(IBDA_LNBInfo* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_LNBInfo methods ***/
+static FORCEINLINE HRESULT IBDA_LNBInfo_put_LocalOscilatorFrequencyLowBand(IBDA_LNBInfo* This,ULONG ulLOFLow) {
+    return This->lpVtbl->put_LocalOscilatorFrequencyLowBand(This,ulLOFLow);
+}
+static FORCEINLINE HRESULT IBDA_LNBInfo_get_LocalOscilatorFrequencyLowBand(IBDA_LNBInfo* This,ULONG *pulLOFLow) {
+    return This->lpVtbl->get_LocalOscilatorFrequencyLowBand(This,pulLOFLow);
+}
+static FORCEINLINE HRESULT IBDA_LNBInfo_put_LocalOscilatorFrequencyHighBand(IBDA_LNBInfo* This,ULONG ulLOFHigh) {
+    return This->lpVtbl->put_LocalOscilatorFrequencyHighBand(This,ulLOFHigh);
+}
+static FORCEINLINE HRESULT IBDA_LNBInfo_get_LocalOscilatorFrequencyHighBand(IBDA_LNBInfo* This,ULONG *pulLOFHigh) {
+    return This->lpVtbl->get_LocalOscilatorFrequencyHighBand(This,pulLOFHigh);
+}
+static FORCEINLINE HRESULT IBDA_LNBInfo_put_HighLowSwitchFrequency(IBDA_LNBInfo* This,ULONG ulSwitchFrequency) {
+    return This->lpVtbl->put_HighLowSwitchFrequency(This,ulSwitchFrequency);
+}
+static FORCEINLINE HRESULT IBDA_LNBInfo_get_HighLowSwitchFrequency(IBDA_LNBInfo* This,ULONG *pulSwitchFrequency) {
+    return This->lpVtbl->get_HighLowSwitchFrequency(This,pulSwitchFrequency);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_LNBInfo_put_LocalOscilatorFrequencyLowBand_Proxy(
+    IBDA_LNBInfo* This,
+    ULONG ulLOFLow);
+void __RPC_STUB IBDA_LNBInfo_put_LocalOscilatorFrequencyLowBand_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_LNBInfo_get_LocalOscilatorFrequencyLowBand_Proxy(
+    IBDA_LNBInfo* This,
+    ULONG *pulLOFLow);
+void __RPC_STUB IBDA_LNBInfo_get_LocalOscilatorFrequencyLowBand_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_LNBInfo_put_LocalOscilatorFrequencyHighBand_Proxy(
+    IBDA_LNBInfo* This,
+    ULONG ulLOFHigh);
+void __RPC_STUB IBDA_LNBInfo_put_LocalOscilatorFrequencyHighBand_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_LNBInfo_get_LocalOscilatorFrequencyHighBand_Proxy(
+    IBDA_LNBInfo* This,
+    ULONG *pulLOFHigh);
+void __RPC_STUB IBDA_LNBInfo_get_LocalOscilatorFrequencyHighBand_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_LNBInfo_put_HighLowSwitchFrequency_Proxy(
+    IBDA_LNBInfo* This,
+    ULONG ulSwitchFrequency);
+void __RPC_STUB IBDA_LNBInfo_put_HighLowSwitchFrequency_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_LNBInfo_get_HighLowSwitchFrequency_Proxy(
+    IBDA_LNBInfo* This,
+    ULONG *pulSwitchFrequency);
+void __RPC_STUB IBDA_LNBInfo_get_HighLowSwitchFrequency_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_LNBInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_DiseqCommand interface
+ */
+#ifndef __IBDA_DiseqCommand_INTERFACE_DEFINED__
+#define __IBDA_DiseqCommand_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_DiseqCommand, 0xf84e2ab0, 0x3c6b, 0x45e3, 0xa0,0xfc, 0x86,0x69,0xd4,0xb8,0x1f,0x11);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("f84e2ab0-3c6b-45e3-a0fc-8669d4b81f11")
+IBDA_DiseqCommand : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE put_EnableDiseqCommands(
+        BOOLEAN bEnable) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_DiseqLNBSource(
+        ULONG ulLNBSource) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_DiseqUseToneBurst(
+        BOOLEAN bUseToneBurst) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_DiseqRepeats(
+        ULONG ulRepeats) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_DiseqSendCommand(
+        ULONG ulRequestId,
+        ULONG ulcbCommandLen,
+        BYTE *pbCommand) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_DiseqResponse(
+        ULONG ulRequestId,
+        ULONG *pulcbResponseLen,
+        BYTE pbResponse[]) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_DiseqCommand, 0xf84e2ab0, 0x3c6b, 0x45e3, 0xa0,0xfc, 0x86,0x69,0xd4,0xb8,0x1f,0x11)
+#endif
+#else
+typedef struct IBDA_DiseqCommandVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_DiseqCommand* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_DiseqCommand* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_DiseqCommand* This);
+
+    /*** IBDA_DiseqCommand methods ***/
+    HRESULT (STDMETHODCALLTYPE *put_EnableDiseqCommands)(
+        IBDA_DiseqCommand* This,
+        BOOLEAN bEnable);
+
+    HRESULT (STDMETHODCALLTYPE *put_DiseqLNBSource)(
+        IBDA_DiseqCommand* This,
+        ULONG ulLNBSource);
+
+    HRESULT (STDMETHODCALLTYPE *put_DiseqUseToneBurst)(
+        IBDA_DiseqCommand* This,
+        BOOLEAN bUseToneBurst);
+
+    HRESULT (STDMETHODCALLTYPE *put_DiseqRepeats)(
+        IBDA_DiseqCommand* This,
+        ULONG ulRepeats);
+
+    HRESULT (STDMETHODCALLTYPE *put_DiseqSendCommand)(
+        IBDA_DiseqCommand* This,
+        ULONG ulRequestId,
+        ULONG ulcbCommandLen,
+        BYTE *pbCommand);
+
+    HRESULT (STDMETHODCALLTYPE *get_DiseqResponse)(
+        IBDA_DiseqCommand* This,
+        ULONG ulRequestId,
+        ULONG *pulcbResponseLen,
+        BYTE pbResponse[]);
+
+    END_INTERFACE
+} IBDA_DiseqCommandVtbl;
+interface IBDA_DiseqCommand {
+    CONST_VTBL IBDA_DiseqCommandVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_DiseqCommand_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_DiseqCommand_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_DiseqCommand_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_DiseqCommand methods ***/
+#define IBDA_DiseqCommand_put_EnableDiseqCommands(This,bEnable) (This)->lpVtbl->put_EnableDiseqCommands(This,bEnable)
+#define IBDA_DiseqCommand_put_DiseqLNBSource(This,ulLNBSource) (This)->lpVtbl->put_DiseqLNBSource(This,ulLNBSource)
+#define IBDA_DiseqCommand_put_DiseqUseToneBurst(This,bUseToneBurst) (This)->lpVtbl->put_DiseqUseToneBurst(This,bUseToneBurst)
+#define IBDA_DiseqCommand_put_DiseqRepeats(This,ulRepeats) (This)->lpVtbl->put_DiseqRepeats(This,ulRepeats)
+#define IBDA_DiseqCommand_put_DiseqSendCommand(This,ulRequestId,ulcbCommandLen,pbCommand) (This)->lpVtbl->put_DiseqSendCommand(This,ulRequestId,ulcbCommandLen,pbCommand)
+#define IBDA_DiseqCommand_get_DiseqResponse(This,ulRequestId,pulcbResponseLen,pbResponse) (This)->lpVtbl->get_DiseqResponse(This,ulRequestId,pulcbResponseLen,pbResponse)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_DiseqCommand_QueryInterface(IBDA_DiseqCommand* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_DiseqCommand_AddRef(IBDA_DiseqCommand* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_DiseqCommand_Release(IBDA_DiseqCommand* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_DiseqCommand methods ***/
+static FORCEINLINE HRESULT IBDA_DiseqCommand_put_EnableDiseqCommands(IBDA_DiseqCommand* This,BOOLEAN bEnable) {
+    return This->lpVtbl->put_EnableDiseqCommands(This,bEnable);
+}
+static FORCEINLINE HRESULT IBDA_DiseqCommand_put_DiseqLNBSource(IBDA_DiseqCommand* This,ULONG ulLNBSource) {
+    return This->lpVtbl->put_DiseqLNBSource(This,ulLNBSource);
+}
+static FORCEINLINE HRESULT IBDA_DiseqCommand_put_DiseqUseToneBurst(IBDA_DiseqCommand* This,BOOLEAN bUseToneBurst) {
+    return This->lpVtbl->put_DiseqUseToneBurst(This,bUseToneBurst);
+}
+static FORCEINLINE HRESULT IBDA_DiseqCommand_put_DiseqRepeats(IBDA_DiseqCommand* This,ULONG ulRepeats) {
+    return This->lpVtbl->put_DiseqRepeats(This,ulRepeats);
+}
+static FORCEINLINE HRESULT IBDA_DiseqCommand_put_DiseqSendCommand(IBDA_DiseqCommand* This,ULONG ulRequestId,ULONG ulcbCommandLen,BYTE *pbCommand) {
+    return This->lpVtbl->put_DiseqSendCommand(This,ulRequestId,ulcbCommandLen,pbCommand);
+}
+static FORCEINLINE HRESULT IBDA_DiseqCommand_get_DiseqResponse(IBDA_DiseqCommand* This,ULONG ulRequestId,ULONG *pulcbResponseLen,BYTE pbResponse[]) {
+    return This->lpVtbl->get_DiseqResponse(This,ulRequestId,pulcbResponseLen,pbResponse);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_DiseqCommand_put_EnableDiseqCommands_Proxy(
+    IBDA_DiseqCommand* This,
+    BOOLEAN bEnable);
+void __RPC_STUB IBDA_DiseqCommand_put_EnableDiseqCommands_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DiseqCommand_put_DiseqLNBSource_Proxy(
+    IBDA_DiseqCommand* This,
+    ULONG ulLNBSource);
+void __RPC_STUB IBDA_DiseqCommand_put_DiseqLNBSource_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DiseqCommand_put_DiseqUseToneBurst_Proxy(
+    IBDA_DiseqCommand* This,
+    BOOLEAN bUseToneBurst);
+void __RPC_STUB IBDA_DiseqCommand_put_DiseqUseToneBurst_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DiseqCommand_put_DiseqRepeats_Proxy(
+    IBDA_DiseqCommand* This,
+    ULONG ulRepeats);
+void __RPC_STUB IBDA_DiseqCommand_put_DiseqRepeats_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DiseqCommand_put_DiseqSendCommand_Proxy(
+    IBDA_DiseqCommand* This,
+    ULONG ulRequestId,
+    ULONG ulcbCommandLen,
+    BYTE *pbCommand);
+void __RPC_STUB IBDA_DiseqCommand_put_DiseqSendCommand_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DiseqCommand_get_DiseqResponse_Proxy(
+    IBDA_DiseqCommand* This,
+    ULONG ulRequestId,
+    ULONG *pulcbResponseLen,
+    BYTE pbResponse[]);
+void __RPC_STUB IBDA_DiseqCommand_get_DiseqResponse_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_DiseqCommand_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_AutoDemodulate interface
+ */
+#ifndef __IBDA_AutoDemodulate_INTERFACE_DEFINED__
+#define __IBDA_AutoDemodulate_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_AutoDemodulate, 0xddf15b12, 0xbd25, 0x11d2, 0x9c,0xa0, 0x00,0xc0,0x4f,0x79,0x71,0xe0);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("ddf15b12-bd25-11d2-9ca0-00c04f7971e0")
+IBDA_AutoDemodulate : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE put_AutoDemodulate(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_AutoDemodulate, 0xddf15b12, 0xbd25, 0x11d2, 0x9c,0xa0, 0x00,0xc0,0x4f,0x79,0x71,0xe0)
+#endif
+#else
+typedef struct IBDA_AutoDemodulateVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_AutoDemodulate* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_AutoDemodulate* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_AutoDemodulate* This);
+
+    /*** IBDA_AutoDemodulate methods ***/
+    HRESULT (STDMETHODCALLTYPE *put_AutoDemodulate)(
+        IBDA_AutoDemodulate* This);
+
+    END_INTERFACE
+} IBDA_AutoDemodulateVtbl;
+interface IBDA_AutoDemodulate {
+    CONST_VTBL IBDA_AutoDemodulateVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_AutoDemodulate_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_AutoDemodulate_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_AutoDemodulate_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_AutoDemodulate methods ***/
+#define IBDA_AutoDemodulate_put_AutoDemodulate(This) (This)->lpVtbl->put_AutoDemodulate(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_AutoDemodulate_QueryInterface(IBDA_AutoDemodulate* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_AutoDemodulate_AddRef(IBDA_AutoDemodulate* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_AutoDemodulate_Release(IBDA_AutoDemodulate* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_AutoDemodulate methods ***/
+static FORCEINLINE HRESULT IBDA_AutoDemodulate_put_AutoDemodulate(IBDA_AutoDemodulate* This) {
+    return This->lpVtbl->put_AutoDemodulate(This);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_AutoDemodulate_put_AutoDemodulate_Proxy(
+    IBDA_AutoDemodulate* This);
+void __RPC_STUB IBDA_AutoDemodulate_put_AutoDemodulate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_AutoDemodulate_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_AutoDemodulateEx interface
+ */
+#ifndef __IBDA_AutoDemodulateEx_INTERFACE_DEFINED__
+#define __IBDA_AutoDemodulateEx_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_AutoDemodulateEx, 0x34518d13, 0x1182, 0x48e6, 0xb2,0x8f, 0xb2,0x49,0x87,0x78,0x73,0x26);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("34518d13-1182-48e6-b28f-b24987787326")
+IBDA_AutoDemodulateEx : public IBDA_AutoDemodulate
+{
+    virtual HRESULT STDMETHODCALLTYPE get_SupportedDeviceNodeTypes(
+        ULONG ulcDeviceNodeTypesMax,
+        ULONG *pulcDeviceNodeTypes,
+        GUID *pguidDeviceNodeTypes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SupportedVideoFormats(
+        ULONG *pulAMTunerModeType,
+        ULONG *pulAnalogVideoStandard) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_AuxInputCount(
+        ULONG *pulCompositeCount,
+        ULONG *pulSvideoCount) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_AutoDemodulateEx, 0x34518d13, 0x1182, 0x48e6, 0xb2,0x8f, 0xb2,0x49,0x87,0x78,0x73,0x26)
+#endif
+#else
+typedef struct IBDA_AutoDemodulateExVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_AutoDemodulateEx* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_AutoDemodulateEx* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_AutoDemodulateEx* This);
+
+    /*** IBDA_AutoDemodulate methods ***/
+    HRESULT (STDMETHODCALLTYPE *put_AutoDemodulate)(
+        IBDA_AutoDemodulateEx* This);
+
+    /*** IBDA_AutoDemodulateEx methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_SupportedDeviceNodeTypes)(
+        IBDA_AutoDemodulateEx* This,
+        ULONG ulcDeviceNodeTypesMax,
+        ULONG *pulcDeviceNodeTypes,
+        GUID *pguidDeviceNodeTypes);
+
+    HRESULT (STDMETHODCALLTYPE *get_SupportedVideoFormats)(
+        IBDA_AutoDemodulateEx* This,
+        ULONG *pulAMTunerModeType,
+        ULONG *pulAnalogVideoStandard);
+
+    HRESULT (STDMETHODCALLTYPE *get_AuxInputCount)(
+        IBDA_AutoDemodulateEx* This,
+        ULONG *pulCompositeCount,
+        ULONG *pulSvideoCount);
+
+    END_INTERFACE
+} IBDA_AutoDemodulateExVtbl;
+interface IBDA_AutoDemodulateEx {
+    CONST_VTBL IBDA_AutoDemodulateExVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_AutoDemodulateEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_AutoDemodulateEx_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_AutoDemodulateEx_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_AutoDemodulate methods ***/
+#define IBDA_AutoDemodulateEx_put_AutoDemodulate(This) (This)->lpVtbl->put_AutoDemodulate(This)
+/*** IBDA_AutoDemodulateEx methods ***/
+#define IBDA_AutoDemodulateEx_get_SupportedDeviceNodeTypes(This,ulcDeviceNodeTypesMax,pulcDeviceNodeTypes,pguidDeviceNodeTypes) (This)->lpVtbl->get_SupportedDeviceNodeTypes(This,ulcDeviceNodeTypesMax,pulcDeviceNodeTypes,pguidDeviceNodeTypes)
+#define IBDA_AutoDemodulateEx_get_SupportedVideoFormats(This,pulAMTunerModeType,pulAnalogVideoStandard) (This)->lpVtbl->get_SupportedVideoFormats(This,pulAMTunerModeType,pulAnalogVideoStandard)
+#define IBDA_AutoDemodulateEx_get_AuxInputCount(This,pulCompositeCount,pulSvideoCount) (This)->lpVtbl->get_AuxInputCount(This,pulCompositeCount,pulSvideoCount)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_AutoDemodulateEx_QueryInterface(IBDA_AutoDemodulateEx* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_AutoDemodulateEx_AddRef(IBDA_AutoDemodulateEx* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_AutoDemodulateEx_Release(IBDA_AutoDemodulateEx* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_AutoDemodulate methods ***/
+static FORCEINLINE HRESULT IBDA_AutoDemodulateEx_put_AutoDemodulate(IBDA_AutoDemodulateEx* This) {
+    return This->lpVtbl->put_AutoDemodulate(This);
+}
+/*** IBDA_AutoDemodulateEx methods ***/
+static FORCEINLINE HRESULT IBDA_AutoDemodulateEx_get_SupportedDeviceNodeTypes(IBDA_AutoDemodulateEx* This,ULONG ulcDeviceNodeTypesMax,ULONG *pulcDeviceNodeTypes,GUID *pguidDeviceNodeTypes) {
+    return This->lpVtbl->get_SupportedDeviceNodeTypes(This,ulcDeviceNodeTypesMax,pulcDeviceNodeTypes,pguidDeviceNodeTypes);
+}
+static FORCEINLINE HRESULT IBDA_AutoDemodulateEx_get_SupportedVideoFormats(IBDA_AutoDemodulateEx* This,ULONG *pulAMTunerModeType,ULONG *pulAnalogVideoStandard) {
+    return This->lpVtbl->get_SupportedVideoFormats(This,pulAMTunerModeType,pulAnalogVideoStandard);
+}
+static FORCEINLINE HRESULT IBDA_AutoDemodulateEx_get_AuxInputCount(IBDA_AutoDemodulateEx* This,ULONG *pulCompositeCount,ULONG *pulSvideoCount) {
+    return This->lpVtbl->get_AuxInputCount(This,pulCompositeCount,pulSvideoCount);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_AutoDemodulateEx_get_SupportedDeviceNodeTypes_Proxy(
+    IBDA_AutoDemodulateEx* This,
+    ULONG ulcDeviceNodeTypesMax,
+    ULONG *pulcDeviceNodeTypes,
+    GUID *pguidDeviceNodeTypes);
+void __RPC_STUB IBDA_AutoDemodulateEx_get_SupportedDeviceNodeTypes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_AutoDemodulateEx_get_SupportedVideoFormats_Proxy(
+    IBDA_AutoDemodulateEx* This,
+    ULONG *pulAMTunerModeType,
+    ULONG *pulAnalogVideoStandard);
+void __RPC_STUB IBDA_AutoDemodulateEx_get_SupportedVideoFormats_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_AutoDemodulateEx_get_AuxInputCount_Proxy(
+    IBDA_AutoDemodulateEx* This,
+    ULONG *pulCompositeCount,
+    ULONG *pulSvideoCount);
+void __RPC_STUB IBDA_AutoDemodulateEx_get_AuxInputCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_AutoDemodulateEx_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_DigitalDemodulator interface
+ */
+#ifndef __IBDA_DigitalDemodulator_INTERFACE_DEFINED__
+#define __IBDA_DigitalDemodulator_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_DigitalDemodulator, 0xef30f379, 0x985b, 0x4d10, 0xb6,0x40, 0xa7,0x9d,0x5e,0x04,0xe1,0xe0);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("ef30f379-985b-4d10-b640-a79d5e04e1e0")
+IBDA_DigitalDemodulator : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE put_ModulationType(
+        ModulationType *pModulationType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ModulationType(
+        ModulationType *pModulationType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_InnerFECMethod(
+        FECMethod *pFECMethod) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_InnerFECMethod(
+        FECMethod *pFECMethod) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_InnerFECRate(
+        BinaryConvolutionCodeRate *pFECRate) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_InnerFECRate(
+        BinaryConvolutionCodeRate *pFECRate) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_OuterFECMethod(
+        FECMethod *pFECMethod) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_OuterFECMethod(
+        FECMethod *pFECMethod) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_OuterFECRate(
+        BinaryConvolutionCodeRate *pFECRate) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_OuterFECRate(
+        BinaryConvolutionCodeRate *pFECRate) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_SymbolRate(
+        ULONG *pSymbolRate) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SymbolRate(
+        ULONG *pSymbolRate) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_SpectralInversion(
+        SpectralInversion *pSpectralInversion) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SpectralInversion(
+        SpectralInversion *pSpectralInversion) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_DigitalDemodulator, 0xef30f379, 0x985b, 0x4d10, 0xb6,0x40, 0xa7,0x9d,0x5e,0x04,0xe1,0xe0)
+#endif
+#else
+typedef struct IBDA_DigitalDemodulatorVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_DigitalDemodulator* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_DigitalDemodulator* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_DigitalDemodulator* This);
+
+    /*** IBDA_DigitalDemodulator methods ***/
+    HRESULT (STDMETHODCALLTYPE *put_ModulationType)(
+        IBDA_DigitalDemodulator* This,
+        ModulationType *pModulationType);
+
+    HRESULT (STDMETHODCALLTYPE *get_ModulationType)(
+        IBDA_DigitalDemodulator* This,
+        ModulationType *pModulationType);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFECMethod)(
+        IBDA_DigitalDemodulator* This,
+        FECMethod *pFECMethod);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFECMethod)(
+        IBDA_DigitalDemodulator* This,
+        FECMethod *pFECMethod);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFECRate)(
+        IBDA_DigitalDemodulator* This,
+        BinaryConvolutionCodeRate *pFECRate);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFECRate)(
+        IBDA_DigitalDemodulator* This,
+        BinaryConvolutionCodeRate *pFECRate);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFECMethod)(
+        IBDA_DigitalDemodulator* This,
+        FECMethod *pFECMethod);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFECMethod)(
+        IBDA_DigitalDemodulator* This,
+        FECMethod *pFECMethod);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFECRate)(
+        IBDA_DigitalDemodulator* This,
+        BinaryConvolutionCodeRate *pFECRate);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFECRate)(
+        IBDA_DigitalDemodulator* This,
+        BinaryConvolutionCodeRate *pFECRate);
+
+    HRESULT (STDMETHODCALLTYPE *put_SymbolRate)(
+        IBDA_DigitalDemodulator* This,
+        ULONG *pSymbolRate);
+
+    HRESULT (STDMETHODCALLTYPE *get_SymbolRate)(
+        IBDA_DigitalDemodulator* This,
+        ULONG *pSymbolRate);
+
+    HRESULT (STDMETHODCALLTYPE *put_SpectralInversion)(
+        IBDA_DigitalDemodulator* This,
+        SpectralInversion *pSpectralInversion);
+
+    HRESULT (STDMETHODCALLTYPE *get_SpectralInversion)(
+        IBDA_DigitalDemodulator* This,
+        SpectralInversion *pSpectralInversion);
+
+    END_INTERFACE
+} IBDA_DigitalDemodulatorVtbl;
+interface IBDA_DigitalDemodulator {
+    CONST_VTBL IBDA_DigitalDemodulatorVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_DigitalDemodulator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_DigitalDemodulator_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_DigitalDemodulator_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_DigitalDemodulator methods ***/
+#define IBDA_DigitalDemodulator_put_ModulationType(This,pModulationType) (This)->lpVtbl->put_ModulationType(This,pModulationType)
+#define IBDA_DigitalDemodulator_get_ModulationType(This,pModulationType) (This)->lpVtbl->get_ModulationType(This,pModulationType)
+#define IBDA_DigitalDemodulator_put_InnerFECMethod(This,pFECMethod) (This)->lpVtbl->put_InnerFECMethod(This,pFECMethod)
+#define IBDA_DigitalDemodulator_get_InnerFECMethod(This,pFECMethod) (This)->lpVtbl->get_InnerFECMethod(This,pFECMethod)
+#define IBDA_DigitalDemodulator_put_InnerFECRate(This,pFECRate) (This)->lpVtbl->put_InnerFECRate(This,pFECRate)
+#define IBDA_DigitalDemodulator_get_InnerFECRate(This,pFECRate) (This)->lpVtbl->get_InnerFECRate(This,pFECRate)
+#define IBDA_DigitalDemodulator_put_OuterFECMethod(This,pFECMethod) (This)->lpVtbl->put_OuterFECMethod(This,pFECMethod)
+#define IBDA_DigitalDemodulator_get_OuterFECMethod(This,pFECMethod) (This)->lpVtbl->get_OuterFECMethod(This,pFECMethod)
+#define IBDA_DigitalDemodulator_put_OuterFECRate(This,pFECRate) (This)->lpVtbl->put_OuterFECRate(This,pFECRate)
+#define IBDA_DigitalDemodulator_get_OuterFECRate(This,pFECRate) (This)->lpVtbl->get_OuterFECRate(This,pFECRate)
+#define IBDA_DigitalDemodulator_put_SymbolRate(This,pSymbolRate) (This)->lpVtbl->put_SymbolRate(This,pSymbolRate)
+#define IBDA_DigitalDemodulator_get_SymbolRate(This,pSymbolRate) (This)->lpVtbl->get_SymbolRate(This,pSymbolRate)
+#define IBDA_DigitalDemodulator_put_SpectralInversion(This,pSpectralInversion) (This)->lpVtbl->put_SpectralInversion(This,pSpectralInversion)
+#define IBDA_DigitalDemodulator_get_SpectralInversion(This,pSpectralInversion) (This)->lpVtbl->get_SpectralInversion(This,pSpectralInversion)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator_QueryInterface(IBDA_DigitalDemodulator* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_DigitalDemodulator_AddRef(IBDA_DigitalDemodulator* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_DigitalDemodulator_Release(IBDA_DigitalDemodulator* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_DigitalDemodulator methods ***/
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator_put_ModulationType(IBDA_DigitalDemodulator* This,ModulationType *pModulationType) {
+    return This->lpVtbl->put_ModulationType(This,pModulationType);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator_get_ModulationType(IBDA_DigitalDemodulator* This,ModulationType *pModulationType) {
+    return This->lpVtbl->get_ModulationType(This,pModulationType);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator_put_InnerFECMethod(IBDA_DigitalDemodulator* This,FECMethod *pFECMethod) {
+    return This->lpVtbl->put_InnerFECMethod(This,pFECMethod);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator_get_InnerFECMethod(IBDA_DigitalDemodulator* This,FECMethod *pFECMethod) {
+    return This->lpVtbl->get_InnerFECMethod(This,pFECMethod);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator_put_InnerFECRate(IBDA_DigitalDemodulator* This,BinaryConvolutionCodeRate *pFECRate) {
+    return This->lpVtbl->put_InnerFECRate(This,pFECRate);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator_get_InnerFECRate(IBDA_DigitalDemodulator* This,BinaryConvolutionCodeRate *pFECRate) {
+    return This->lpVtbl->get_InnerFECRate(This,pFECRate);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator_put_OuterFECMethod(IBDA_DigitalDemodulator* This,FECMethod *pFECMethod) {
+    return This->lpVtbl->put_OuterFECMethod(This,pFECMethod);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator_get_OuterFECMethod(IBDA_DigitalDemodulator* This,FECMethod *pFECMethod) {
+    return This->lpVtbl->get_OuterFECMethod(This,pFECMethod);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator_put_OuterFECRate(IBDA_DigitalDemodulator* This,BinaryConvolutionCodeRate *pFECRate) {
+    return This->lpVtbl->put_OuterFECRate(This,pFECRate);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator_get_OuterFECRate(IBDA_DigitalDemodulator* This,BinaryConvolutionCodeRate *pFECRate) {
+    return This->lpVtbl->get_OuterFECRate(This,pFECRate);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator_put_SymbolRate(IBDA_DigitalDemodulator* This,ULONG *pSymbolRate) {
+    return This->lpVtbl->put_SymbolRate(This,pSymbolRate);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator_get_SymbolRate(IBDA_DigitalDemodulator* This,ULONG *pSymbolRate) {
+    return This->lpVtbl->get_SymbolRate(This,pSymbolRate);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator_put_SpectralInversion(IBDA_DigitalDemodulator* This,SpectralInversion *pSpectralInversion) {
+    return This->lpVtbl->put_SpectralInversion(This,pSpectralInversion);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator_get_SpectralInversion(IBDA_DigitalDemodulator* This,SpectralInversion *pSpectralInversion) {
+    return This->lpVtbl->get_SpectralInversion(This,pSpectralInversion);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_DigitalDemodulator_put_ModulationType_Proxy(
+    IBDA_DigitalDemodulator* This,
+    ModulationType *pModulationType);
+void __RPC_STUB IBDA_DigitalDemodulator_put_ModulationType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DigitalDemodulator_get_ModulationType_Proxy(
+    IBDA_DigitalDemodulator* This,
+    ModulationType *pModulationType);
+void __RPC_STUB IBDA_DigitalDemodulator_get_ModulationType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DigitalDemodulator_put_InnerFECMethod_Proxy(
+    IBDA_DigitalDemodulator* This,
+    FECMethod *pFECMethod);
+void __RPC_STUB IBDA_DigitalDemodulator_put_InnerFECMethod_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DigitalDemodulator_get_InnerFECMethod_Proxy(
+    IBDA_DigitalDemodulator* This,
+    FECMethod *pFECMethod);
+void __RPC_STUB IBDA_DigitalDemodulator_get_InnerFECMethod_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DigitalDemodulator_put_InnerFECRate_Proxy(
+    IBDA_DigitalDemodulator* This,
+    BinaryConvolutionCodeRate *pFECRate);
+void __RPC_STUB IBDA_DigitalDemodulator_put_InnerFECRate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DigitalDemodulator_get_InnerFECRate_Proxy(
+    IBDA_DigitalDemodulator* This,
+    BinaryConvolutionCodeRate *pFECRate);
+void __RPC_STUB IBDA_DigitalDemodulator_get_InnerFECRate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DigitalDemodulator_put_OuterFECMethod_Proxy(
+    IBDA_DigitalDemodulator* This,
+    FECMethod *pFECMethod);
+void __RPC_STUB IBDA_DigitalDemodulator_put_OuterFECMethod_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DigitalDemodulator_get_OuterFECMethod_Proxy(
+    IBDA_DigitalDemodulator* This,
+    FECMethod *pFECMethod);
+void __RPC_STUB IBDA_DigitalDemodulator_get_OuterFECMethod_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DigitalDemodulator_put_OuterFECRate_Proxy(
+    IBDA_DigitalDemodulator* This,
+    BinaryConvolutionCodeRate *pFECRate);
+void __RPC_STUB IBDA_DigitalDemodulator_put_OuterFECRate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DigitalDemodulator_get_OuterFECRate_Proxy(
+    IBDA_DigitalDemodulator* This,
+    BinaryConvolutionCodeRate *pFECRate);
+void __RPC_STUB IBDA_DigitalDemodulator_get_OuterFECRate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DigitalDemodulator_put_SymbolRate_Proxy(
+    IBDA_DigitalDemodulator* This,
+    ULONG *pSymbolRate);
+void __RPC_STUB IBDA_DigitalDemodulator_put_SymbolRate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DigitalDemodulator_get_SymbolRate_Proxy(
+    IBDA_DigitalDemodulator* This,
+    ULONG *pSymbolRate);
+void __RPC_STUB IBDA_DigitalDemodulator_get_SymbolRate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DigitalDemodulator_put_SpectralInversion_Proxy(
+    IBDA_DigitalDemodulator* This,
+    SpectralInversion *pSpectralInversion);
+void __RPC_STUB IBDA_DigitalDemodulator_put_SpectralInversion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DigitalDemodulator_get_SpectralInversion_Proxy(
+    IBDA_DigitalDemodulator* This,
+    SpectralInversion *pSpectralInversion);
+void __RPC_STUB IBDA_DigitalDemodulator_get_SpectralInversion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_DigitalDemodulator_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_DigitalDemodulator2 interface
+ */
+#ifndef __IBDA_DigitalDemodulator2_INTERFACE_DEFINED__
+#define __IBDA_DigitalDemodulator2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_DigitalDemodulator2, 0x525ed3ee, 0x5cf3, 0x4e1e, 0x9a,0x06, 0x53,0x68,0xa8,0x4f,0x9a,0x6e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("525ed3ee-5cf3-4e1e-9a06-5368a84f9a6e")
+IBDA_DigitalDemodulator2 : public IBDA_DigitalDemodulator
+{
+    virtual HRESULT STDMETHODCALLTYPE put_GuardInterval(
+        GuardInterval *pGuardInterval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_GuardInterval(
+        GuardInterval *pGuardInterval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_TransmissionMode(
+        TransmissionMode *pTransmissionMode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_TransmissionMode(
+        TransmissionMode *pTransmissionMode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_RollOff(
+        RollOff *pRollOff) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_RollOff(
+        RollOff *pRollOff) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Pilot(
+        Pilot *pPilot) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Pilot(
+        Pilot *pPilot) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_DigitalDemodulator2, 0x525ed3ee, 0x5cf3, 0x4e1e, 0x9a,0x06, 0x53,0x68,0xa8,0x4f,0x9a,0x6e)
+#endif
+#else
+typedef struct IBDA_DigitalDemodulator2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_DigitalDemodulator2* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_DigitalDemodulator2* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_DigitalDemodulator2* This);
+
+    /*** IBDA_DigitalDemodulator methods ***/
+    HRESULT (STDMETHODCALLTYPE *put_ModulationType)(
+        IBDA_DigitalDemodulator2* This,
+        ModulationType *pModulationType);
+
+    HRESULT (STDMETHODCALLTYPE *get_ModulationType)(
+        IBDA_DigitalDemodulator2* This,
+        ModulationType *pModulationType);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFECMethod)(
+        IBDA_DigitalDemodulator2* This,
+        FECMethod *pFECMethod);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFECMethod)(
+        IBDA_DigitalDemodulator2* This,
+        FECMethod *pFECMethod);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFECRate)(
+        IBDA_DigitalDemodulator2* This,
+        BinaryConvolutionCodeRate *pFECRate);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFECRate)(
+        IBDA_DigitalDemodulator2* This,
+        BinaryConvolutionCodeRate *pFECRate);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFECMethod)(
+        IBDA_DigitalDemodulator2* This,
+        FECMethod *pFECMethod);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFECMethod)(
+        IBDA_DigitalDemodulator2* This,
+        FECMethod *pFECMethod);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFECRate)(
+        IBDA_DigitalDemodulator2* This,
+        BinaryConvolutionCodeRate *pFECRate);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFECRate)(
+        IBDA_DigitalDemodulator2* This,
+        BinaryConvolutionCodeRate *pFECRate);
+
+    HRESULT (STDMETHODCALLTYPE *put_SymbolRate)(
+        IBDA_DigitalDemodulator2* This,
+        ULONG *pSymbolRate);
+
+    HRESULT (STDMETHODCALLTYPE *get_SymbolRate)(
+        IBDA_DigitalDemodulator2* This,
+        ULONG *pSymbolRate);
+
+    HRESULT (STDMETHODCALLTYPE *put_SpectralInversion)(
+        IBDA_DigitalDemodulator2* This,
+        SpectralInversion *pSpectralInversion);
+
+    HRESULT (STDMETHODCALLTYPE *get_SpectralInversion)(
+        IBDA_DigitalDemodulator2* This,
+        SpectralInversion *pSpectralInversion);
+
+    /*** IBDA_DigitalDemodulator2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *put_GuardInterval)(
+        IBDA_DigitalDemodulator2* This,
+        GuardInterval *pGuardInterval);
+
+    HRESULT (STDMETHODCALLTYPE *get_GuardInterval)(
+        IBDA_DigitalDemodulator2* This,
+        GuardInterval *pGuardInterval);
+
+    HRESULT (STDMETHODCALLTYPE *put_TransmissionMode)(
+        IBDA_DigitalDemodulator2* This,
+        TransmissionMode *pTransmissionMode);
+
+    HRESULT (STDMETHODCALLTYPE *get_TransmissionMode)(
+        IBDA_DigitalDemodulator2* This,
+        TransmissionMode *pTransmissionMode);
+
+    HRESULT (STDMETHODCALLTYPE *put_RollOff)(
+        IBDA_DigitalDemodulator2* This,
+        RollOff *pRollOff);
+
+    HRESULT (STDMETHODCALLTYPE *get_RollOff)(
+        IBDA_DigitalDemodulator2* This,
+        RollOff *pRollOff);
+
+    HRESULT (STDMETHODCALLTYPE *put_Pilot)(
+        IBDA_DigitalDemodulator2* This,
+        Pilot *pPilot);
+
+    HRESULT (STDMETHODCALLTYPE *get_Pilot)(
+        IBDA_DigitalDemodulator2* This,
+        Pilot *pPilot);
+
+    END_INTERFACE
+} IBDA_DigitalDemodulator2Vtbl;
+interface IBDA_DigitalDemodulator2 {
+    CONST_VTBL IBDA_DigitalDemodulator2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_DigitalDemodulator2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_DigitalDemodulator2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_DigitalDemodulator2_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_DigitalDemodulator methods ***/
+#define IBDA_DigitalDemodulator2_put_ModulationType(This,pModulationType) (This)->lpVtbl->put_ModulationType(This,pModulationType)
+#define IBDA_DigitalDemodulator2_get_ModulationType(This,pModulationType) (This)->lpVtbl->get_ModulationType(This,pModulationType)
+#define IBDA_DigitalDemodulator2_put_InnerFECMethod(This,pFECMethod) (This)->lpVtbl->put_InnerFECMethod(This,pFECMethod)
+#define IBDA_DigitalDemodulator2_get_InnerFECMethod(This,pFECMethod) (This)->lpVtbl->get_InnerFECMethod(This,pFECMethod)
+#define IBDA_DigitalDemodulator2_put_InnerFECRate(This,pFECRate) (This)->lpVtbl->put_InnerFECRate(This,pFECRate)
+#define IBDA_DigitalDemodulator2_get_InnerFECRate(This,pFECRate) (This)->lpVtbl->get_InnerFECRate(This,pFECRate)
+#define IBDA_DigitalDemodulator2_put_OuterFECMethod(This,pFECMethod) (This)->lpVtbl->put_OuterFECMethod(This,pFECMethod)
+#define IBDA_DigitalDemodulator2_get_OuterFECMethod(This,pFECMethod) (This)->lpVtbl->get_OuterFECMethod(This,pFECMethod)
+#define IBDA_DigitalDemodulator2_put_OuterFECRate(This,pFECRate) (This)->lpVtbl->put_OuterFECRate(This,pFECRate)
+#define IBDA_DigitalDemodulator2_get_OuterFECRate(This,pFECRate) (This)->lpVtbl->get_OuterFECRate(This,pFECRate)
+#define IBDA_DigitalDemodulator2_put_SymbolRate(This,pSymbolRate) (This)->lpVtbl->put_SymbolRate(This,pSymbolRate)
+#define IBDA_DigitalDemodulator2_get_SymbolRate(This,pSymbolRate) (This)->lpVtbl->get_SymbolRate(This,pSymbolRate)
+#define IBDA_DigitalDemodulator2_put_SpectralInversion(This,pSpectralInversion) (This)->lpVtbl->put_SpectralInversion(This,pSpectralInversion)
+#define IBDA_DigitalDemodulator2_get_SpectralInversion(This,pSpectralInversion) (This)->lpVtbl->get_SpectralInversion(This,pSpectralInversion)
+/*** IBDA_DigitalDemodulator2 methods ***/
+#define IBDA_DigitalDemodulator2_put_GuardInterval(This,pGuardInterval) (This)->lpVtbl->put_GuardInterval(This,pGuardInterval)
+#define IBDA_DigitalDemodulator2_get_GuardInterval(This,pGuardInterval) (This)->lpVtbl->get_GuardInterval(This,pGuardInterval)
+#define IBDA_DigitalDemodulator2_put_TransmissionMode(This,pTransmissionMode) (This)->lpVtbl->put_TransmissionMode(This,pTransmissionMode)
+#define IBDA_DigitalDemodulator2_get_TransmissionMode(This,pTransmissionMode) (This)->lpVtbl->get_TransmissionMode(This,pTransmissionMode)
+#define IBDA_DigitalDemodulator2_put_RollOff(This,pRollOff) (This)->lpVtbl->put_RollOff(This,pRollOff)
+#define IBDA_DigitalDemodulator2_get_RollOff(This,pRollOff) (This)->lpVtbl->get_RollOff(This,pRollOff)
+#define IBDA_DigitalDemodulator2_put_Pilot(This,pPilot) (This)->lpVtbl->put_Pilot(This,pPilot)
+#define IBDA_DigitalDemodulator2_get_Pilot(This,pPilot) (This)->lpVtbl->get_Pilot(This,pPilot)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator2_QueryInterface(IBDA_DigitalDemodulator2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_DigitalDemodulator2_AddRef(IBDA_DigitalDemodulator2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_DigitalDemodulator2_Release(IBDA_DigitalDemodulator2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_DigitalDemodulator methods ***/
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator2_put_ModulationType(IBDA_DigitalDemodulator2* This,ModulationType *pModulationType) {
+    return This->lpVtbl->put_ModulationType(This,pModulationType);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator2_get_ModulationType(IBDA_DigitalDemodulator2* This,ModulationType *pModulationType) {
+    return This->lpVtbl->get_ModulationType(This,pModulationType);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator2_put_InnerFECMethod(IBDA_DigitalDemodulator2* This,FECMethod *pFECMethod) {
+    return This->lpVtbl->put_InnerFECMethod(This,pFECMethod);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator2_get_InnerFECMethod(IBDA_DigitalDemodulator2* This,FECMethod *pFECMethod) {
+    return This->lpVtbl->get_InnerFECMethod(This,pFECMethod);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator2_put_InnerFECRate(IBDA_DigitalDemodulator2* This,BinaryConvolutionCodeRate *pFECRate) {
+    return This->lpVtbl->put_InnerFECRate(This,pFECRate);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator2_get_InnerFECRate(IBDA_DigitalDemodulator2* This,BinaryConvolutionCodeRate *pFECRate) {
+    return This->lpVtbl->get_InnerFECRate(This,pFECRate);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator2_put_OuterFECMethod(IBDA_DigitalDemodulator2* This,FECMethod *pFECMethod) {
+    return This->lpVtbl->put_OuterFECMethod(This,pFECMethod);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator2_get_OuterFECMethod(IBDA_DigitalDemodulator2* This,FECMethod *pFECMethod) {
+    return This->lpVtbl->get_OuterFECMethod(This,pFECMethod);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator2_put_OuterFECRate(IBDA_DigitalDemodulator2* This,BinaryConvolutionCodeRate *pFECRate) {
+    return This->lpVtbl->put_OuterFECRate(This,pFECRate);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator2_get_OuterFECRate(IBDA_DigitalDemodulator2* This,BinaryConvolutionCodeRate *pFECRate) {
+    return This->lpVtbl->get_OuterFECRate(This,pFECRate);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator2_put_SymbolRate(IBDA_DigitalDemodulator2* This,ULONG *pSymbolRate) {
+    return This->lpVtbl->put_SymbolRate(This,pSymbolRate);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator2_get_SymbolRate(IBDA_DigitalDemodulator2* This,ULONG *pSymbolRate) {
+    return This->lpVtbl->get_SymbolRate(This,pSymbolRate);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator2_put_SpectralInversion(IBDA_DigitalDemodulator2* This,SpectralInversion *pSpectralInversion) {
+    return This->lpVtbl->put_SpectralInversion(This,pSpectralInversion);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator2_get_SpectralInversion(IBDA_DigitalDemodulator2* This,SpectralInversion *pSpectralInversion) {
+    return This->lpVtbl->get_SpectralInversion(This,pSpectralInversion);
+}
+/*** IBDA_DigitalDemodulator2 methods ***/
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator2_put_GuardInterval(IBDA_DigitalDemodulator2* This,GuardInterval *pGuardInterval) {
+    return This->lpVtbl->put_GuardInterval(This,pGuardInterval);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator2_get_GuardInterval(IBDA_DigitalDemodulator2* This,GuardInterval *pGuardInterval) {
+    return This->lpVtbl->get_GuardInterval(This,pGuardInterval);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator2_put_TransmissionMode(IBDA_DigitalDemodulator2* This,TransmissionMode *pTransmissionMode) {
+    return This->lpVtbl->put_TransmissionMode(This,pTransmissionMode);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator2_get_TransmissionMode(IBDA_DigitalDemodulator2* This,TransmissionMode *pTransmissionMode) {
+    return This->lpVtbl->get_TransmissionMode(This,pTransmissionMode);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator2_put_RollOff(IBDA_DigitalDemodulator2* This,RollOff *pRollOff) {
+    return This->lpVtbl->put_RollOff(This,pRollOff);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator2_get_RollOff(IBDA_DigitalDemodulator2* This,RollOff *pRollOff) {
+    return This->lpVtbl->get_RollOff(This,pRollOff);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator2_put_Pilot(IBDA_DigitalDemodulator2* This,Pilot *pPilot) {
+    return This->lpVtbl->put_Pilot(This,pPilot);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator2_get_Pilot(IBDA_DigitalDemodulator2* This,Pilot *pPilot) {
+    return This->lpVtbl->get_Pilot(This,pPilot);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_DigitalDemodulator2_put_GuardInterval_Proxy(
+    IBDA_DigitalDemodulator2* This,
+    GuardInterval *pGuardInterval);
+void __RPC_STUB IBDA_DigitalDemodulator2_put_GuardInterval_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DigitalDemodulator2_get_GuardInterval_Proxy(
+    IBDA_DigitalDemodulator2* This,
+    GuardInterval *pGuardInterval);
+void __RPC_STUB IBDA_DigitalDemodulator2_get_GuardInterval_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DigitalDemodulator2_put_TransmissionMode_Proxy(
+    IBDA_DigitalDemodulator2* This,
+    TransmissionMode *pTransmissionMode);
+void __RPC_STUB IBDA_DigitalDemodulator2_put_TransmissionMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DigitalDemodulator2_get_TransmissionMode_Proxy(
+    IBDA_DigitalDemodulator2* This,
+    TransmissionMode *pTransmissionMode);
+void __RPC_STUB IBDA_DigitalDemodulator2_get_TransmissionMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DigitalDemodulator2_put_RollOff_Proxy(
+    IBDA_DigitalDemodulator2* This,
+    RollOff *pRollOff);
+void __RPC_STUB IBDA_DigitalDemodulator2_put_RollOff_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DigitalDemodulator2_get_RollOff_Proxy(
+    IBDA_DigitalDemodulator2* This,
+    RollOff *pRollOff);
+void __RPC_STUB IBDA_DigitalDemodulator2_get_RollOff_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DigitalDemodulator2_put_Pilot_Proxy(
+    IBDA_DigitalDemodulator2* This,
+    Pilot *pPilot);
+void __RPC_STUB IBDA_DigitalDemodulator2_put_Pilot_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DigitalDemodulator2_get_Pilot_Proxy(
+    IBDA_DigitalDemodulator2* This,
+    Pilot *pPilot);
+void __RPC_STUB IBDA_DigitalDemodulator2_get_Pilot_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_DigitalDemodulator2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_DigitalDemodulator3 interface
+ */
+#ifndef __IBDA_DigitalDemodulator3_INTERFACE_DEFINED__
+#define __IBDA_DigitalDemodulator3_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_DigitalDemodulator3, 0x13f19604, 0x7d32, 0x4359, 0x93,0xa2, 0xa0,0x52,0x05,0xd9,0x0a,0xc9);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("13f19604-7d32-4359-93a2-a05205d90ac9")
+IBDA_DigitalDemodulator3 : public IBDA_DigitalDemodulator2
+{
+    virtual HRESULT STDMETHODCALLTYPE put_SignalTimeouts(
+        BDA_SIGNAL_TIMEOUTS *pSignalTimeouts) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SignalTimeouts(
+        BDA_SIGNAL_TIMEOUTS *pSignalTimeouts) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_PLPNumber(
+        ULONG *pPLPNumber) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_PLPNumber(
+        ULONG *pPLPNumber) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_DigitalDemodulator3, 0x13f19604, 0x7d32, 0x4359, 0x93,0xa2, 0xa0,0x52,0x05,0xd9,0x0a,0xc9)
+#endif
+#else
+typedef struct IBDA_DigitalDemodulator3Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_DigitalDemodulator3* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_DigitalDemodulator3* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_DigitalDemodulator3* This);
+
+    /*** IBDA_DigitalDemodulator methods ***/
+    HRESULT (STDMETHODCALLTYPE *put_ModulationType)(
+        IBDA_DigitalDemodulator3* This,
+        ModulationType *pModulationType);
+
+    HRESULT (STDMETHODCALLTYPE *get_ModulationType)(
+        IBDA_DigitalDemodulator3* This,
+        ModulationType *pModulationType);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFECMethod)(
+        IBDA_DigitalDemodulator3* This,
+        FECMethod *pFECMethod);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFECMethod)(
+        IBDA_DigitalDemodulator3* This,
+        FECMethod *pFECMethod);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFECRate)(
+        IBDA_DigitalDemodulator3* This,
+        BinaryConvolutionCodeRate *pFECRate);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFECRate)(
+        IBDA_DigitalDemodulator3* This,
+        BinaryConvolutionCodeRate *pFECRate);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFECMethod)(
+        IBDA_DigitalDemodulator3* This,
+        FECMethod *pFECMethod);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFECMethod)(
+        IBDA_DigitalDemodulator3* This,
+        FECMethod *pFECMethod);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFECRate)(
+        IBDA_DigitalDemodulator3* This,
+        BinaryConvolutionCodeRate *pFECRate);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFECRate)(
+        IBDA_DigitalDemodulator3* This,
+        BinaryConvolutionCodeRate *pFECRate);
+
+    HRESULT (STDMETHODCALLTYPE *put_SymbolRate)(
+        IBDA_DigitalDemodulator3* This,
+        ULONG *pSymbolRate);
+
+    HRESULT (STDMETHODCALLTYPE *get_SymbolRate)(
+        IBDA_DigitalDemodulator3* This,
+        ULONG *pSymbolRate);
+
+    HRESULT (STDMETHODCALLTYPE *put_SpectralInversion)(
+        IBDA_DigitalDemodulator3* This,
+        SpectralInversion *pSpectralInversion);
+
+    HRESULT (STDMETHODCALLTYPE *get_SpectralInversion)(
+        IBDA_DigitalDemodulator3* This,
+        SpectralInversion *pSpectralInversion);
+
+    /*** IBDA_DigitalDemodulator2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *put_GuardInterval)(
+        IBDA_DigitalDemodulator3* This,
+        GuardInterval *pGuardInterval);
+
+    HRESULT (STDMETHODCALLTYPE *get_GuardInterval)(
+        IBDA_DigitalDemodulator3* This,
+        GuardInterval *pGuardInterval);
+
+    HRESULT (STDMETHODCALLTYPE *put_TransmissionMode)(
+        IBDA_DigitalDemodulator3* This,
+        TransmissionMode *pTransmissionMode);
+
+    HRESULT (STDMETHODCALLTYPE *get_TransmissionMode)(
+        IBDA_DigitalDemodulator3* This,
+        TransmissionMode *pTransmissionMode);
+
+    HRESULT (STDMETHODCALLTYPE *put_RollOff)(
+        IBDA_DigitalDemodulator3* This,
+        RollOff *pRollOff);
+
+    HRESULT (STDMETHODCALLTYPE *get_RollOff)(
+        IBDA_DigitalDemodulator3* This,
+        RollOff *pRollOff);
+
+    HRESULT (STDMETHODCALLTYPE *put_Pilot)(
+        IBDA_DigitalDemodulator3* This,
+        Pilot *pPilot);
+
+    HRESULT (STDMETHODCALLTYPE *get_Pilot)(
+        IBDA_DigitalDemodulator3* This,
+        Pilot *pPilot);
+
+    /*** IBDA_DigitalDemodulator3 methods ***/
+    HRESULT (STDMETHODCALLTYPE *put_SignalTimeouts)(
+        IBDA_DigitalDemodulator3* This,
+        BDA_SIGNAL_TIMEOUTS *pSignalTimeouts);
+
+    HRESULT (STDMETHODCALLTYPE *get_SignalTimeouts)(
+        IBDA_DigitalDemodulator3* This,
+        BDA_SIGNAL_TIMEOUTS *pSignalTimeouts);
+
+    HRESULT (STDMETHODCALLTYPE *put_PLPNumber)(
+        IBDA_DigitalDemodulator3* This,
+        ULONG *pPLPNumber);
+
+    HRESULT (STDMETHODCALLTYPE *get_PLPNumber)(
+        IBDA_DigitalDemodulator3* This,
+        ULONG *pPLPNumber);
+
+    END_INTERFACE
+} IBDA_DigitalDemodulator3Vtbl;
+interface IBDA_DigitalDemodulator3 {
+    CONST_VTBL IBDA_DigitalDemodulator3Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_DigitalDemodulator3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_DigitalDemodulator3_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_DigitalDemodulator3_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_DigitalDemodulator methods ***/
+#define IBDA_DigitalDemodulator3_put_ModulationType(This,pModulationType) (This)->lpVtbl->put_ModulationType(This,pModulationType)
+#define IBDA_DigitalDemodulator3_get_ModulationType(This,pModulationType) (This)->lpVtbl->get_ModulationType(This,pModulationType)
+#define IBDA_DigitalDemodulator3_put_InnerFECMethod(This,pFECMethod) (This)->lpVtbl->put_InnerFECMethod(This,pFECMethod)
+#define IBDA_DigitalDemodulator3_get_InnerFECMethod(This,pFECMethod) (This)->lpVtbl->get_InnerFECMethod(This,pFECMethod)
+#define IBDA_DigitalDemodulator3_put_InnerFECRate(This,pFECRate) (This)->lpVtbl->put_InnerFECRate(This,pFECRate)
+#define IBDA_DigitalDemodulator3_get_InnerFECRate(This,pFECRate) (This)->lpVtbl->get_InnerFECRate(This,pFECRate)
+#define IBDA_DigitalDemodulator3_put_OuterFECMethod(This,pFECMethod) (This)->lpVtbl->put_OuterFECMethod(This,pFECMethod)
+#define IBDA_DigitalDemodulator3_get_OuterFECMethod(This,pFECMethod) (This)->lpVtbl->get_OuterFECMethod(This,pFECMethod)
+#define IBDA_DigitalDemodulator3_put_OuterFECRate(This,pFECRate) (This)->lpVtbl->put_OuterFECRate(This,pFECRate)
+#define IBDA_DigitalDemodulator3_get_OuterFECRate(This,pFECRate) (This)->lpVtbl->get_OuterFECRate(This,pFECRate)
+#define IBDA_DigitalDemodulator3_put_SymbolRate(This,pSymbolRate) (This)->lpVtbl->put_SymbolRate(This,pSymbolRate)
+#define IBDA_DigitalDemodulator3_get_SymbolRate(This,pSymbolRate) (This)->lpVtbl->get_SymbolRate(This,pSymbolRate)
+#define IBDA_DigitalDemodulator3_put_SpectralInversion(This,pSpectralInversion) (This)->lpVtbl->put_SpectralInversion(This,pSpectralInversion)
+#define IBDA_DigitalDemodulator3_get_SpectralInversion(This,pSpectralInversion) (This)->lpVtbl->get_SpectralInversion(This,pSpectralInversion)
+/*** IBDA_DigitalDemodulator2 methods ***/
+#define IBDA_DigitalDemodulator3_put_GuardInterval(This,pGuardInterval) (This)->lpVtbl->put_GuardInterval(This,pGuardInterval)
+#define IBDA_DigitalDemodulator3_get_GuardInterval(This,pGuardInterval) (This)->lpVtbl->get_GuardInterval(This,pGuardInterval)
+#define IBDA_DigitalDemodulator3_put_TransmissionMode(This,pTransmissionMode) (This)->lpVtbl->put_TransmissionMode(This,pTransmissionMode)
+#define IBDA_DigitalDemodulator3_get_TransmissionMode(This,pTransmissionMode) (This)->lpVtbl->get_TransmissionMode(This,pTransmissionMode)
+#define IBDA_DigitalDemodulator3_put_RollOff(This,pRollOff) (This)->lpVtbl->put_RollOff(This,pRollOff)
+#define IBDA_DigitalDemodulator3_get_RollOff(This,pRollOff) (This)->lpVtbl->get_RollOff(This,pRollOff)
+#define IBDA_DigitalDemodulator3_put_Pilot(This,pPilot) (This)->lpVtbl->put_Pilot(This,pPilot)
+#define IBDA_DigitalDemodulator3_get_Pilot(This,pPilot) (This)->lpVtbl->get_Pilot(This,pPilot)
+/*** IBDA_DigitalDemodulator3 methods ***/
+#define IBDA_DigitalDemodulator3_put_SignalTimeouts(This,pSignalTimeouts) (This)->lpVtbl->put_SignalTimeouts(This,pSignalTimeouts)
+#define IBDA_DigitalDemodulator3_get_SignalTimeouts(This,pSignalTimeouts) (This)->lpVtbl->get_SignalTimeouts(This,pSignalTimeouts)
+#define IBDA_DigitalDemodulator3_put_PLPNumber(This,pPLPNumber) (This)->lpVtbl->put_PLPNumber(This,pPLPNumber)
+#define IBDA_DigitalDemodulator3_get_PLPNumber(This,pPLPNumber) (This)->lpVtbl->get_PLPNumber(This,pPLPNumber)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator3_QueryInterface(IBDA_DigitalDemodulator3* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_DigitalDemodulator3_AddRef(IBDA_DigitalDemodulator3* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_DigitalDemodulator3_Release(IBDA_DigitalDemodulator3* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_DigitalDemodulator methods ***/
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator3_put_ModulationType(IBDA_DigitalDemodulator3* This,ModulationType *pModulationType) {
+    return This->lpVtbl->put_ModulationType(This,pModulationType);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator3_get_ModulationType(IBDA_DigitalDemodulator3* This,ModulationType *pModulationType) {
+    return This->lpVtbl->get_ModulationType(This,pModulationType);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator3_put_InnerFECMethod(IBDA_DigitalDemodulator3* This,FECMethod *pFECMethod) {
+    return This->lpVtbl->put_InnerFECMethod(This,pFECMethod);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator3_get_InnerFECMethod(IBDA_DigitalDemodulator3* This,FECMethod *pFECMethod) {
+    return This->lpVtbl->get_InnerFECMethod(This,pFECMethod);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator3_put_InnerFECRate(IBDA_DigitalDemodulator3* This,BinaryConvolutionCodeRate *pFECRate) {
+    return This->lpVtbl->put_InnerFECRate(This,pFECRate);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator3_get_InnerFECRate(IBDA_DigitalDemodulator3* This,BinaryConvolutionCodeRate *pFECRate) {
+    return This->lpVtbl->get_InnerFECRate(This,pFECRate);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator3_put_OuterFECMethod(IBDA_DigitalDemodulator3* This,FECMethod *pFECMethod) {
+    return This->lpVtbl->put_OuterFECMethod(This,pFECMethod);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator3_get_OuterFECMethod(IBDA_DigitalDemodulator3* This,FECMethod *pFECMethod) {
+    return This->lpVtbl->get_OuterFECMethod(This,pFECMethod);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator3_put_OuterFECRate(IBDA_DigitalDemodulator3* This,BinaryConvolutionCodeRate *pFECRate) {
+    return This->lpVtbl->put_OuterFECRate(This,pFECRate);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator3_get_OuterFECRate(IBDA_DigitalDemodulator3* This,BinaryConvolutionCodeRate *pFECRate) {
+    return This->lpVtbl->get_OuterFECRate(This,pFECRate);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator3_put_SymbolRate(IBDA_DigitalDemodulator3* This,ULONG *pSymbolRate) {
+    return This->lpVtbl->put_SymbolRate(This,pSymbolRate);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator3_get_SymbolRate(IBDA_DigitalDemodulator3* This,ULONG *pSymbolRate) {
+    return This->lpVtbl->get_SymbolRate(This,pSymbolRate);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator3_put_SpectralInversion(IBDA_DigitalDemodulator3* This,SpectralInversion *pSpectralInversion) {
+    return This->lpVtbl->put_SpectralInversion(This,pSpectralInversion);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator3_get_SpectralInversion(IBDA_DigitalDemodulator3* This,SpectralInversion *pSpectralInversion) {
+    return This->lpVtbl->get_SpectralInversion(This,pSpectralInversion);
+}
+/*** IBDA_DigitalDemodulator2 methods ***/
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator3_put_GuardInterval(IBDA_DigitalDemodulator3* This,GuardInterval *pGuardInterval) {
+    return This->lpVtbl->put_GuardInterval(This,pGuardInterval);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator3_get_GuardInterval(IBDA_DigitalDemodulator3* This,GuardInterval *pGuardInterval) {
+    return This->lpVtbl->get_GuardInterval(This,pGuardInterval);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator3_put_TransmissionMode(IBDA_DigitalDemodulator3* This,TransmissionMode *pTransmissionMode) {
+    return This->lpVtbl->put_TransmissionMode(This,pTransmissionMode);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator3_get_TransmissionMode(IBDA_DigitalDemodulator3* This,TransmissionMode *pTransmissionMode) {
+    return This->lpVtbl->get_TransmissionMode(This,pTransmissionMode);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator3_put_RollOff(IBDA_DigitalDemodulator3* This,RollOff *pRollOff) {
+    return This->lpVtbl->put_RollOff(This,pRollOff);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator3_get_RollOff(IBDA_DigitalDemodulator3* This,RollOff *pRollOff) {
+    return This->lpVtbl->get_RollOff(This,pRollOff);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator3_put_Pilot(IBDA_DigitalDemodulator3* This,Pilot *pPilot) {
+    return This->lpVtbl->put_Pilot(This,pPilot);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator3_get_Pilot(IBDA_DigitalDemodulator3* This,Pilot *pPilot) {
+    return This->lpVtbl->get_Pilot(This,pPilot);
+}
+/*** IBDA_DigitalDemodulator3 methods ***/
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator3_put_SignalTimeouts(IBDA_DigitalDemodulator3* This,BDA_SIGNAL_TIMEOUTS *pSignalTimeouts) {
+    return This->lpVtbl->put_SignalTimeouts(This,pSignalTimeouts);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator3_get_SignalTimeouts(IBDA_DigitalDemodulator3* This,BDA_SIGNAL_TIMEOUTS *pSignalTimeouts) {
+    return This->lpVtbl->get_SignalTimeouts(This,pSignalTimeouts);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator3_put_PLPNumber(IBDA_DigitalDemodulator3* This,ULONG *pPLPNumber) {
+    return This->lpVtbl->put_PLPNumber(This,pPLPNumber);
+}
+static FORCEINLINE HRESULT IBDA_DigitalDemodulator3_get_PLPNumber(IBDA_DigitalDemodulator3* This,ULONG *pPLPNumber) {
+    return This->lpVtbl->get_PLPNumber(This,pPLPNumber);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_DigitalDemodulator3_put_SignalTimeouts_Proxy(
+    IBDA_DigitalDemodulator3* This,
+    BDA_SIGNAL_TIMEOUTS *pSignalTimeouts);
+void __RPC_STUB IBDA_DigitalDemodulator3_put_SignalTimeouts_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DigitalDemodulator3_get_SignalTimeouts_Proxy(
+    IBDA_DigitalDemodulator3* This,
+    BDA_SIGNAL_TIMEOUTS *pSignalTimeouts);
+void __RPC_STUB IBDA_DigitalDemodulator3_get_SignalTimeouts_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DigitalDemodulator3_put_PLPNumber_Proxy(
+    IBDA_DigitalDemodulator3* This,
+    ULONG *pPLPNumber);
+void __RPC_STUB IBDA_DigitalDemodulator3_put_PLPNumber_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DigitalDemodulator3_get_PLPNumber_Proxy(
+    IBDA_DigitalDemodulator3* This,
+    ULONG *pPLPNumber);
+void __RPC_STUB IBDA_DigitalDemodulator3_get_PLPNumber_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_DigitalDemodulator3_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ICCSubStreamFiltering interface
+ */
+#ifndef __ICCSubStreamFiltering_INTERFACE_DEFINED__
+#define __ICCSubStreamFiltering_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ICCSubStreamFiltering, 0x4b2bd7ea, 0x8347, 0x467b, 0x8d,0xbf, 0x62,0xf7,0x84,0x92,0x9c,0xc3);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("4b2bd7ea-8347-467b-8dbf-62f784929cc3")
+ICCSubStreamFiltering : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE get_SubstreamTypes(
+        LONG *pTypes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_SubstreamTypes(
+        LONG Types) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ICCSubStreamFiltering, 0x4b2bd7ea, 0x8347, 0x467b, 0x8d,0xbf, 0x62,0xf7,0x84,0x92,0x9c,0xc3)
+#endif
+#else
+typedef struct ICCSubStreamFilteringVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ICCSubStreamFiltering* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ICCSubStreamFiltering* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ICCSubStreamFiltering* This);
+
+    /*** ICCSubStreamFiltering methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_SubstreamTypes)(
+        ICCSubStreamFiltering* This,
+        LONG *pTypes);
+
+    HRESULT (STDMETHODCALLTYPE *put_SubstreamTypes)(
+        ICCSubStreamFiltering* This,
+        LONG Types);
+
+    END_INTERFACE
+} ICCSubStreamFilteringVtbl;
+interface ICCSubStreamFiltering {
+    CONST_VTBL ICCSubStreamFilteringVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ICCSubStreamFiltering_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ICCSubStreamFiltering_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ICCSubStreamFiltering_Release(This) (This)->lpVtbl->Release(This)
+/*** ICCSubStreamFiltering methods ***/
+#define ICCSubStreamFiltering_get_SubstreamTypes(This,pTypes) (This)->lpVtbl->get_SubstreamTypes(This,pTypes)
+#define ICCSubStreamFiltering_put_SubstreamTypes(This,Types) (This)->lpVtbl->put_SubstreamTypes(This,Types)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ICCSubStreamFiltering_QueryInterface(ICCSubStreamFiltering* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ICCSubStreamFiltering_AddRef(ICCSubStreamFiltering* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ICCSubStreamFiltering_Release(ICCSubStreamFiltering* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ICCSubStreamFiltering methods ***/
+static FORCEINLINE HRESULT ICCSubStreamFiltering_get_SubstreamTypes(ICCSubStreamFiltering* This,LONG *pTypes) {
+    return This->lpVtbl->get_SubstreamTypes(This,pTypes);
+}
+static FORCEINLINE HRESULT ICCSubStreamFiltering_put_SubstreamTypes(ICCSubStreamFiltering* This,LONG Types) {
+    return This->lpVtbl->put_SubstreamTypes(This,Types);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ICCSubStreamFiltering_get_SubstreamTypes_Proxy(
+    ICCSubStreamFiltering* This,
+    LONG *pTypes);
+void __RPC_STUB ICCSubStreamFiltering_get_SubstreamTypes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICCSubStreamFiltering_put_SubstreamTypes_Proxy(
+    ICCSubStreamFiltering* This,
+    LONG Types);
+void __RPC_STUB ICCSubStreamFiltering_put_SubstreamTypes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ICCSubStreamFiltering_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_IPSinkControl interface
+ */
+#ifndef __IBDA_IPSinkControl_INTERFACE_DEFINED__
+#define __IBDA_IPSinkControl_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_IPSinkControl, 0x3f4dc8e2, 0x4050, 0x11d3, 0x8f,0x4b, 0x00,0xc0,0x4f,0x79,0x71,0xe2);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("3f4dc8e2-4050-11d3-8f4b-00c04f7971e2")
+IBDA_IPSinkControl : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetMulticastList(
+        ULONG *pulcbSize,
+        BYTE **pbBuffer) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAdapterIPAddress(
+        ULONG *pulcbSize,
+        BYTE **pbBuffer) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_IPSinkControl, 0x3f4dc8e2, 0x4050, 0x11d3, 0x8f,0x4b, 0x00,0xc0,0x4f,0x79,0x71,0xe2)
+#endif
+#else
+typedef struct IBDA_IPSinkControlVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_IPSinkControl* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_IPSinkControl* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_IPSinkControl* This);
+
+    /*** IBDA_IPSinkControl methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetMulticastList)(
+        IBDA_IPSinkControl* This,
+        ULONG *pulcbSize,
+        BYTE **pbBuffer);
+
+    HRESULT (STDMETHODCALLTYPE *GetAdapterIPAddress)(
+        IBDA_IPSinkControl* This,
+        ULONG *pulcbSize,
+        BYTE **pbBuffer);
+
+    END_INTERFACE
+} IBDA_IPSinkControlVtbl;
+interface IBDA_IPSinkControl {
+    CONST_VTBL IBDA_IPSinkControlVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_IPSinkControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_IPSinkControl_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_IPSinkControl_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_IPSinkControl methods ***/
+#define IBDA_IPSinkControl_GetMulticastList(This,pulcbSize,pbBuffer) (This)->lpVtbl->GetMulticastList(This,pulcbSize,pbBuffer)
+#define IBDA_IPSinkControl_GetAdapterIPAddress(This,pulcbSize,pbBuffer) (This)->lpVtbl->GetAdapterIPAddress(This,pulcbSize,pbBuffer)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_IPSinkControl_QueryInterface(IBDA_IPSinkControl* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_IPSinkControl_AddRef(IBDA_IPSinkControl* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_IPSinkControl_Release(IBDA_IPSinkControl* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_IPSinkControl methods ***/
+static FORCEINLINE HRESULT IBDA_IPSinkControl_GetMulticastList(IBDA_IPSinkControl* This,ULONG *pulcbSize,BYTE **pbBuffer) {
+    return This->lpVtbl->GetMulticastList(This,pulcbSize,pbBuffer);
+}
+static FORCEINLINE HRESULT IBDA_IPSinkControl_GetAdapterIPAddress(IBDA_IPSinkControl* This,ULONG *pulcbSize,BYTE **pbBuffer) {
+    return This->lpVtbl->GetAdapterIPAddress(This,pulcbSize,pbBuffer);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_IPSinkControl_GetMulticastList_Proxy(
+    IBDA_IPSinkControl* This,
+    ULONG *pulcbSize,
+    BYTE **pbBuffer);
+void __RPC_STUB IBDA_IPSinkControl_GetMulticastList_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_IPSinkControl_GetAdapterIPAddress_Proxy(
+    IBDA_IPSinkControl* This,
+    ULONG *pulcbSize,
+    BYTE **pbBuffer);
+void __RPC_STUB IBDA_IPSinkControl_GetAdapterIPAddress_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_IPSinkControl_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_IPSinkInfo interface
+ */
+#ifndef __IBDA_IPSinkInfo_INTERFACE_DEFINED__
+#define __IBDA_IPSinkInfo_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_IPSinkInfo, 0xa750108f, 0x492e, 0x4d51, 0x95,0xf7, 0x64,0x9b,0x23,0xff,0x7a,0xd7);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("a750108f-492e-4d51-95f7-649b23ff7ad7")
+IBDA_IPSinkInfo : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE get_MulticastList(
+        ULONG *pulcbAddresses,
+        BYTE **ppbAddressList) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_AdapterIPAddress(
+        BSTR *pbstrBuffer) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_AdapterDescription(
+        BSTR *pbstrBuffer) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_IPSinkInfo, 0xa750108f, 0x492e, 0x4d51, 0x95,0xf7, 0x64,0x9b,0x23,0xff,0x7a,0xd7)
+#endif
+#else
+typedef struct IBDA_IPSinkInfoVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_IPSinkInfo* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_IPSinkInfo* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_IPSinkInfo* This);
+
+    /*** IBDA_IPSinkInfo methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_MulticastList)(
+        IBDA_IPSinkInfo* This,
+        ULONG *pulcbAddresses,
+        BYTE **ppbAddressList);
+
+    HRESULT (STDMETHODCALLTYPE *get_AdapterIPAddress)(
+        IBDA_IPSinkInfo* This,
+        BSTR *pbstrBuffer);
+
+    HRESULT (STDMETHODCALLTYPE *get_AdapterDescription)(
+        IBDA_IPSinkInfo* This,
+        BSTR *pbstrBuffer);
+
+    END_INTERFACE
+} IBDA_IPSinkInfoVtbl;
+interface IBDA_IPSinkInfo {
+    CONST_VTBL IBDA_IPSinkInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_IPSinkInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_IPSinkInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_IPSinkInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_IPSinkInfo methods ***/
+#define IBDA_IPSinkInfo_get_MulticastList(This,pulcbAddresses,ppbAddressList) (This)->lpVtbl->get_MulticastList(This,pulcbAddresses,ppbAddressList)
+#define IBDA_IPSinkInfo_get_AdapterIPAddress(This,pbstrBuffer) (This)->lpVtbl->get_AdapterIPAddress(This,pbstrBuffer)
+#define IBDA_IPSinkInfo_get_AdapterDescription(This,pbstrBuffer) (This)->lpVtbl->get_AdapterDescription(This,pbstrBuffer)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_IPSinkInfo_QueryInterface(IBDA_IPSinkInfo* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_IPSinkInfo_AddRef(IBDA_IPSinkInfo* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_IPSinkInfo_Release(IBDA_IPSinkInfo* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_IPSinkInfo methods ***/
+static FORCEINLINE HRESULT IBDA_IPSinkInfo_get_MulticastList(IBDA_IPSinkInfo* This,ULONG *pulcbAddresses,BYTE **ppbAddressList) {
+    return This->lpVtbl->get_MulticastList(This,pulcbAddresses,ppbAddressList);
+}
+static FORCEINLINE HRESULT IBDA_IPSinkInfo_get_AdapterIPAddress(IBDA_IPSinkInfo* This,BSTR *pbstrBuffer) {
+    return This->lpVtbl->get_AdapterIPAddress(This,pbstrBuffer);
+}
+static FORCEINLINE HRESULT IBDA_IPSinkInfo_get_AdapterDescription(IBDA_IPSinkInfo* This,BSTR *pbstrBuffer) {
+    return This->lpVtbl->get_AdapterDescription(This,pbstrBuffer);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_IPSinkInfo_get_MulticastList_Proxy(
+    IBDA_IPSinkInfo* This,
+    ULONG *pulcbAddresses,
+    BYTE **ppbAddressList);
+void __RPC_STUB IBDA_IPSinkInfo_get_MulticastList_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_IPSinkInfo_get_AdapterIPAddress_Proxy(
+    IBDA_IPSinkInfo* This,
+    BSTR *pbstrBuffer);
+void __RPC_STUB IBDA_IPSinkInfo_get_AdapterIPAddress_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_IPSinkInfo_get_AdapterDescription_Proxy(
+    IBDA_IPSinkInfo* This,
+    BSTR *pbstrBuffer);
+void __RPC_STUB IBDA_IPSinkInfo_get_AdapterDescription_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_IPSinkInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumPIDMap interface
+ */
+#ifndef __IEnumPIDMap_INTERFACE_DEFINED__
+#define __IEnumPIDMap_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IEnumPIDMap, 0xafb6c2a2, 0x2c41, 0x11d3, 0x8a,0x60, 0x00,0x00,0xf8,0x1e,0x0e,0x4a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("afb6c2a2-2c41-11d3-8a60-0000f81e0e4a")
+IEnumPIDMap : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Next(
+        ULONG cRequest,
+        PID_MAP *pPIDMap,
+        ULONG *pcReceived) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Skip(
+        ULONG cRecords) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IEnumPIDMap **ppIEnumPIDMap) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IEnumPIDMap, 0xafb6c2a2, 0x2c41, 0x11d3, 0x8a,0x60, 0x00,0x00,0xf8,0x1e,0x0e,0x4a)
+#endif
+#else
+typedef struct IEnumPIDMapVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IEnumPIDMap* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IEnumPIDMap* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IEnumPIDMap* This);
+
+    /*** IEnumPIDMap methods ***/
+    HRESULT (STDMETHODCALLTYPE *Next)(
+        IEnumPIDMap* This,
+        ULONG cRequest,
+        PID_MAP *pPIDMap,
+        ULONG *pcReceived);
+
+    HRESULT (STDMETHODCALLTYPE *Skip)(
+        IEnumPIDMap* This,
+        ULONG cRecords);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        IEnumPIDMap* This);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IEnumPIDMap* This,
+        IEnumPIDMap **ppIEnumPIDMap);
+
+    END_INTERFACE
+} IEnumPIDMapVtbl;
+interface IEnumPIDMap {
+    CONST_VTBL IEnumPIDMapVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IEnumPIDMap_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumPIDMap_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumPIDMap_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumPIDMap methods ***/
+#define IEnumPIDMap_Next(This,cRequest,pPIDMap,pcReceived) (This)->lpVtbl->Next(This,cRequest,pPIDMap,pcReceived)
+#define IEnumPIDMap_Skip(This,cRecords) (This)->lpVtbl->Skip(This,cRecords)
+#define IEnumPIDMap_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumPIDMap_Clone(This,ppIEnumPIDMap) (This)->lpVtbl->Clone(This,ppIEnumPIDMap)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IEnumPIDMap_QueryInterface(IEnumPIDMap* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IEnumPIDMap_AddRef(IEnumPIDMap* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IEnumPIDMap_Release(IEnumPIDMap* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IEnumPIDMap methods ***/
+static FORCEINLINE HRESULT IEnumPIDMap_Next(IEnumPIDMap* This,ULONG cRequest,PID_MAP *pPIDMap,ULONG *pcReceived) {
+    return This->lpVtbl->Next(This,cRequest,pPIDMap,pcReceived);
+}
+static FORCEINLINE HRESULT IEnumPIDMap_Skip(IEnumPIDMap* This,ULONG cRecords) {
+    return This->lpVtbl->Skip(This,cRecords);
+}
+static FORCEINLINE HRESULT IEnumPIDMap_Reset(IEnumPIDMap* This) {
+    return This->lpVtbl->Reset(This);
+}
+static FORCEINLINE HRESULT IEnumPIDMap_Clone(IEnumPIDMap* This,IEnumPIDMap **ppIEnumPIDMap) {
+    return This->lpVtbl->Clone(This,ppIEnumPIDMap);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumPIDMap_Next_Proxy(
+    IEnumPIDMap* This,
+    ULONG cRequest,
+    PID_MAP *pPIDMap,
+    ULONG *pcReceived);
+void __RPC_STUB IEnumPIDMap_Next_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumPIDMap_Skip_Proxy(
+    IEnumPIDMap* This,
+    ULONG cRecords);
+void __RPC_STUB IEnumPIDMap_Skip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumPIDMap_Reset_Proxy(
+    IEnumPIDMap* This);
+void __RPC_STUB IEnumPIDMap_Reset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumPIDMap_Clone_Proxy(
+    IEnumPIDMap* This,
+    IEnumPIDMap **ppIEnumPIDMap);
+void __RPC_STUB IEnumPIDMap_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IEnumPIDMap_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMPEG2PIDMap interface
+ */
+#ifndef __IMPEG2PIDMap_INTERFACE_DEFINED__
+#define __IMPEG2PIDMap_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IMPEG2PIDMap, 0xafb6c2a1, 0x2c41, 0x11d3, 0x8a,0x60, 0x00,0x00,0xf8,0x1e,0x0e,0x4a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("afb6c2a1-2c41-11d3-8a60-0000f81e0e4a")
+IMPEG2PIDMap : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE MapPID(
+        ULONG culPID,
+        ULONG *pulPID,
+        MEDIA_SAMPLE_CONTENT MediaSampleContent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnmapPID(
+        ULONG culPID,
+        ULONG *pulPID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumPIDMap(
+        IEnumPIDMap **pIEnumPIDMap) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMPEG2PIDMap, 0xafb6c2a1, 0x2c41, 0x11d3, 0x8a,0x60, 0x00,0x00,0xf8,0x1e,0x0e,0x4a)
+#endif
+#else
+typedef struct IMPEG2PIDMapVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMPEG2PIDMap* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMPEG2PIDMap* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMPEG2PIDMap* This);
+
+    /*** IMPEG2PIDMap methods ***/
+    HRESULT (STDMETHODCALLTYPE *MapPID)(
+        IMPEG2PIDMap* This,
+        ULONG culPID,
+        ULONG *pulPID,
+        MEDIA_SAMPLE_CONTENT MediaSampleContent);
+
+    HRESULT (STDMETHODCALLTYPE *UnmapPID)(
+        IMPEG2PIDMap* This,
+        ULONG culPID,
+        ULONG *pulPID);
+
+    HRESULT (STDMETHODCALLTYPE *EnumPIDMap)(
+        IMPEG2PIDMap* This,
+        IEnumPIDMap **pIEnumPIDMap);
+
+    END_INTERFACE
+} IMPEG2PIDMapVtbl;
+interface IMPEG2PIDMap {
+    CONST_VTBL IMPEG2PIDMapVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMPEG2PIDMap_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMPEG2PIDMap_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMPEG2PIDMap_Release(This) (This)->lpVtbl->Release(This)
+/*** IMPEG2PIDMap methods ***/
+#define IMPEG2PIDMap_MapPID(This,culPID,pulPID,MediaSampleContent) (This)->lpVtbl->MapPID(This,culPID,pulPID,MediaSampleContent)
+#define IMPEG2PIDMap_UnmapPID(This,culPID,pulPID) (This)->lpVtbl->UnmapPID(This,culPID,pulPID)
+#define IMPEG2PIDMap_EnumPIDMap(This,pIEnumPIDMap) (This)->lpVtbl->EnumPIDMap(This,pIEnumPIDMap)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IMPEG2PIDMap_QueryInterface(IMPEG2PIDMap* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IMPEG2PIDMap_AddRef(IMPEG2PIDMap* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IMPEG2PIDMap_Release(IMPEG2PIDMap* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IMPEG2PIDMap methods ***/
+static FORCEINLINE HRESULT IMPEG2PIDMap_MapPID(IMPEG2PIDMap* This,ULONG culPID,ULONG *pulPID,MEDIA_SAMPLE_CONTENT MediaSampleContent) {
+    return This->lpVtbl->MapPID(This,culPID,pulPID,MediaSampleContent);
+}
+static FORCEINLINE HRESULT IMPEG2PIDMap_UnmapPID(IMPEG2PIDMap* This,ULONG culPID,ULONG *pulPID) {
+    return This->lpVtbl->UnmapPID(This,culPID,pulPID);
+}
+static FORCEINLINE HRESULT IMPEG2PIDMap_EnumPIDMap(IMPEG2PIDMap* This,IEnumPIDMap **pIEnumPIDMap) {
+    return This->lpVtbl->EnumPIDMap(This,pIEnumPIDMap);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IMPEG2PIDMap_MapPID_Proxy(
+    IMPEG2PIDMap* This,
+    ULONG culPID,
+    ULONG *pulPID,
+    MEDIA_SAMPLE_CONTENT MediaSampleContent);
+void __RPC_STUB IMPEG2PIDMap_MapPID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMPEG2PIDMap_UnmapPID_Proxy(
+    IMPEG2PIDMap* This,
+    ULONG culPID,
+    ULONG *pulPID);
+void __RPC_STUB IMPEG2PIDMap_UnmapPID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMPEG2PIDMap_EnumPIDMap_Proxy(
+    IMPEG2PIDMap* This,
+    IEnumPIDMap **pIEnumPIDMap);
+void __RPC_STUB IMPEG2PIDMap_EnumPIDMap_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IMPEG2PIDMap_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IFrequencyMap interface
+ */
+#ifndef __IFrequencyMap_INTERFACE_DEFINED__
+#define __IFrequencyMap_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IFrequencyMap, 0x06fb45c1, 0x693c, 0x4ea7, 0xb7,0x9f, 0x7a,0x6a,0x54,0xd8,0xde,0xf2);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("06fb45c1-693c-4ea7-b79f-7a6a54d8def2")
+IFrequencyMap : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE get_FrequencyMapping(
+        ULONG *ulCount,
+        ULONG **ppulList) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_FrequencyMapping(
+        ULONG ulCount,
+        ULONG pList[]) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_CountryCode(
+        ULONG *pulCountryCode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_CountryCode(
+        ULONG ulCountryCode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_DefaultFrequencyMapping(
+        ULONG ulCountryCode,
+        ULONG *pulCount,
+        ULONG **ppulList) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_CountryCodeList(
+        ULONG *pulCount,
+        ULONG **ppulList) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IFrequencyMap, 0x06fb45c1, 0x693c, 0x4ea7, 0xb7,0x9f, 0x7a,0x6a,0x54,0xd8,0xde,0xf2)
+#endif
+#else
+typedef struct IFrequencyMapVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IFrequencyMap* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IFrequencyMap* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IFrequencyMap* This);
+
+    /*** IFrequencyMap methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_FrequencyMapping)(
+        IFrequencyMap* This,
+        ULONG *ulCount,
+        ULONG **ppulList);
+
+    HRESULT (STDMETHODCALLTYPE *put_FrequencyMapping)(
+        IFrequencyMap* This,
+        ULONG ulCount,
+        ULONG pList[]);
+
+    HRESULT (STDMETHODCALLTYPE *get_CountryCode)(
+        IFrequencyMap* This,
+        ULONG *pulCountryCode);
+
+    HRESULT (STDMETHODCALLTYPE *put_CountryCode)(
+        IFrequencyMap* This,
+        ULONG ulCountryCode);
+
+    HRESULT (STDMETHODCALLTYPE *get_DefaultFrequencyMapping)(
+        IFrequencyMap* This,
+        ULONG ulCountryCode,
+        ULONG *pulCount,
+        ULONG **ppulList);
+
+    HRESULT (STDMETHODCALLTYPE *get_CountryCodeList)(
+        IFrequencyMap* This,
+        ULONG *pulCount,
+        ULONG **ppulList);
+
+    END_INTERFACE
+} IFrequencyMapVtbl;
+interface IFrequencyMap {
+    CONST_VTBL IFrequencyMapVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IFrequencyMap_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IFrequencyMap_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IFrequencyMap_Release(This) (This)->lpVtbl->Release(This)
+/*** IFrequencyMap methods ***/
+#define IFrequencyMap_get_FrequencyMapping(This,ulCount,ppulList) (This)->lpVtbl->get_FrequencyMapping(This,ulCount,ppulList)
+#define IFrequencyMap_put_FrequencyMapping(This,ulCount,pList) (This)->lpVtbl->put_FrequencyMapping(This,ulCount,pList)
+#define IFrequencyMap_get_CountryCode(This,pulCountryCode) (This)->lpVtbl->get_CountryCode(This,pulCountryCode)
+#define IFrequencyMap_put_CountryCode(This,ulCountryCode) (This)->lpVtbl->put_CountryCode(This,ulCountryCode)
+#define IFrequencyMap_get_DefaultFrequencyMapping(This,ulCountryCode,pulCount,ppulList) (This)->lpVtbl->get_DefaultFrequencyMapping(This,ulCountryCode,pulCount,ppulList)
+#define IFrequencyMap_get_CountryCodeList(This,pulCount,ppulList) (This)->lpVtbl->get_CountryCodeList(This,pulCount,ppulList)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IFrequencyMap_QueryInterface(IFrequencyMap* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IFrequencyMap_AddRef(IFrequencyMap* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IFrequencyMap_Release(IFrequencyMap* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IFrequencyMap methods ***/
+static FORCEINLINE HRESULT IFrequencyMap_get_FrequencyMapping(IFrequencyMap* This,ULONG *ulCount,ULONG **ppulList) {
+    return This->lpVtbl->get_FrequencyMapping(This,ulCount,ppulList);
+}
+static FORCEINLINE HRESULT IFrequencyMap_put_FrequencyMapping(IFrequencyMap* This,ULONG ulCount,ULONG pList[]) {
+    return This->lpVtbl->put_FrequencyMapping(This,ulCount,pList);
+}
+static FORCEINLINE HRESULT IFrequencyMap_get_CountryCode(IFrequencyMap* This,ULONG *pulCountryCode) {
+    return This->lpVtbl->get_CountryCode(This,pulCountryCode);
+}
+static FORCEINLINE HRESULT IFrequencyMap_put_CountryCode(IFrequencyMap* This,ULONG ulCountryCode) {
+    return This->lpVtbl->put_CountryCode(This,ulCountryCode);
+}
+static FORCEINLINE HRESULT IFrequencyMap_get_DefaultFrequencyMapping(IFrequencyMap* This,ULONG ulCountryCode,ULONG *pulCount,ULONG **ppulList) {
+    return This->lpVtbl->get_DefaultFrequencyMapping(This,ulCountryCode,pulCount,ppulList);
+}
+static FORCEINLINE HRESULT IFrequencyMap_get_CountryCodeList(IFrequencyMap* This,ULONG *pulCount,ULONG **ppulList) {
+    return This->lpVtbl->get_CountryCodeList(This,pulCount,ppulList);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IFrequencyMap_get_FrequencyMapping_Proxy(
+    IFrequencyMap* This,
+    ULONG *ulCount,
+    ULONG **ppulList);
+void __RPC_STUB IFrequencyMap_get_FrequencyMapping_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFrequencyMap_put_FrequencyMapping_Proxy(
+    IFrequencyMap* This,
+    ULONG ulCount,
+    ULONG pList[]);
+void __RPC_STUB IFrequencyMap_put_FrequencyMapping_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFrequencyMap_get_CountryCode_Proxy(
+    IFrequencyMap* This,
+    ULONG *pulCountryCode);
+void __RPC_STUB IFrequencyMap_get_CountryCode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFrequencyMap_put_CountryCode_Proxy(
+    IFrequencyMap* This,
+    ULONG ulCountryCode);
+void __RPC_STUB IFrequencyMap_put_CountryCode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFrequencyMap_get_DefaultFrequencyMapping_Proxy(
+    IFrequencyMap* This,
+    ULONG ulCountryCode,
+    ULONG *pulCount,
+    ULONG **ppulList);
+void __RPC_STUB IFrequencyMap_get_DefaultFrequencyMapping_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFrequencyMap_get_CountryCodeList_Proxy(
+    IFrequencyMap* This,
+    ULONG *pulCount,
+    ULONG **ppulList);
+void __RPC_STUB IFrequencyMap_get_CountryCodeList_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IFrequencyMap_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_EasMessage interface
+ */
+#ifndef __IBDA_EasMessage_INTERFACE_DEFINED__
+#define __IBDA_EasMessage_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_EasMessage, 0xd806973d, 0x3ebe, 0x46de, 0x8f,0xbb, 0x63,0x58,0xfe,0x78,0x42,0x08);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("d806973d-3ebe-46de-8fbb-6358fe784208")
+IBDA_EasMessage : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE get_EasMessage(
+        ULONG ulEventID,
+        IUnknown **ppEASObject) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_EasMessage, 0xd806973d, 0x3ebe, 0x46de, 0x8f,0xbb, 0x63,0x58,0xfe,0x78,0x42,0x08)
+#endif
+#else
+typedef struct IBDA_EasMessageVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_EasMessage* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_EasMessage* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_EasMessage* This);
+
+    /*** IBDA_EasMessage methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_EasMessage)(
+        IBDA_EasMessage* This,
+        ULONG ulEventID,
+        IUnknown **ppEASObject);
+
+    END_INTERFACE
+} IBDA_EasMessageVtbl;
+interface IBDA_EasMessage {
+    CONST_VTBL IBDA_EasMessageVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_EasMessage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_EasMessage_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_EasMessage_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_EasMessage methods ***/
+#define IBDA_EasMessage_get_EasMessage(This,ulEventID,ppEASObject) (This)->lpVtbl->get_EasMessage(This,ulEventID,ppEASObject)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_EasMessage_QueryInterface(IBDA_EasMessage* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_EasMessage_AddRef(IBDA_EasMessage* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_EasMessage_Release(IBDA_EasMessage* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_EasMessage methods ***/
+static FORCEINLINE HRESULT IBDA_EasMessage_get_EasMessage(IBDA_EasMessage* This,ULONG ulEventID,IUnknown **ppEASObject) {
+    return This->lpVtbl->get_EasMessage(This,ulEventID,ppEASObject);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_EasMessage_get_EasMessage_Proxy(
+    IBDA_EasMessage* This,
+    ULONG ulEventID,
+    IUnknown **ppEASObject);
+void __RPC_STUB IBDA_EasMessage_get_EasMessage_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_EasMessage_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_TransportStreamInfo interface
+ */
+#ifndef __IBDA_TransportStreamInfo_INTERFACE_DEFINED__
+#define __IBDA_TransportStreamInfo_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_TransportStreamInfo, 0x8e882535, 0x5f86, 0x47ab, 0x86,0xcf, 0xc2,0x81,0xa7,0x2a,0x05,0x49);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("8e882535-5f86-47ab-86cf-c281a72a0549")
+IBDA_TransportStreamInfo : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE get_PatTableTickCount(
+        ULONG *pPatTickCount) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_TransportStreamInfo, 0x8e882535, 0x5f86, 0x47ab, 0x86,0xcf, 0xc2,0x81,0xa7,0x2a,0x05,0x49)
+#endif
+#else
+typedef struct IBDA_TransportStreamInfoVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_TransportStreamInfo* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_TransportStreamInfo* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_TransportStreamInfo* This);
+
+    /*** IBDA_TransportStreamInfo methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_PatTableTickCount)(
+        IBDA_TransportStreamInfo* This,
+        ULONG *pPatTickCount);
+
+    END_INTERFACE
+} IBDA_TransportStreamInfoVtbl;
+interface IBDA_TransportStreamInfo {
+    CONST_VTBL IBDA_TransportStreamInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_TransportStreamInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_TransportStreamInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_TransportStreamInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_TransportStreamInfo methods ***/
+#define IBDA_TransportStreamInfo_get_PatTableTickCount(This,pPatTickCount) (This)->lpVtbl->get_PatTableTickCount(This,pPatTickCount)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_TransportStreamInfo_QueryInterface(IBDA_TransportStreamInfo* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_TransportStreamInfo_AddRef(IBDA_TransportStreamInfo* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_TransportStreamInfo_Release(IBDA_TransportStreamInfo* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_TransportStreamInfo methods ***/
+static FORCEINLINE HRESULT IBDA_TransportStreamInfo_get_PatTableTickCount(IBDA_TransportStreamInfo* This,ULONG *pPatTickCount) {
+    return This->lpVtbl->get_PatTableTickCount(This,pPatTickCount);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_TransportStreamInfo_get_PatTableTickCount_Proxy(
+    IBDA_TransportStreamInfo* This,
+    ULONG *pPatTickCount);
+void __RPC_STUB IBDA_TransportStreamInfo_get_PatTableTickCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_TransportStreamInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_ConditionalAccess interface
+ */
+#ifndef __IBDA_ConditionalAccess_INTERFACE_DEFINED__
+#define __IBDA_ConditionalAccess_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_ConditionalAccess, 0xcd51f1e0, 0x7be9, 0x4123, 0x84,0x82, 0xa2,0xa7,0x96,0xc0,0xa6,0xb0);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("cd51f1e0-7be9-4123-8482-a2a796c0a6b0")
+IBDA_ConditionalAccess : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE get_SmartCardStatus(
+        SmartCardStatusType *pCardStatus,
+        SmartCardAssociationType *pCardAssociation,
+        BSTR *pbstrCardError,
+        VARIANT_BOOL *pfOOBLocked) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SmartCardInfo(
+        BSTR *pbstrCardName,
+        BSTR *pbstrCardManufacturer,
+        VARIANT_BOOL *pfDaylightSavings,
+        BYTE *pbyRatingRegion,
+        LONG *plTimeZoneOffsetMinutes,
+        BSTR *pbstrLanguage,
+        EALocationCodeType *pEALocationCode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SmartCardApplications(
+        ULONG *pulcApplications,
+        ULONG ulcApplicationsMax,
+        SmartCardApplication rgApplications[]) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Entitlement(
+        USHORT usVirtualChannel,
+        EntitlementType *pEntitlement) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE TuneByChannel(
+        USHORT usVirtualChannel) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetProgram(
+        USHORT usProgramNumber) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddProgram(
+        USHORT usProgramNumber) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveProgram(
+        USHORT usProgramNumber) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetModuleUI(
+        BYTE byDialogNumber,
+        BSTR *pbstrURL) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE InformUIClosed(
+        BYTE byDialogNumber,
+        UICloseReasonType CloseReason) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_ConditionalAccess, 0xcd51f1e0, 0x7be9, 0x4123, 0x84,0x82, 0xa2,0xa7,0x96,0xc0,0xa6,0xb0)
+#endif
+#else
+typedef struct IBDA_ConditionalAccessVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_ConditionalAccess* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_ConditionalAccess* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_ConditionalAccess* This);
+
+    /*** IBDA_ConditionalAccess methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_SmartCardStatus)(
+        IBDA_ConditionalAccess* This,
+        SmartCardStatusType *pCardStatus,
+        SmartCardAssociationType *pCardAssociation,
+        BSTR *pbstrCardError,
+        VARIANT_BOOL *pfOOBLocked);
+
+    HRESULT (STDMETHODCALLTYPE *get_SmartCardInfo)(
+        IBDA_ConditionalAccess* This,
+        BSTR *pbstrCardName,
+        BSTR *pbstrCardManufacturer,
+        VARIANT_BOOL *pfDaylightSavings,
+        BYTE *pbyRatingRegion,
+        LONG *plTimeZoneOffsetMinutes,
+        BSTR *pbstrLanguage,
+        EALocationCodeType *pEALocationCode);
+
+    HRESULT (STDMETHODCALLTYPE *get_SmartCardApplications)(
+        IBDA_ConditionalAccess* This,
+        ULONG *pulcApplications,
+        ULONG ulcApplicationsMax,
+        SmartCardApplication rgApplications[]);
+
+    HRESULT (STDMETHODCALLTYPE *get_Entitlement)(
+        IBDA_ConditionalAccess* This,
+        USHORT usVirtualChannel,
+        EntitlementType *pEntitlement);
+
+    HRESULT (STDMETHODCALLTYPE *TuneByChannel)(
+        IBDA_ConditionalAccess* This,
+        USHORT usVirtualChannel);
+
+    HRESULT (STDMETHODCALLTYPE *SetProgram)(
+        IBDA_ConditionalAccess* This,
+        USHORT usProgramNumber);
+
+    HRESULT (STDMETHODCALLTYPE *AddProgram)(
+        IBDA_ConditionalAccess* This,
+        USHORT usProgramNumber);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveProgram)(
+        IBDA_ConditionalAccess* This,
+        USHORT usProgramNumber);
+
+    HRESULT (STDMETHODCALLTYPE *GetModuleUI)(
+        IBDA_ConditionalAccess* This,
+        BYTE byDialogNumber,
+        BSTR *pbstrURL);
+
+    HRESULT (STDMETHODCALLTYPE *InformUIClosed)(
+        IBDA_ConditionalAccess* This,
+        BYTE byDialogNumber,
+        UICloseReasonType CloseReason);
+
+    END_INTERFACE
+} IBDA_ConditionalAccessVtbl;
+interface IBDA_ConditionalAccess {
+    CONST_VTBL IBDA_ConditionalAccessVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_ConditionalAccess_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_ConditionalAccess_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_ConditionalAccess_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_ConditionalAccess methods ***/
+#define IBDA_ConditionalAccess_get_SmartCardStatus(This,pCardStatus,pCardAssociation,pbstrCardError,pfOOBLocked) (This)->lpVtbl->get_SmartCardStatus(This,pCardStatus,pCardAssociation,pbstrCardError,pfOOBLocked)
+#define IBDA_ConditionalAccess_get_SmartCardInfo(This,pbstrCardName,pbstrCardManufacturer,pfDaylightSavings,pbyRatingRegion,plTimeZoneOffsetMinutes,pbstrLanguage,pEALocationCode) (This)->lpVtbl->get_SmartCardInfo(This,pbstrCardName,pbstrCardManufacturer,pfDaylightSavings,pbyRatingRegion,plTimeZoneOffsetMinutes,pbstrLanguage,pEALocationCode)
+#define IBDA_ConditionalAccess_get_SmartCardApplications(This,pulcApplications,ulcApplicationsMax,rgApplications) (This)->lpVtbl->get_SmartCardApplications(This,pulcApplications,ulcApplicationsMax,rgApplications)
+#define IBDA_ConditionalAccess_get_Entitlement(This,usVirtualChannel,pEntitlement) (This)->lpVtbl->get_Entitlement(This,usVirtualChannel,pEntitlement)
+#define IBDA_ConditionalAccess_TuneByChannel(This,usVirtualChannel) (This)->lpVtbl->TuneByChannel(This,usVirtualChannel)
+#define IBDA_ConditionalAccess_SetProgram(This,usProgramNumber) (This)->lpVtbl->SetProgram(This,usProgramNumber)
+#define IBDA_ConditionalAccess_AddProgram(This,usProgramNumber) (This)->lpVtbl->AddProgram(This,usProgramNumber)
+#define IBDA_ConditionalAccess_RemoveProgram(This,usProgramNumber) (This)->lpVtbl->RemoveProgram(This,usProgramNumber)
+#define IBDA_ConditionalAccess_GetModuleUI(This,byDialogNumber,pbstrURL) (This)->lpVtbl->GetModuleUI(This,byDialogNumber,pbstrURL)
+#define IBDA_ConditionalAccess_InformUIClosed(This,byDialogNumber,CloseReason) (This)->lpVtbl->InformUIClosed(This,byDialogNumber,CloseReason)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_ConditionalAccess_QueryInterface(IBDA_ConditionalAccess* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_ConditionalAccess_AddRef(IBDA_ConditionalAccess* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_ConditionalAccess_Release(IBDA_ConditionalAccess* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_ConditionalAccess methods ***/
+static FORCEINLINE HRESULT IBDA_ConditionalAccess_get_SmartCardStatus(IBDA_ConditionalAccess* This,SmartCardStatusType *pCardStatus,SmartCardAssociationType *pCardAssociation,BSTR *pbstrCardError,VARIANT_BOOL *pfOOBLocked) {
+    return This->lpVtbl->get_SmartCardStatus(This,pCardStatus,pCardAssociation,pbstrCardError,pfOOBLocked);
+}
+static FORCEINLINE HRESULT IBDA_ConditionalAccess_get_SmartCardInfo(IBDA_ConditionalAccess* This,BSTR *pbstrCardName,BSTR *pbstrCardManufacturer,VARIANT_BOOL *pfDaylightSavings,BYTE *pbyRatingRegion,LONG *plTimeZoneOffsetMinutes,BSTR *pbstrLanguage,EALocationCodeType *pEALocationCode) {
+    return This->lpVtbl->get_SmartCardInfo(This,pbstrCardName,pbstrCardManufacturer,pfDaylightSavings,pbyRatingRegion,plTimeZoneOffsetMinutes,pbstrLanguage,pEALocationCode);
+}
+static FORCEINLINE HRESULT IBDA_ConditionalAccess_get_SmartCardApplications(IBDA_ConditionalAccess* This,ULONG *pulcApplications,ULONG ulcApplicationsMax,SmartCardApplication rgApplications[]) {
+    return This->lpVtbl->get_SmartCardApplications(This,pulcApplications,ulcApplicationsMax,rgApplications);
+}
+static FORCEINLINE HRESULT IBDA_ConditionalAccess_get_Entitlement(IBDA_ConditionalAccess* This,USHORT usVirtualChannel,EntitlementType *pEntitlement) {
+    return This->lpVtbl->get_Entitlement(This,usVirtualChannel,pEntitlement);
+}
+static FORCEINLINE HRESULT IBDA_ConditionalAccess_TuneByChannel(IBDA_ConditionalAccess* This,USHORT usVirtualChannel) {
+    return This->lpVtbl->TuneByChannel(This,usVirtualChannel);
+}
+static FORCEINLINE HRESULT IBDA_ConditionalAccess_SetProgram(IBDA_ConditionalAccess* This,USHORT usProgramNumber) {
+    return This->lpVtbl->SetProgram(This,usProgramNumber);
+}
+static FORCEINLINE HRESULT IBDA_ConditionalAccess_AddProgram(IBDA_ConditionalAccess* This,USHORT usProgramNumber) {
+    return This->lpVtbl->AddProgram(This,usProgramNumber);
+}
+static FORCEINLINE HRESULT IBDA_ConditionalAccess_RemoveProgram(IBDA_ConditionalAccess* This,USHORT usProgramNumber) {
+    return This->lpVtbl->RemoveProgram(This,usProgramNumber);
+}
+static FORCEINLINE HRESULT IBDA_ConditionalAccess_GetModuleUI(IBDA_ConditionalAccess* This,BYTE byDialogNumber,BSTR *pbstrURL) {
+    return This->lpVtbl->GetModuleUI(This,byDialogNumber,pbstrURL);
+}
+static FORCEINLINE HRESULT IBDA_ConditionalAccess_InformUIClosed(IBDA_ConditionalAccess* This,BYTE byDialogNumber,UICloseReasonType CloseReason) {
+    return This->lpVtbl->InformUIClosed(This,byDialogNumber,CloseReason);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_ConditionalAccess_get_SmartCardStatus_Proxy(
+    IBDA_ConditionalAccess* This,
+    SmartCardStatusType *pCardStatus,
+    SmartCardAssociationType *pCardAssociation,
+    BSTR *pbstrCardError,
+    VARIANT_BOOL *pfOOBLocked);
+void __RPC_STUB IBDA_ConditionalAccess_get_SmartCardStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_ConditionalAccess_get_SmartCardInfo_Proxy(
+    IBDA_ConditionalAccess* This,
+    BSTR *pbstrCardName,
+    BSTR *pbstrCardManufacturer,
+    VARIANT_BOOL *pfDaylightSavings,
+    BYTE *pbyRatingRegion,
+    LONG *plTimeZoneOffsetMinutes,
+    BSTR *pbstrLanguage,
+    EALocationCodeType *pEALocationCode);
+void __RPC_STUB IBDA_ConditionalAccess_get_SmartCardInfo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_ConditionalAccess_get_SmartCardApplications_Proxy(
+    IBDA_ConditionalAccess* This,
+    ULONG *pulcApplications,
+    ULONG ulcApplicationsMax,
+    SmartCardApplication rgApplications[]);
+void __RPC_STUB IBDA_ConditionalAccess_get_SmartCardApplications_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_ConditionalAccess_get_Entitlement_Proxy(
+    IBDA_ConditionalAccess* This,
+    USHORT usVirtualChannel,
+    EntitlementType *pEntitlement);
+void __RPC_STUB IBDA_ConditionalAccess_get_Entitlement_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_ConditionalAccess_TuneByChannel_Proxy(
+    IBDA_ConditionalAccess* This,
+    USHORT usVirtualChannel);
+void __RPC_STUB IBDA_ConditionalAccess_TuneByChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_ConditionalAccess_SetProgram_Proxy(
+    IBDA_ConditionalAccess* This,
+    USHORT usProgramNumber);
+void __RPC_STUB IBDA_ConditionalAccess_SetProgram_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_ConditionalAccess_AddProgram_Proxy(
+    IBDA_ConditionalAccess* This,
+    USHORT usProgramNumber);
+void __RPC_STUB IBDA_ConditionalAccess_AddProgram_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_ConditionalAccess_RemoveProgram_Proxy(
+    IBDA_ConditionalAccess* This,
+    USHORT usProgramNumber);
+void __RPC_STUB IBDA_ConditionalAccess_RemoveProgram_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_ConditionalAccess_GetModuleUI_Proxy(
+    IBDA_ConditionalAccess* This,
+    BYTE byDialogNumber,
+    BSTR *pbstrURL);
+void __RPC_STUB IBDA_ConditionalAccess_GetModuleUI_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_ConditionalAccess_InformUIClosed_Proxy(
+    IBDA_ConditionalAccess* This,
+    BYTE byDialogNumber,
+    UICloseReasonType CloseReason);
+void __RPC_STUB IBDA_ConditionalAccess_InformUIClosed_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_ConditionalAccess_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_DiagnosticProperties interface
+ */
+#ifndef __IBDA_DiagnosticProperties_INTERFACE_DEFINED__
+#define __IBDA_DiagnosticProperties_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_DiagnosticProperties, 0x20e80cb5, 0xc543, 0x4c1b, 0x8e,0xb3, 0x49,0xe7,0x19,0xee,0xe7,0xd4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("20e80cb5-c543-4c1b-8eb3-49e719eee7d4")
+IBDA_DiagnosticProperties : public IPropertyBag
+{
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_DiagnosticProperties, 0x20e80cb5, 0xc543, 0x4c1b, 0x8e,0xb3, 0x49,0xe7,0x19,0xee,0xe7,0xd4)
+#endif
+#else
+typedef struct IBDA_DiagnosticPropertiesVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_DiagnosticProperties* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_DiagnosticProperties* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_DiagnosticProperties* This);
+
+    /*** IPropertyBag methods ***/
+    HRESULT (STDMETHODCALLTYPE *Read)(
+        IBDA_DiagnosticProperties* This,
+        LPCOLESTR pszPropName,
+        VARIANT *pVar,
+        IErrorLog *pErrorLog);
+
+    HRESULT (STDMETHODCALLTYPE *Write)(
+        IBDA_DiagnosticProperties* This,
+        LPCOLESTR pszPropName,
+        VARIANT *pVar);
+
+    END_INTERFACE
+} IBDA_DiagnosticPropertiesVtbl;
+interface IBDA_DiagnosticProperties {
+    CONST_VTBL IBDA_DiagnosticPropertiesVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_DiagnosticProperties_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_DiagnosticProperties_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_DiagnosticProperties_Release(This) (This)->lpVtbl->Release(This)
+/*** IPropertyBag methods ***/
+#define IBDA_DiagnosticProperties_Read(This,pszPropName,pVar,pErrorLog) (This)->lpVtbl->Read(This,pszPropName,pVar,pErrorLog)
+#define IBDA_DiagnosticProperties_Write(This,pszPropName,pVar) (This)->lpVtbl->Write(This,pszPropName,pVar)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_DiagnosticProperties_QueryInterface(IBDA_DiagnosticProperties* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_DiagnosticProperties_AddRef(IBDA_DiagnosticProperties* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_DiagnosticProperties_Release(IBDA_DiagnosticProperties* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IPropertyBag methods ***/
+static FORCEINLINE HRESULT IBDA_DiagnosticProperties_Read(IBDA_DiagnosticProperties* This,LPCOLESTR pszPropName,VARIANT *pVar,IErrorLog *pErrorLog) {
+    return This->lpVtbl->Read(This,pszPropName,pVar,pErrorLog);
+}
+static FORCEINLINE HRESULT IBDA_DiagnosticProperties_Write(IBDA_DiagnosticProperties* This,LPCOLESTR pszPropName,VARIANT *pVar) {
+    return This->lpVtbl->Write(This,pszPropName,pVar);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IBDA_DiagnosticProperties_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_DRM interface
+ */
+#ifndef __IBDA_DRM_INTERFACE_DEFINED__
+#define __IBDA_DRM_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_DRM, 0xf98d88b0, 0x1992, 0x4cd6, 0xa6,0xd9, 0xb9,0xaf,0xab,0x99,0x33,0x0d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("f98d88b0-1992-4cd6-a6d9-b9afab99330d")
+IBDA_DRM : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetDRMPairingStatus(
+        DWORD *pdwStatus,
+        HRESULT *phError) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PerformDRMPairing(
+        WINBOOL fSync) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_DRM, 0xf98d88b0, 0x1992, 0x4cd6, 0xa6,0xd9, 0xb9,0xaf,0xab,0x99,0x33,0x0d)
+#endif
+#else
+typedef struct IBDA_DRMVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_DRM* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_DRM* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_DRM* This);
+
+    /*** IBDA_DRM methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDRMPairingStatus)(
+        IBDA_DRM* This,
+        DWORD *pdwStatus,
+        HRESULT *phError);
+
+    HRESULT (STDMETHODCALLTYPE *PerformDRMPairing)(
+        IBDA_DRM* This,
+        WINBOOL fSync);
+
+    END_INTERFACE
+} IBDA_DRMVtbl;
+interface IBDA_DRM {
+    CONST_VTBL IBDA_DRMVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_DRM_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_DRM_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_DRM_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_DRM methods ***/
+#define IBDA_DRM_GetDRMPairingStatus(This,pdwStatus,phError) (This)->lpVtbl->GetDRMPairingStatus(This,pdwStatus,phError)
+#define IBDA_DRM_PerformDRMPairing(This,fSync) (This)->lpVtbl->PerformDRMPairing(This,fSync)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_DRM_QueryInterface(IBDA_DRM* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_DRM_AddRef(IBDA_DRM* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_DRM_Release(IBDA_DRM* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_DRM methods ***/
+static FORCEINLINE HRESULT IBDA_DRM_GetDRMPairingStatus(IBDA_DRM* This,DWORD *pdwStatus,HRESULT *phError) {
+    return This->lpVtbl->GetDRMPairingStatus(This,pdwStatus,phError);
+}
+static FORCEINLINE HRESULT IBDA_DRM_PerformDRMPairing(IBDA_DRM* This,WINBOOL fSync) {
+    return This->lpVtbl->PerformDRMPairing(This,fSync);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_DRM_GetDRMPairingStatus_Proxy(
+    IBDA_DRM* This,
+    DWORD *pdwStatus,
+    HRESULT *phError);
+void __RPC_STUB IBDA_DRM_GetDRMPairingStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DRM_PerformDRMPairing_Proxy(
+    IBDA_DRM* This,
+    WINBOOL fSync);
+void __RPC_STUB IBDA_DRM_PerformDRMPairing_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_DRM_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_NameValueService interface
+ */
+#ifndef __IBDA_NameValueService_INTERFACE_DEFINED__
+#define __IBDA_NameValueService_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_NameValueService, 0x7f0b3150, 0x7b81, 0x4ad4, 0x98,0xe3, 0x7e,0x90,0x97,0x09,0x43,0x01);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("7f0b3150-7b81-4ad4-98e3-7e9097094301")
+IBDA_NameValueService : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetValueNameByIndex(
+        ULONG ulIndex,
+        BSTR *pbstrName) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetValue(
+        BSTR bstrName,
+        BSTR bstrLanguage,
+        BSTR *pbstrValue) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetValue(
+        ULONG ulDialogRequest,
+        BSTR bstrLanguage,
+        BSTR bstrName,
+        BSTR bstrValue,
+        ULONG ulReserved) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_NameValueService, 0x7f0b3150, 0x7b81, 0x4ad4, 0x98,0xe3, 0x7e,0x90,0x97,0x09,0x43,0x01)
+#endif
+#else
+typedef struct IBDA_NameValueServiceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_NameValueService* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_NameValueService* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_NameValueService* This);
+
+    /*** IBDA_NameValueService methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetValueNameByIndex)(
+        IBDA_NameValueService* This,
+        ULONG ulIndex,
+        BSTR *pbstrName);
+
+    HRESULT (STDMETHODCALLTYPE *GetValue)(
+        IBDA_NameValueService* This,
+        BSTR bstrName,
+        BSTR bstrLanguage,
+        BSTR *pbstrValue);
+
+    HRESULT (STDMETHODCALLTYPE *SetValue)(
+        IBDA_NameValueService* This,
+        ULONG ulDialogRequest,
+        BSTR bstrLanguage,
+        BSTR bstrName,
+        BSTR bstrValue,
+        ULONG ulReserved);
+
+    END_INTERFACE
+} IBDA_NameValueServiceVtbl;
+interface IBDA_NameValueService {
+    CONST_VTBL IBDA_NameValueServiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_NameValueService_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_NameValueService_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_NameValueService_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_NameValueService methods ***/
+#define IBDA_NameValueService_GetValueNameByIndex(This,ulIndex,pbstrName) (This)->lpVtbl->GetValueNameByIndex(This,ulIndex,pbstrName)
+#define IBDA_NameValueService_GetValue(This,bstrName,bstrLanguage,pbstrValue) (This)->lpVtbl->GetValue(This,bstrName,bstrLanguage,pbstrValue)
+#define IBDA_NameValueService_SetValue(This,ulDialogRequest,bstrLanguage,bstrName,bstrValue,ulReserved) (This)->lpVtbl->SetValue(This,ulDialogRequest,bstrLanguage,bstrName,bstrValue,ulReserved)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_NameValueService_QueryInterface(IBDA_NameValueService* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_NameValueService_AddRef(IBDA_NameValueService* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_NameValueService_Release(IBDA_NameValueService* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_NameValueService methods ***/
+static FORCEINLINE HRESULT IBDA_NameValueService_GetValueNameByIndex(IBDA_NameValueService* This,ULONG ulIndex,BSTR *pbstrName) {
+    return This->lpVtbl->GetValueNameByIndex(This,ulIndex,pbstrName);
+}
+static FORCEINLINE HRESULT IBDA_NameValueService_GetValue(IBDA_NameValueService* This,BSTR bstrName,BSTR bstrLanguage,BSTR *pbstrValue) {
+    return This->lpVtbl->GetValue(This,bstrName,bstrLanguage,pbstrValue);
+}
+static FORCEINLINE HRESULT IBDA_NameValueService_SetValue(IBDA_NameValueService* This,ULONG ulDialogRequest,BSTR bstrLanguage,BSTR bstrName,BSTR bstrValue,ULONG ulReserved) {
+    return This->lpVtbl->SetValue(This,ulDialogRequest,bstrLanguage,bstrName,bstrValue,ulReserved);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_NameValueService_GetValueNameByIndex_Proxy(
+    IBDA_NameValueService* This,
+    ULONG ulIndex,
+    BSTR *pbstrName);
+void __RPC_STUB IBDA_NameValueService_GetValueNameByIndex_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_NameValueService_GetValue_Proxy(
+    IBDA_NameValueService* This,
+    BSTR bstrName,
+    BSTR bstrLanguage,
+    BSTR *pbstrValue);
+void __RPC_STUB IBDA_NameValueService_GetValue_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_NameValueService_SetValue_Proxy(
+    IBDA_NameValueService* This,
+    ULONG ulDialogRequest,
+    BSTR bstrLanguage,
+    BSTR bstrName,
+    BSTR bstrValue,
+    ULONG ulReserved);
+void __RPC_STUB IBDA_NameValueService_SetValue_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_NameValueService_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_ConditionalAccessEx interface
+ */
+#ifndef __IBDA_ConditionalAccessEx_INTERFACE_DEFINED__
+#define __IBDA_ConditionalAccessEx_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_ConditionalAccessEx, 0x497c3418, 0x23cb, 0x44ba, 0xbb,0x62, 0x76,0x9f,0x50,0x6f,0xce,0xa7);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("497c3418-23cb-44ba-bb62-769f506fcea7")
+IBDA_ConditionalAccessEx : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE CheckEntitlementToken(
+        ULONG ulDialogRequest,
+        BSTR bstrLanguage,
+        BDA_CONDITIONALACCESS_REQUESTTYPE RequestType,
+        ULONG ulcbEntitlementTokenLen,
+        BYTE *pbEntitlementToken,
+        ULONG *pulDescrambleStatus) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetCaptureToken(
+        ULONG ulcbCaptureTokenLen,
+        BYTE *pbCaptureToken) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OpenBroadcastMmi(
+        ULONG ulDialogRequest,
+        BSTR bstrLanguage,
+        ULONG EventId) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CloseMmiDialog(
+        ULONG ulDialogRequest,
+        BSTR bstrLanguage,
+        ULONG ulDialogNumber,
+        BDA_CONDITIONALACCESS_MMICLOSEREASON ReasonCode,
+        ULONG *pulSessionResult) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateDialogRequestNumber(
+        ULONG *pulDialogRequestNumber) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_ConditionalAccessEx, 0x497c3418, 0x23cb, 0x44ba, 0xbb,0x62, 0x76,0x9f,0x50,0x6f,0xce,0xa7)
+#endif
+#else
+typedef struct IBDA_ConditionalAccessExVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_ConditionalAccessEx* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_ConditionalAccessEx* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_ConditionalAccessEx* This);
+
+    /*** IBDA_ConditionalAccessEx methods ***/
+    HRESULT (STDMETHODCALLTYPE *CheckEntitlementToken)(
+        IBDA_ConditionalAccessEx* This,
+        ULONG ulDialogRequest,
+        BSTR bstrLanguage,
+        BDA_CONDITIONALACCESS_REQUESTTYPE RequestType,
+        ULONG ulcbEntitlementTokenLen,
+        BYTE *pbEntitlementToken,
+        ULONG *pulDescrambleStatus);
+
+    HRESULT (STDMETHODCALLTYPE *SetCaptureToken)(
+        IBDA_ConditionalAccessEx* This,
+        ULONG ulcbCaptureTokenLen,
+        BYTE *pbCaptureToken);
+
+    HRESULT (STDMETHODCALLTYPE *OpenBroadcastMmi)(
+        IBDA_ConditionalAccessEx* This,
+        ULONG ulDialogRequest,
+        BSTR bstrLanguage,
+        ULONG EventId);
+
+    HRESULT (STDMETHODCALLTYPE *CloseMmiDialog)(
+        IBDA_ConditionalAccessEx* This,
+        ULONG ulDialogRequest,
+        BSTR bstrLanguage,
+        ULONG ulDialogNumber,
+        BDA_CONDITIONALACCESS_MMICLOSEREASON ReasonCode,
+        ULONG *pulSessionResult);
+
+    HRESULT (STDMETHODCALLTYPE *CreateDialogRequestNumber)(
+        IBDA_ConditionalAccessEx* This,
+        ULONG *pulDialogRequestNumber);
+
+    END_INTERFACE
+} IBDA_ConditionalAccessExVtbl;
+interface IBDA_ConditionalAccessEx {
+    CONST_VTBL IBDA_ConditionalAccessExVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
 #define IBDA_ConditionalAccessEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define IBDA_ConditionalAccessEx_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define IBDA_ConditionalAccessEx_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_ConditionalAccessEx methods ***/
 #define IBDA_ConditionalAccessEx_CheckEntitlementToken(This,ulDialogRequest,bstrLanguage,RequestType,ulcbEntitlementTokenLen,pbEntitlementToken,pulDescrambleStatus) (This)->lpVtbl->CheckEntitlementToken(This,ulDialogRequest,bstrLanguage,RequestType,ulcbEntitlementTokenLen,pbEntitlementToken,pulDescrambleStatus)
+#define IBDA_ConditionalAccessEx_SetCaptureToken(This,ulcbCaptureTokenLen,pbCaptureToken) (This)->lpVtbl->SetCaptureToken(This,ulcbCaptureTokenLen,pbCaptureToken)
+#define IBDA_ConditionalAccessEx_OpenBroadcastMmi(This,ulDialogRequest,bstrLanguage,EventId) (This)->lpVtbl->OpenBroadcastMmi(This,ulDialogRequest,bstrLanguage,EventId)
 #define IBDA_ConditionalAccessEx_CloseMmiDialog(This,ulDialogRequest,bstrLanguage,ulDialogNumber,ReasonCode,pulSessionResult) (This)->lpVtbl->CloseMmiDialog(This,ulDialogRequest,bstrLanguage,ulDialogNumber,ReasonCode,pulSessionResult)
 #define IBDA_ConditionalAccessEx_CreateDialogRequestNumber(This,pulDialogRequestNumber) (This)->lpVtbl->CreateDialogRequestNumber(This,pulDialogRequestNumber)
-#define IBDA_ConditionalAccessEx_OpenBroadcastMmi(This,ulDialogRequest,bstrLanguage,EventId) (This)->lpVtbl->OpenBroadcastMmi(This,ulDialogRequest,bstrLanguage,EventId)
-#define IBDA_ConditionalAccessEx_SetCaptureToken(This,ulcbCaptureTokenLen,pbCaptureToken) (This)->lpVtbl->SetCaptureToken(This,ulcbCaptureTokenLen,pbCaptureToken)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IBDA_DRIDRMService
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_ConditionalAccessEx_QueryInterface(IBDA_ConditionalAccessEx* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_ConditionalAccessEx_AddRef(IBDA_ConditionalAccessEx* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_ConditionalAccessEx_Release(IBDA_ConditionalAccessEx* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_ConditionalAccessEx methods ***/
+static FORCEINLINE HRESULT IBDA_ConditionalAccessEx_CheckEntitlementToken(IBDA_ConditionalAccessEx* This,ULONG ulDialogRequest,BSTR bstrLanguage,BDA_CONDITIONALACCESS_REQUESTTYPE RequestType,ULONG ulcbEntitlementTokenLen,BYTE *pbEntitlementToken,ULONG *pulDescrambleStatus) {
+    return This->lpVtbl->CheckEntitlementToken(This,ulDialogRequest,bstrLanguage,RequestType,ulcbEntitlementTokenLen,pbEntitlementToken,pulDescrambleStatus);
+}
+static FORCEINLINE HRESULT IBDA_ConditionalAccessEx_SetCaptureToken(IBDA_ConditionalAccessEx* This,ULONG ulcbCaptureTokenLen,BYTE *pbCaptureToken) {
+    return This->lpVtbl->SetCaptureToken(This,ulcbCaptureTokenLen,pbCaptureToken);
+}
+static FORCEINLINE HRESULT IBDA_ConditionalAccessEx_OpenBroadcastMmi(IBDA_ConditionalAccessEx* This,ULONG ulDialogRequest,BSTR bstrLanguage,ULONG EventId) {
+    return This->lpVtbl->OpenBroadcastMmi(This,ulDialogRequest,bstrLanguage,EventId);
+}
+static FORCEINLINE HRESULT IBDA_ConditionalAccessEx_CloseMmiDialog(IBDA_ConditionalAccessEx* This,ULONG ulDialogRequest,BSTR bstrLanguage,ULONG ulDialogNumber,BDA_CONDITIONALACCESS_MMICLOSEREASON ReasonCode,ULONG *pulSessionResult) {
+    return This->lpVtbl->CloseMmiDialog(This,ulDialogRequest,bstrLanguage,ulDialogNumber,ReasonCode,pulSessionResult);
+}
+static FORCEINLINE HRESULT IBDA_ConditionalAccessEx_CreateDialogRequestNumber(IBDA_ConditionalAccessEx* This,ULONG *pulDialogRequestNumber) {
+    return This->lpVtbl->CreateDialogRequestNumber(This,pulDialogRequestNumber);
+}
 #endif
-DECLARE_INTERFACE_(IBDA_DRIDRMService,IUnknown)
-{
-    BEGIN_INTERFACE
-
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IBDA_DRIDRMService methods */
-    STDMETHOD_(HRESULT,GetDRMStatus)(THIS_ BSTR *pbstrDrmUuidList,GUID *DrmUuid) PURE;
-    STDMETHOD_(HRESULT,GetPairingStatus)(THIS_ BDA_DrmPairingError *penumPairingStatus) PURE;
-    STDMETHOD_(HRESULT,SetDRM)(THIS_ GUID *puuidNewDrm) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IBDA_DRIDRMService_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IBDA_DRIDRMService_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IBDA_DRIDRMService_Release(This) (This)->lpVtbl->Release(This)
-#define IBDA_DRIDRMService_GetDRMStatus(This,pbstrDrmUuidList,DrmUuid) (This)->lpVtbl->GetDRMStatus(This,pbstrDrmUuidList,DrmUuid)
-#define IBDA_DRIDRMService_GetPairingStatus(This,penumPairingStatus) (This)->lpVtbl->GetPairingStatus(This,penumPairingStatus)
-#define IBDA_DRIDRMService_SetDRM(This,puuidNewDrm) (This)->lpVtbl->SetDRM(This,puuidNewDrm)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IBDA_Encoder
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
 #endif
-DECLARE_INTERFACE_(IBDA_Encoder,IUnknown)
-{
-    BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IBDA_Encoder methods */
-    STDMETHOD_(HRESULT,EnumAudioCapability)(THIS_ DWORD FmtIndex,DWORD *MethodID,DWORD *AlgorithmType,DWORD *SamplingRate,DWORD *BitDepth,DWORD *NumChannels) PURE;
-    STDMETHOD_(HRESULT,EnumVideoCapability)(THIS_ DWORD FmtIndex,DWORD *MethodID,DWORD *AlgorithmType,DWORD *VerticalSize,DWORD *HorizontalSize,DWORD *AspectRatio,DWORD *FrameRateCode,DWORD *ProgressiveSequence) PURE;
-    STDMETHOD_(HRESULT,GetState)(THIS_ DWORD *AudioBitrateMax,DWORD *AudioBitrateMin,DWORD *AudioBitrateMode,DWORD *AudioBitrateStepping,DWORD *AudioBitrate,DWORD *AudioMethodID,DWORD *AvailableAudioPrograms,DWORD *AudioProgram,DWORD *VideoBitrateMax,DWORD *VideoBitrateMin,DWORD *VideoBitrateMode,DWORD *VideoBitrate,DWORD *VideoBitrateStepping,DWORD *VideoMethodID,DWORD *SignalSourceID,ULONGLONG *SignalFormat,WINBOOL *SignalLock,LONG *SignalLevel,DWORD *SignalToNoiseRatio) PURE;
-    STDMETHOD_(HRESULT,QueryCapabilities)(THIS_ DWORD *NumAudioFmts,DWORD *NumVideoFmts) PURE;
-    STDMETHOD_(HRESULT,SetParameters)(THIS_ DWORD AudioBitrateMode,DWORD AudioBitrate,DWORD AudioMethodID,DWORD AudioProgram,DWORD VideoBitrateMode,DWORD VideoBitrate,DWORD VideoMethodID) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IBDA_Encoder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IBDA_Encoder_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IBDA_Encoder_Release(This) (This)->lpVtbl->Release(This)
-#define IBDA_Encoder_EnumAudioCapability(This,FmtIndex,MethodID,AlgorithmType,SamplingRate,BitDepth,NumChannels) (This)->lpVtbl->EnumAudioCapability(This,FmtIndex,MethodID,AlgorithmType,SamplingRate,BitDepth,NumChannels)
-#define IBDA_Encoder_EnumVideoCapability(This,FmtIndex,MethodID,AlgorithmType,VerticalSize,HorizontalSize,AspectRatio,FrameRateCode,ProgressiveSequence) (This)->lpVtbl->EnumVideoCapability(This,FmtIndex,MethodID,AlgorithmType,VerticalSize,HorizontalSize,AspectRatio,FrameRateCode,ProgressiveSequence)
-#define IBDA_Encoder_GetState(This,AudioBitrateMax,AudioBitrateMin,AudioBitrateMode,AudioBitrateStepping,AudioBitrate,AudioMethodID,AvailableAudioPrograms,AudioProgram,VideoBitrateMax,VideoBitrateMin,VideoBitrateMode,VideoBitrate,VideoBitrateStepping,VideoMethodID,SignalSourceID,SignalFormat,SignalLock,SignalLevel,SignalToNoiseRatio) (This)->lpVtbl->GetState(This,AudioBitrateMax,AudioBitrateMin,AudioBitrateMode,AudioBitrateStepping,AudioBitrate,AudioMethodID,AvailableAudioPrograms,AudioProgram,VideoBitrateMax,VideoBitrateMin,VideoBitrateMode,VideoBitrate,VideoBitrateStepping,VideoMethodID,SignalSourceID,SignalFormat,SignalLock,SignalLevel,SignalToNoiseRatio)
-#define IBDA_Encoder_QueryCapabilities(This,NumAudioFmts,NumVideoFmts) (This)->lpVtbl->QueryCapabilities(This,NumAudioFmts,NumVideoFmts)
-#define IBDA_Encoder_SetParameters(This,AudioBitrateMode,AudioBitrate,AudioMethodID,AudioProgram,VideoBitrateMode,VideoBitrate,VideoMethodID) (This)->lpVtbl->SetParameters(This,AudioBitrateMode,AudioBitrate,AudioMethodID,AudioProgram,VideoBitrateMode,VideoBitrate,VideoMethodID)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IBDA_EventingService
-DECLARE_INTERFACE_(IBDA_EventingService,IUnknown)
-{
-    BEGIN_INTERFACE
-
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IBDA_EventingService methods */
-    STDMETHOD_(HRESULT,CompleteEvent)(THIS_ ULONG ulEventID,ULONG ulEventResult) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IBDA_EventingService_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IBDA_EventingService_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IBDA_EventingService_Release(This) (This)->lpVtbl->Release(This)
-#define IBDA_EventingService_CompleteEvent(This,ulEventID,ulEventResult) (This)->lpVtbl->CompleteEvent(This,ulEventID,ulEventResult)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IBDA_FDC
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
 #endif
-DECLARE_INTERFACE_(IBDA_FDC,IUnknown)
+
+HRESULT STDMETHODCALLTYPE IBDA_ConditionalAccessEx_CheckEntitlementToken_Proxy(
+    IBDA_ConditionalAccessEx* This,
+    ULONG ulDialogRequest,
+    BSTR bstrLanguage,
+    BDA_CONDITIONALACCESS_REQUESTTYPE RequestType,
+    ULONG ulcbEntitlementTokenLen,
+    BYTE *pbEntitlementToken,
+    ULONG *pulDescrambleStatus);
+void __RPC_STUB IBDA_ConditionalAccessEx_CheckEntitlementToken_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_ConditionalAccessEx_SetCaptureToken_Proxy(
+    IBDA_ConditionalAccessEx* This,
+    ULONG ulcbCaptureTokenLen,
+    BYTE *pbCaptureToken);
+void __RPC_STUB IBDA_ConditionalAccessEx_SetCaptureToken_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_ConditionalAccessEx_OpenBroadcastMmi_Proxy(
+    IBDA_ConditionalAccessEx* This,
+    ULONG ulDialogRequest,
+    BSTR bstrLanguage,
+    ULONG EventId);
+void __RPC_STUB IBDA_ConditionalAccessEx_OpenBroadcastMmi_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_ConditionalAccessEx_CloseMmiDialog_Proxy(
+    IBDA_ConditionalAccessEx* This,
+    ULONG ulDialogRequest,
+    BSTR bstrLanguage,
+    ULONG ulDialogNumber,
+    BDA_CONDITIONALACCESS_MMICLOSEREASON ReasonCode,
+    ULONG *pulSessionResult);
+void __RPC_STUB IBDA_ConditionalAccessEx_CloseMmiDialog_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_ConditionalAccessEx_CreateDialogRequestNumber_Proxy(
+    IBDA_ConditionalAccessEx* This,
+    ULONG *pulDialogRequestNumber);
+void __RPC_STUB IBDA_ConditionalAccessEx_CreateDialogRequestNumber_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_ConditionalAccessEx_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_ISDBConditionalAccess interface
+ */
+#ifndef __IBDA_ISDBConditionalAccess_INTERFACE_DEFINED__
+#define __IBDA_ISDBConditionalAccess_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_ISDBConditionalAccess, 0x5e68c627, 0x16c2, 0x4e6c, 0xb1,0xe2, 0xd0,0x01,0x70,0xcd,0xaa,0x0f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("5e68c627-16c2-4e6c-b1e2-d00170cdaa0f")
+IBDA_ISDBConditionalAccess : public IUnknown
 {
-    BEGIN_INTERFACE
+    virtual HRESULT STDMETHODCALLTYPE SetIsdbCasRequest(
+        ULONG ulRequestId,
+        ULONG ulcbRequestBufferLen,
+        BYTE *pbRequestBuffer) = 0;
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IBDA_FDC methods */
-    STDMETHOD_(HRESULT,AddPid)(THIS_ BSTR PidsToAdd,DWORD *RemainingFilterEntries) PURE;
-    STDMETHOD_(HRESULT,AddTid)(THIS_ BSTR TidsToAdd,BSTR *CurrentTidList) PURE;
-    STDMETHOD_(HRESULT,GetStatus)(THIS_ DWORD *CurrentBitrate,WINBOOL *CarrierLock,DWORD *CurrentFrequency,WINBOOL *CurrentSpectrumInversion,BSTR *CurrentPIDList,BSTR *CurrentTIDList,WINBOOL *Overflow) PURE;
-    STDMETHOD_(HRESULT,GetTableSection)(THIS_ DWORD *Pid,DWORD MaxBufferSize,DWORD *ActualSize,BYTE *SecBuffer) PURE;
-    STDMETHOD_(HRESULT,RemovePid)(THIS_ BSTR PidsToRemove) PURE;
-    STDMETHOD_(HRESULT,RemoveTid)(THIS_ BSTR TidsToRemove) PURE;
-    STDMETHOD_(HRESULT,RequestTables)(THIS_ BSTR TableIDs) PURE;
-
-    END_INTERFACE
 };
-#ifdef COBJMACROS
-#define IBDA_FDC_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IBDA_FDC_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IBDA_FDC_Release(This) (This)->lpVtbl->Release(This)
-#define IBDA_FDC_AddPid(This,PidsToAdd,RemainingFilterEntries) (This)->lpVtbl->AddPid(This,PidsToAdd,RemainingFilterEntries)
-#define IBDA_FDC_AddTid(This,TidsToAdd,CurrentTidList) (This)->lpVtbl->AddTid(This,TidsToAdd,CurrentTidList)
-#define IBDA_FDC_GetStatus(This,CurrentBitrate,CarrierLock,CurrentFrequency,CurrentSpectrumInversion,CurrentPIDList,CurrentTIDList,Overflow) (This)->lpVtbl->GetStatus(This,CurrentBitrate,CarrierLock,CurrentFrequency,CurrentSpectrumInversion,CurrentPIDList,CurrentTIDList,Overflow)
-#define IBDA_FDC_GetTableSection(This,Pid,MaxBufferSize,ActualSize,SecBuffer) (This)->lpVtbl->GetTableSection(This,Pid,MaxBufferSize,ActualSize,SecBuffer)
-#define IBDA_FDC_RemovePid(This,PidsToRemove) (This)->lpVtbl->RemovePid(This,PidsToRemove)
-#define IBDA_FDC_RemoveTid(This,TidsToRemove) (This)->lpVtbl->RemoveTid(This,TidsToRemove)
-#define IBDA_FDC_RequestTables(This,TableIDs) (This)->lpVtbl->RequestTables(This,TableIDs)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IBDA_GuideDataDeliveryService
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_ISDBConditionalAccess, 0x5e68c627, 0x16c2, 0x4e6c, 0xb1,0xe2, 0xd0,0x01,0x70,0xcd,0xaa,0x0f)
 #endif
-DECLARE_INTERFACE_(IBDA_GuideDataDeliveryService,IUnknown)
-{
+#else
+typedef struct IBDA_ISDBConditionalAccessVtbl {
     BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_ISDBConditionalAccess* This,
+        REFIID riid,
+        void **ppvObject);
 
-    /* IBDA_GuideDataDeliveryService methods */
-    STDMETHOD(GetGuideData)(THIS_ ULONG *pulcbBufferLen,BYTE *pbBuffer,ULONG *pulGuideDataPercentageProgress) PURE;
-    STDMETHOD_(HRESULT,GetGuideDataType)(THIS_ GUID *pguidDataType) PURE;
-    STDMETHOD_(HRESULT,GetServiceInfoFromTuneXml)(THIS_ BSTR bstrTuneXml,BSTR *pbstrServiceDescription) PURE;
-    STDMETHOD_(HRESULT,GetServices)(THIS_ ULONG *pulcbBufferLen,BYTE *pbBuffer) PURE;
-    STDMETHOD_(HRESULT,GetTuneXmlFromServiceIdx)(THIS_ ULONG64 ul64ServiceIdx,BSTR *pbstrTuneXml) PURE;
-    STDMETHOD_(HRESULT,RequestGuideDataUpdate)(THIS) PURE;
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_ISDBConditionalAccess* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_ISDBConditionalAccess* This);
+
+    /*** IBDA_ISDBConditionalAccess methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetIsdbCasRequest)(
+        IBDA_ISDBConditionalAccess* This,
+        ULONG ulRequestId,
+        ULONG ulcbRequestBufferLen,
+        BYTE *pbRequestBuffer);
 
     END_INTERFACE
+} IBDA_ISDBConditionalAccessVtbl;
+interface IBDA_ISDBConditionalAccess {
+    CONST_VTBL IBDA_ISDBConditionalAccessVtbl* lpVtbl;
 };
+
 #ifdef COBJMACROS
-#define IBDA_GuideDataDeliveryService_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IBDA_GuideDataDeliveryService_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IBDA_GuideDataDeliveryService_Release(This) (This)->lpVtbl->Release(This)
-#define IBDA_GuideDataDeliveryService_GetGuideData(This,pulcbBufferLen,pbBuffer,pulGuideDataPercentageProgress) (This)->lpVtbl->GetGuideData(This,pulcbBufferLen,pbBuffer,pulGuideDataPercentageProgress)
-#define IBDA_GuideDataDeliveryService_GetGuideDataType(This,pguidDataType) (This)->lpVtbl->GetGuideDataType(This,pguidDataType)
-#define IBDA_GuideDataDeliveryService_GetServiceInfoFromTuneXml(This,bstrTuneXml,pbstrServiceDescription) (This)->lpVtbl->GetServiceInfoFromTuneXml(This,bstrTuneXml,pbstrServiceDescription)
-#define IBDA_GuideDataDeliveryService_GetServices(This,pulcbBufferLen,pbBuffer) (This)->lpVtbl->GetServices(This,pulcbBufferLen,pbBuffer)
-#define IBDA_GuideDataDeliveryService_GetTuneXmlFromServiceIdx(This,ul64ServiceIdx,pbstrTuneXml) (This)->lpVtbl->GetTuneXmlFromServiceIdx(This,ul64ServiceIdx,pbstrTuneXml)
-#define IBDA_GuideDataDeliveryService_RequestGuideDataUpdate() (This)->lpVtbl->RequestGuideDataUpdate(This)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IBDA_ISDBConditionalAccess
-DECLARE_INTERFACE_(IBDA_ISDBConditionalAccess,IUnknown)
-{
-    BEGIN_INTERFACE
-
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IBDA_ISDBConditionalAccess methods */
-    STDMETHOD_(HRESULT,SetIsdbCasRequest)(THIS_ ULONG ulRequestId,ULONG ulcbRequestBufferLen,BYTE *pbRequestBuffer) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
 #define IBDA_ISDBConditionalAccess_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define IBDA_ISDBConditionalAccess_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define IBDA_ISDBConditionalAccess_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_ISDBConditionalAccess methods ***/
 #define IBDA_ISDBConditionalAccess_SetIsdbCasRequest(This,ulRequestId,ulcbRequestBufferLen,pbRequestBuffer) (This)->lpVtbl->SetIsdbCasRequest(This,ulRequestId,ulcbRequestBufferLen,pbRequestBuffer)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IBDA_MUX
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_ISDBConditionalAccess_QueryInterface(IBDA_ISDBConditionalAccess* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_ISDBConditionalAccess_AddRef(IBDA_ISDBConditionalAccess* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_ISDBConditionalAccess_Release(IBDA_ISDBConditionalAccess* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_ISDBConditionalAccess methods ***/
+static FORCEINLINE HRESULT IBDA_ISDBConditionalAccess_SetIsdbCasRequest(IBDA_ISDBConditionalAccess* This,ULONG ulRequestId,ULONG ulcbRequestBufferLen,BYTE *pbRequestBuffer) {
+    return This->lpVtbl->SetIsdbCasRequest(This,ulRequestId,ulcbRequestBufferLen,pbRequestBuffer);
+}
 #endif
-DECLARE_INTERFACE_(IBDA_MUX,IUnknown)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_ISDBConditionalAccess_SetIsdbCasRequest_Proxy(
+    IBDA_ISDBConditionalAccess* This,
+    ULONG ulRequestId,
+    ULONG ulcbRequestBufferLen,
+    BYTE *pbRequestBuffer);
+void __RPC_STUB IBDA_ISDBConditionalAccess_SetIsdbCasRequest_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_ISDBConditionalAccess_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_EventingService interface
+ */
+#ifndef __IBDA_EventingService_INTERFACE_DEFINED__
+#define __IBDA_EventingService_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_EventingService, 0x207c413f, 0x00dc, 0x4c61, 0xba,0xd6, 0x6f,0xee,0x1f,0xf0,0x70,0x64);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("207c413f-00dc-4c61-bad6-6fee1ff07064")
+IBDA_EventingService : public IUnknown
 {
+    virtual HRESULT STDMETHODCALLTYPE CompleteEvent(
+        ULONG ulEventID,
+        ULONG ulEventResult) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_EventingService, 0x207c413f, 0x00dc, 0x4c61, 0xba,0xd6, 0x6f,0xee,0x1f,0xf0,0x70,0x64)
+#endif
+#else
+typedef struct IBDA_EventingServiceVtbl {
     BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_EventingService* This,
+        REFIID riid,
+        void **ppvObject);
 
-    /* IBDA_MUX methods */
-    STDMETHOD_(HRESULT,GetPidList)(THIS_ BDA_MUX_PIDLISTITEM *pbPidListBuffer) PURE;
-    STDMETHOD_(HRESULT,SetPidList)(THIS_ ULONG ulPidListCount,BDA_MUX_PIDLISTITEM *pbPidListBuffer) PURE;
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_EventingService* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_EventingService* This);
+
+    /*** IBDA_EventingService methods ***/
+    HRESULT (STDMETHODCALLTYPE *CompleteEvent)(
+        IBDA_EventingService* This,
+        ULONG ulEventID,
+        ULONG ulEventResult);
 
     END_INTERFACE
+} IBDA_EventingServiceVtbl;
+interface IBDA_EventingService {
+    CONST_VTBL IBDA_EventingServiceVtbl* lpVtbl;
 };
+
 #ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_EventingService_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_EventingService_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_EventingService_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_EventingService methods ***/
+#define IBDA_EventingService_CompleteEvent(This,ulEventID,ulEventResult) (This)->lpVtbl->CompleteEvent(This,ulEventID,ulEventResult)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_EventingService_QueryInterface(IBDA_EventingService* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_EventingService_AddRef(IBDA_EventingService* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_EventingService_Release(IBDA_EventingService* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_EventingService methods ***/
+static FORCEINLINE HRESULT IBDA_EventingService_CompleteEvent(IBDA_EventingService* This,ULONG ulEventID,ULONG ulEventResult) {
+    return This->lpVtbl->CompleteEvent(This,ulEventID,ulEventResult);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_EventingService_CompleteEvent_Proxy(
+    IBDA_EventingService* This,
+    ULONG ulEventID,
+    ULONG ulEventResult);
+void __RPC_STUB IBDA_EventingService_CompleteEvent_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_EventingService_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_AUX interface
+ */
+#ifndef __IBDA_AUX_INTERFACE_DEFINED__
+#define __IBDA_AUX_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_AUX, 0x7def4c09, 0x6e66, 0x4567, 0xa8,0x19, 0xf0,0xe1,0x7f,0x4a,0x81,0xab);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("7def4c09-6e66-4567-a819-f0e17f4a81ab")
+IBDA_AUX : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE QueryCapabilities(
+        DWORD *pdwNumAuxInputsBSTR) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumCapability(
+        DWORD dwIndex,
+        DWORD *dwInputID,
+        GUID *pConnectorType,
+        DWORD *ConnTypeNum,
+        DWORD *NumVideoStds,
+        ULONGLONG *AnalogStds) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_AUX, 0x7def4c09, 0x6e66, 0x4567, 0xa8,0x19, 0xf0,0xe1,0x7f,0x4a,0x81,0xab)
+#endif
+#else
+typedef struct IBDA_AUXVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_AUX* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_AUX* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_AUX* This);
+
+    /*** IBDA_AUX methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryCapabilities)(
+        IBDA_AUX* This,
+        DWORD *pdwNumAuxInputsBSTR);
+
+    HRESULT (STDMETHODCALLTYPE *EnumCapability)(
+        IBDA_AUX* This,
+        DWORD dwIndex,
+        DWORD *dwInputID,
+        GUID *pConnectorType,
+        DWORD *ConnTypeNum,
+        DWORD *NumVideoStds,
+        ULONGLONG *AnalogStds);
+
+    END_INTERFACE
+} IBDA_AUXVtbl;
+interface IBDA_AUX {
+    CONST_VTBL IBDA_AUXVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_AUX_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_AUX_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_AUX_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_AUX methods ***/
+#define IBDA_AUX_QueryCapabilities(This,pdwNumAuxInputsBSTR) (This)->lpVtbl->QueryCapabilities(This,pdwNumAuxInputsBSTR)
+#define IBDA_AUX_EnumCapability(This,dwIndex,dwInputID,pConnectorType,ConnTypeNum,NumVideoStds,AnalogStds) (This)->lpVtbl->EnumCapability(This,dwIndex,dwInputID,pConnectorType,ConnTypeNum,NumVideoStds,AnalogStds)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_AUX_QueryInterface(IBDA_AUX* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_AUX_AddRef(IBDA_AUX* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_AUX_Release(IBDA_AUX* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_AUX methods ***/
+static FORCEINLINE HRESULT IBDA_AUX_QueryCapabilities(IBDA_AUX* This,DWORD *pdwNumAuxInputsBSTR) {
+    return This->lpVtbl->QueryCapabilities(This,pdwNumAuxInputsBSTR);
+}
+static FORCEINLINE HRESULT IBDA_AUX_EnumCapability(IBDA_AUX* This,DWORD dwIndex,DWORD *dwInputID,GUID *pConnectorType,DWORD *ConnTypeNum,DWORD *NumVideoStds,ULONGLONG *AnalogStds) {
+    return This->lpVtbl->EnumCapability(This,dwIndex,dwInputID,pConnectorType,ConnTypeNum,NumVideoStds,AnalogStds);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_AUX_QueryCapabilities_Proxy(
+    IBDA_AUX* This,
+    DWORD *pdwNumAuxInputsBSTR);
+void __RPC_STUB IBDA_AUX_QueryCapabilities_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_AUX_EnumCapability_Proxy(
+    IBDA_AUX* This,
+    DWORD dwIndex,
+    DWORD *dwInputID,
+    GUID *pConnectorType,
+    DWORD *ConnTypeNum,
+    DWORD *NumVideoStds,
+    ULONGLONG *AnalogStds);
+void __RPC_STUB IBDA_AUX_EnumCapability_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_AUX_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_Encoder interface
+ */
+#ifndef __IBDA_Encoder_INTERFACE_DEFINED__
+#define __IBDA_Encoder_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_Encoder, 0x3a8bad59, 0x59fe, 0x4559, 0xa0,0xba, 0x39,0x6c,0xfa,0xa9,0x8a,0xe3);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("3a8bad59-59fe-4559-a0ba-396cfaa98ae3")
+IBDA_Encoder : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE QueryCapabilities(
+        DWORD *NumAudioFmts,
+        DWORD *NumVideoFmts) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumAudioCapability(
+        DWORD FmtIndex,
+        DWORD *MethodID,
+        DWORD *AlgorithmType,
+        DWORD *SamplingRate,
+        DWORD *BitDepth,
+        DWORD *NumChannels) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumVideoCapability(
+        DWORD FmtIndex,
+        DWORD *MethodID,
+        DWORD *AlgorithmType,
+        DWORD *VerticalSize,
+        DWORD *HorizontalSize,
+        DWORD *AspectRatio,
+        DWORD *FrameRateCode,
+        DWORD *ProgressiveSequence) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetParameters(
+        DWORD AudioBitrateMode,
+        DWORD AudioBitrate,
+        DWORD AudioMethodID,
+        DWORD AudioProgram,
+        DWORD VideoBitrateMode,
+        DWORD VideoBitrate,
+        DWORD VideoMethodID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetState(
+        DWORD *AudioBitrateMax,
+        DWORD *AudioBitrateMin,
+        DWORD *AudioBitrateMode,
+        DWORD *AudioBitrateStepping,
+        DWORD *AudioBitrate,
+        DWORD *AudioMethodID,
+        DWORD *AvailableAudioPrograms,
+        DWORD *AudioProgram,
+        DWORD *VideoBitrateMax,
+        DWORD *VideoBitrateMin,
+        DWORD *VideoBitrateMode,
+        DWORD *VideoBitrate,
+        DWORD *VideoBitrateStepping,
+        DWORD *VideoMethodID,
+        DWORD *SignalSourceID,
+        ULONGLONG *SignalFormat,
+        WINBOOL *SignalLock,
+        LONG *SignalLevel,
+        DWORD *SignalToNoiseRatio) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_Encoder, 0x3a8bad59, 0x59fe, 0x4559, 0xa0,0xba, 0x39,0x6c,0xfa,0xa9,0x8a,0xe3)
+#endif
+#else
+typedef struct IBDA_EncoderVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_Encoder* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_Encoder* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_Encoder* This);
+
+    /*** IBDA_Encoder methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryCapabilities)(
+        IBDA_Encoder* This,
+        DWORD *NumAudioFmts,
+        DWORD *NumVideoFmts);
+
+    HRESULT (STDMETHODCALLTYPE *EnumAudioCapability)(
+        IBDA_Encoder* This,
+        DWORD FmtIndex,
+        DWORD *MethodID,
+        DWORD *AlgorithmType,
+        DWORD *SamplingRate,
+        DWORD *BitDepth,
+        DWORD *NumChannels);
+
+    HRESULT (STDMETHODCALLTYPE *EnumVideoCapability)(
+        IBDA_Encoder* This,
+        DWORD FmtIndex,
+        DWORD *MethodID,
+        DWORD *AlgorithmType,
+        DWORD *VerticalSize,
+        DWORD *HorizontalSize,
+        DWORD *AspectRatio,
+        DWORD *FrameRateCode,
+        DWORD *ProgressiveSequence);
+
+    HRESULT (STDMETHODCALLTYPE *SetParameters)(
+        IBDA_Encoder* This,
+        DWORD AudioBitrateMode,
+        DWORD AudioBitrate,
+        DWORD AudioMethodID,
+        DWORD AudioProgram,
+        DWORD VideoBitrateMode,
+        DWORD VideoBitrate,
+        DWORD VideoMethodID);
+
+    HRESULT (STDMETHODCALLTYPE *GetState)(
+        IBDA_Encoder* This,
+        DWORD *AudioBitrateMax,
+        DWORD *AudioBitrateMin,
+        DWORD *AudioBitrateMode,
+        DWORD *AudioBitrateStepping,
+        DWORD *AudioBitrate,
+        DWORD *AudioMethodID,
+        DWORD *AvailableAudioPrograms,
+        DWORD *AudioProgram,
+        DWORD *VideoBitrateMax,
+        DWORD *VideoBitrateMin,
+        DWORD *VideoBitrateMode,
+        DWORD *VideoBitrate,
+        DWORD *VideoBitrateStepping,
+        DWORD *VideoMethodID,
+        DWORD *SignalSourceID,
+        ULONGLONG *SignalFormat,
+        WINBOOL *SignalLock,
+        LONG *SignalLevel,
+        DWORD *SignalToNoiseRatio);
+
+    END_INTERFACE
+} IBDA_EncoderVtbl;
+interface IBDA_Encoder {
+    CONST_VTBL IBDA_EncoderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_Encoder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_Encoder_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_Encoder_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_Encoder methods ***/
+#define IBDA_Encoder_QueryCapabilities(This,NumAudioFmts,NumVideoFmts) (This)->lpVtbl->QueryCapabilities(This,NumAudioFmts,NumVideoFmts)
+#define IBDA_Encoder_EnumAudioCapability(This,FmtIndex,MethodID,AlgorithmType,SamplingRate,BitDepth,NumChannels) (This)->lpVtbl->EnumAudioCapability(This,FmtIndex,MethodID,AlgorithmType,SamplingRate,BitDepth,NumChannels)
+#define IBDA_Encoder_EnumVideoCapability(This,FmtIndex,MethodID,AlgorithmType,VerticalSize,HorizontalSize,AspectRatio,FrameRateCode,ProgressiveSequence) (This)->lpVtbl->EnumVideoCapability(This,FmtIndex,MethodID,AlgorithmType,VerticalSize,HorizontalSize,AspectRatio,FrameRateCode,ProgressiveSequence)
+#define IBDA_Encoder_SetParameters(This,AudioBitrateMode,AudioBitrate,AudioMethodID,AudioProgram,VideoBitrateMode,VideoBitrate,VideoMethodID) (This)->lpVtbl->SetParameters(This,AudioBitrateMode,AudioBitrate,AudioMethodID,AudioProgram,VideoBitrateMode,VideoBitrate,VideoMethodID)
+#define IBDA_Encoder_GetState(This,AudioBitrateMax,AudioBitrateMin,AudioBitrateMode,AudioBitrateStepping,AudioBitrate,AudioMethodID,AvailableAudioPrograms,AudioProgram,VideoBitrateMax,VideoBitrateMin,VideoBitrateMode,VideoBitrate,VideoBitrateStepping,VideoMethodID,SignalSourceID,SignalFormat,SignalLock,SignalLevel,SignalToNoiseRatio) (This)->lpVtbl->GetState(This,AudioBitrateMax,AudioBitrateMin,AudioBitrateMode,AudioBitrateStepping,AudioBitrate,AudioMethodID,AvailableAudioPrograms,AudioProgram,VideoBitrateMax,VideoBitrateMin,VideoBitrateMode,VideoBitrate,VideoBitrateStepping,VideoMethodID,SignalSourceID,SignalFormat,SignalLock,SignalLevel,SignalToNoiseRatio)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_Encoder_QueryInterface(IBDA_Encoder* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_Encoder_AddRef(IBDA_Encoder* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_Encoder_Release(IBDA_Encoder* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_Encoder methods ***/
+static FORCEINLINE HRESULT IBDA_Encoder_QueryCapabilities(IBDA_Encoder* This,DWORD *NumAudioFmts,DWORD *NumVideoFmts) {
+    return This->lpVtbl->QueryCapabilities(This,NumAudioFmts,NumVideoFmts);
+}
+static FORCEINLINE HRESULT IBDA_Encoder_EnumAudioCapability(IBDA_Encoder* This,DWORD FmtIndex,DWORD *MethodID,DWORD *AlgorithmType,DWORD *SamplingRate,DWORD *BitDepth,DWORD *NumChannels) {
+    return This->lpVtbl->EnumAudioCapability(This,FmtIndex,MethodID,AlgorithmType,SamplingRate,BitDepth,NumChannels);
+}
+static FORCEINLINE HRESULT IBDA_Encoder_EnumVideoCapability(IBDA_Encoder* This,DWORD FmtIndex,DWORD *MethodID,DWORD *AlgorithmType,DWORD *VerticalSize,DWORD *HorizontalSize,DWORD *AspectRatio,DWORD *FrameRateCode,DWORD *ProgressiveSequence) {
+    return This->lpVtbl->EnumVideoCapability(This,FmtIndex,MethodID,AlgorithmType,VerticalSize,HorizontalSize,AspectRatio,FrameRateCode,ProgressiveSequence);
+}
+static FORCEINLINE HRESULT IBDA_Encoder_SetParameters(IBDA_Encoder* This,DWORD AudioBitrateMode,DWORD AudioBitrate,DWORD AudioMethodID,DWORD AudioProgram,DWORD VideoBitrateMode,DWORD VideoBitrate,DWORD VideoMethodID) {
+    return This->lpVtbl->SetParameters(This,AudioBitrateMode,AudioBitrate,AudioMethodID,AudioProgram,VideoBitrateMode,VideoBitrate,VideoMethodID);
+}
+static FORCEINLINE HRESULT IBDA_Encoder_GetState(IBDA_Encoder* This,DWORD *AudioBitrateMax,DWORD *AudioBitrateMin,DWORD *AudioBitrateMode,DWORD *AudioBitrateStepping,DWORD *AudioBitrate,DWORD *AudioMethodID,DWORD *AvailableAudioPrograms,DWORD *AudioProgram,DWORD *VideoBitrateMax,DWORD *VideoBitrateMin,DWORD *VideoBitrateMode,DWORD *VideoBitrate,DWORD *VideoBitrateStepping,DWORD *VideoMethodID,DWORD *SignalSourceID,ULONGLONG *SignalFormat,WINBOOL *SignalLock,LONG *SignalLevel,DWORD *SignalToNoiseRatio) {
+    return This->lpVtbl->GetState(This,AudioBitrateMax,AudioBitrateMin,AudioBitrateMode,AudioBitrateStepping,AudioBitrate,AudioMethodID,AvailableAudioPrograms,AudioProgram,VideoBitrateMax,VideoBitrateMin,VideoBitrateMode,VideoBitrate,VideoBitrateStepping,VideoMethodID,SignalSourceID,SignalFormat,SignalLock,SignalLevel,SignalToNoiseRatio);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_Encoder_QueryCapabilities_Proxy(
+    IBDA_Encoder* This,
+    DWORD *NumAudioFmts,
+    DWORD *NumVideoFmts);
+void __RPC_STUB IBDA_Encoder_QueryCapabilities_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_Encoder_EnumAudioCapability_Proxy(
+    IBDA_Encoder* This,
+    DWORD FmtIndex,
+    DWORD *MethodID,
+    DWORD *AlgorithmType,
+    DWORD *SamplingRate,
+    DWORD *BitDepth,
+    DWORD *NumChannels);
+void __RPC_STUB IBDA_Encoder_EnumAudioCapability_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_Encoder_EnumVideoCapability_Proxy(
+    IBDA_Encoder* This,
+    DWORD FmtIndex,
+    DWORD *MethodID,
+    DWORD *AlgorithmType,
+    DWORD *VerticalSize,
+    DWORD *HorizontalSize,
+    DWORD *AspectRatio,
+    DWORD *FrameRateCode,
+    DWORD *ProgressiveSequence);
+void __RPC_STUB IBDA_Encoder_EnumVideoCapability_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_Encoder_SetParameters_Proxy(
+    IBDA_Encoder* This,
+    DWORD AudioBitrateMode,
+    DWORD AudioBitrate,
+    DWORD AudioMethodID,
+    DWORD AudioProgram,
+    DWORD VideoBitrateMode,
+    DWORD VideoBitrate,
+    DWORD VideoMethodID);
+void __RPC_STUB IBDA_Encoder_SetParameters_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_Encoder_GetState_Proxy(
+    IBDA_Encoder* This,
+    DWORD *AudioBitrateMax,
+    DWORD *AudioBitrateMin,
+    DWORD *AudioBitrateMode,
+    DWORD *AudioBitrateStepping,
+    DWORD *AudioBitrate,
+    DWORD *AudioMethodID,
+    DWORD *AvailableAudioPrograms,
+    DWORD *AudioProgram,
+    DWORD *VideoBitrateMax,
+    DWORD *VideoBitrateMin,
+    DWORD *VideoBitrateMode,
+    DWORD *VideoBitrate,
+    DWORD *VideoBitrateStepping,
+    DWORD *VideoMethodID,
+    DWORD *SignalSourceID,
+    ULONGLONG *SignalFormat,
+    WINBOOL *SignalLock,
+    LONG *SignalLevel,
+    DWORD *SignalToNoiseRatio);
+void __RPC_STUB IBDA_Encoder_GetState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_Encoder_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_FDC interface
+ */
+#ifndef __IBDA_FDC_INTERFACE_DEFINED__
+#define __IBDA_FDC_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_FDC, 0x138adc7e, 0x58ae, 0x437f, 0xb0,0xb4, 0xc9,0xfe,0x19,0xd5,0xb4,0xac);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("138adc7e-58ae-437f-b0b4-c9fe19d5b4ac")
+IBDA_FDC : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetStatus(
+        DWORD *CurrentBitrate,
+        WINBOOL *CarrierLock,
+        DWORD *CurrentFrequency,
+        WINBOOL *CurrentSpectrumInversion,
+        BSTR *CurrentPIDList,
+        BSTR *CurrentTIDList,
+        WINBOOL *Overflow) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RequestTables(
+        BSTR TableIDs) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddPid(
+        BSTR PidsToAdd,
+        DWORD *RemainingFilterEntries) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemovePid(
+        BSTR PidsToRemove) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddTid(
+        BSTR TidsToAdd,
+        BSTR *CurrentTidList) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveTid(
+        BSTR TidsToRemove) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTableSection(
+        DWORD *Pid,
+        DWORD MaxBufferSize,
+        DWORD *ActualSize,
+        BYTE *SecBuffer) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_FDC, 0x138adc7e, 0x58ae, 0x437f, 0xb0,0xb4, 0xc9,0xfe,0x19,0xd5,0xb4,0xac)
+#endif
+#else
+typedef struct IBDA_FDCVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_FDC* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_FDC* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_FDC* This);
+
+    /*** IBDA_FDC methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetStatus)(
+        IBDA_FDC* This,
+        DWORD *CurrentBitrate,
+        WINBOOL *CarrierLock,
+        DWORD *CurrentFrequency,
+        WINBOOL *CurrentSpectrumInversion,
+        BSTR *CurrentPIDList,
+        BSTR *CurrentTIDList,
+        WINBOOL *Overflow);
+
+    HRESULT (STDMETHODCALLTYPE *RequestTables)(
+        IBDA_FDC* This,
+        BSTR TableIDs);
+
+    HRESULT (STDMETHODCALLTYPE *AddPid)(
+        IBDA_FDC* This,
+        BSTR PidsToAdd,
+        DWORD *RemainingFilterEntries);
+
+    HRESULT (STDMETHODCALLTYPE *RemovePid)(
+        IBDA_FDC* This,
+        BSTR PidsToRemove);
+
+    HRESULT (STDMETHODCALLTYPE *AddTid)(
+        IBDA_FDC* This,
+        BSTR TidsToAdd,
+        BSTR *CurrentTidList);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveTid)(
+        IBDA_FDC* This,
+        BSTR TidsToRemove);
+
+    HRESULT (STDMETHODCALLTYPE *GetTableSection)(
+        IBDA_FDC* This,
+        DWORD *Pid,
+        DWORD MaxBufferSize,
+        DWORD *ActualSize,
+        BYTE *SecBuffer);
+
+    END_INTERFACE
+} IBDA_FDCVtbl;
+interface IBDA_FDC {
+    CONST_VTBL IBDA_FDCVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_FDC_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_FDC_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_FDC_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_FDC methods ***/
+#define IBDA_FDC_GetStatus(This,CurrentBitrate,CarrierLock,CurrentFrequency,CurrentSpectrumInversion,CurrentPIDList,CurrentTIDList,Overflow) (This)->lpVtbl->GetStatus(This,CurrentBitrate,CarrierLock,CurrentFrequency,CurrentSpectrumInversion,CurrentPIDList,CurrentTIDList,Overflow)
+#define IBDA_FDC_RequestTables(This,TableIDs) (This)->lpVtbl->RequestTables(This,TableIDs)
+#define IBDA_FDC_AddPid(This,PidsToAdd,RemainingFilterEntries) (This)->lpVtbl->AddPid(This,PidsToAdd,RemainingFilterEntries)
+#define IBDA_FDC_RemovePid(This,PidsToRemove) (This)->lpVtbl->RemovePid(This,PidsToRemove)
+#define IBDA_FDC_AddTid(This,TidsToAdd,CurrentTidList) (This)->lpVtbl->AddTid(This,TidsToAdd,CurrentTidList)
+#define IBDA_FDC_RemoveTid(This,TidsToRemove) (This)->lpVtbl->RemoveTid(This,TidsToRemove)
+#define IBDA_FDC_GetTableSection(This,Pid,MaxBufferSize,ActualSize,SecBuffer) (This)->lpVtbl->GetTableSection(This,Pid,MaxBufferSize,ActualSize,SecBuffer)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_FDC_QueryInterface(IBDA_FDC* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_FDC_AddRef(IBDA_FDC* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_FDC_Release(IBDA_FDC* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_FDC methods ***/
+static FORCEINLINE HRESULT IBDA_FDC_GetStatus(IBDA_FDC* This,DWORD *CurrentBitrate,WINBOOL *CarrierLock,DWORD *CurrentFrequency,WINBOOL *CurrentSpectrumInversion,BSTR *CurrentPIDList,BSTR *CurrentTIDList,WINBOOL *Overflow) {
+    return This->lpVtbl->GetStatus(This,CurrentBitrate,CarrierLock,CurrentFrequency,CurrentSpectrumInversion,CurrentPIDList,CurrentTIDList,Overflow);
+}
+static FORCEINLINE HRESULT IBDA_FDC_RequestTables(IBDA_FDC* This,BSTR TableIDs) {
+    return This->lpVtbl->RequestTables(This,TableIDs);
+}
+static FORCEINLINE HRESULT IBDA_FDC_AddPid(IBDA_FDC* This,BSTR PidsToAdd,DWORD *RemainingFilterEntries) {
+    return This->lpVtbl->AddPid(This,PidsToAdd,RemainingFilterEntries);
+}
+static FORCEINLINE HRESULT IBDA_FDC_RemovePid(IBDA_FDC* This,BSTR PidsToRemove) {
+    return This->lpVtbl->RemovePid(This,PidsToRemove);
+}
+static FORCEINLINE HRESULT IBDA_FDC_AddTid(IBDA_FDC* This,BSTR TidsToAdd,BSTR *CurrentTidList) {
+    return This->lpVtbl->AddTid(This,TidsToAdd,CurrentTidList);
+}
+static FORCEINLINE HRESULT IBDA_FDC_RemoveTid(IBDA_FDC* This,BSTR TidsToRemove) {
+    return This->lpVtbl->RemoveTid(This,TidsToRemove);
+}
+static FORCEINLINE HRESULT IBDA_FDC_GetTableSection(IBDA_FDC* This,DWORD *Pid,DWORD MaxBufferSize,DWORD *ActualSize,BYTE *SecBuffer) {
+    return This->lpVtbl->GetTableSection(This,Pid,MaxBufferSize,ActualSize,SecBuffer);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_FDC_GetStatus_Proxy(
+    IBDA_FDC* This,
+    DWORD *CurrentBitrate,
+    WINBOOL *CarrierLock,
+    DWORD *CurrentFrequency,
+    WINBOOL *CurrentSpectrumInversion,
+    BSTR *CurrentPIDList,
+    BSTR *CurrentTIDList,
+    WINBOOL *Overflow);
+void __RPC_STUB IBDA_FDC_GetStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_FDC_RequestTables_Proxy(
+    IBDA_FDC* This,
+    BSTR TableIDs);
+void __RPC_STUB IBDA_FDC_RequestTables_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_FDC_AddPid_Proxy(
+    IBDA_FDC* This,
+    BSTR PidsToAdd,
+    DWORD *RemainingFilterEntries);
+void __RPC_STUB IBDA_FDC_AddPid_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_FDC_RemovePid_Proxy(
+    IBDA_FDC* This,
+    BSTR PidsToRemove);
+void __RPC_STUB IBDA_FDC_RemovePid_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_FDC_AddTid_Proxy(
+    IBDA_FDC* This,
+    BSTR TidsToAdd,
+    BSTR *CurrentTidList);
+void __RPC_STUB IBDA_FDC_AddTid_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_FDC_RemoveTid_Proxy(
+    IBDA_FDC* This,
+    BSTR TidsToRemove);
+void __RPC_STUB IBDA_FDC_RemoveTid_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_FDC_GetTableSection_Proxy(
+    IBDA_FDC* This,
+    DWORD *Pid,
+    DWORD MaxBufferSize,
+    DWORD *ActualSize,
+    BYTE *SecBuffer);
+void __RPC_STUB IBDA_FDC_GetTableSection_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_FDC_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_GuideDataDeliveryService interface
+ */
+#ifndef __IBDA_GuideDataDeliveryService_INTERFACE_DEFINED__
+#define __IBDA_GuideDataDeliveryService_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_GuideDataDeliveryService, 0xc0afcb73, 0x23e7, 0x4bc6, 0xba,0xfa, 0xfd,0xc1,0x67,0xb4,0x71,0x9f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("c0afcb73-23e7-4bc6-bafa-fdc167b4719f")
+IBDA_GuideDataDeliveryService : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetGuideDataType(
+        GUID *pguidDataType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetGuideData(
+        ULONG *pulcbBufferLen,
+        BYTE *pbBuffer,
+        ULONG *pulGuideDataPercentageProgress) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RequestGuideDataUpdate(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTuneXmlFromServiceIdx(
+        ULONG64 ul64ServiceIdx,
+        BSTR *pbstrTuneXml) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetServices(
+        ULONG *pulcbBufferLen,
+        BYTE *pbBuffer) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetServiceInfoFromTuneXml(
+        BSTR bstrTuneXml,
+        BSTR *pbstrServiceDescription) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_GuideDataDeliveryService, 0xc0afcb73, 0x23e7, 0x4bc6, 0xba,0xfa, 0xfd,0xc1,0x67,0xb4,0x71,0x9f)
+#endif
+#else
+typedef struct IBDA_GuideDataDeliveryServiceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_GuideDataDeliveryService* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_GuideDataDeliveryService* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_GuideDataDeliveryService* This);
+
+    /*** IBDA_GuideDataDeliveryService methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetGuideDataType)(
+        IBDA_GuideDataDeliveryService* This,
+        GUID *pguidDataType);
+
+    HRESULT (STDMETHODCALLTYPE *GetGuideData)(
+        IBDA_GuideDataDeliveryService* This,
+        ULONG *pulcbBufferLen,
+        BYTE *pbBuffer,
+        ULONG *pulGuideDataPercentageProgress);
+
+    HRESULT (STDMETHODCALLTYPE *RequestGuideDataUpdate)(
+        IBDA_GuideDataDeliveryService* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetTuneXmlFromServiceIdx)(
+        IBDA_GuideDataDeliveryService* This,
+        ULONG64 ul64ServiceIdx,
+        BSTR *pbstrTuneXml);
+
+    HRESULT (STDMETHODCALLTYPE *GetServices)(
+        IBDA_GuideDataDeliveryService* This,
+        ULONG *pulcbBufferLen,
+        BYTE *pbBuffer);
+
+    HRESULT (STDMETHODCALLTYPE *GetServiceInfoFromTuneXml)(
+        IBDA_GuideDataDeliveryService* This,
+        BSTR bstrTuneXml,
+        BSTR *pbstrServiceDescription);
+
+    END_INTERFACE
+} IBDA_GuideDataDeliveryServiceVtbl;
+interface IBDA_GuideDataDeliveryService {
+    CONST_VTBL IBDA_GuideDataDeliveryServiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_GuideDataDeliveryService_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_GuideDataDeliveryService_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_GuideDataDeliveryService_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_GuideDataDeliveryService methods ***/
+#define IBDA_GuideDataDeliveryService_GetGuideDataType(This,pguidDataType) (This)->lpVtbl->GetGuideDataType(This,pguidDataType)
+#define IBDA_GuideDataDeliveryService_GetGuideData(This,pulcbBufferLen,pbBuffer,pulGuideDataPercentageProgress) (This)->lpVtbl->GetGuideData(This,pulcbBufferLen,pbBuffer,pulGuideDataPercentageProgress)
+#define IBDA_GuideDataDeliveryService_RequestGuideDataUpdate(This) (This)->lpVtbl->RequestGuideDataUpdate(This)
+#define IBDA_GuideDataDeliveryService_GetTuneXmlFromServiceIdx(This,ul64ServiceIdx,pbstrTuneXml) (This)->lpVtbl->GetTuneXmlFromServiceIdx(This,ul64ServiceIdx,pbstrTuneXml)
+#define IBDA_GuideDataDeliveryService_GetServices(This,pulcbBufferLen,pbBuffer) (This)->lpVtbl->GetServices(This,pulcbBufferLen,pbBuffer)
+#define IBDA_GuideDataDeliveryService_GetServiceInfoFromTuneXml(This,bstrTuneXml,pbstrServiceDescription) (This)->lpVtbl->GetServiceInfoFromTuneXml(This,bstrTuneXml,pbstrServiceDescription)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_GuideDataDeliveryService_QueryInterface(IBDA_GuideDataDeliveryService* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_GuideDataDeliveryService_AddRef(IBDA_GuideDataDeliveryService* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_GuideDataDeliveryService_Release(IBDA_GuideDataDeliveryService* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_GuideDataDeliveryService methods ***/
+static FORCEINLINE HRESULT IBDA_GuideDataDeliveryService_GetGuideDataType(IBDA_GuideDataDeliveryService* This,GUID *pguidDataType) {
+    return This->lpVtbl->GetGuideDataType(This,pguidDataType);
+}
+static FORCEINLINE HRESULT IBDA_GuideDataDeliveryService_GetGuideData(IBDA_GuideDataDeliveryService* This,ULONG *pulcbBufferLen,BYTE *pbBuffer,ULONG *pulGuideDataPercentageProgress) {
+    return This->lpVtbl->GetGuideData(This,pulcbBufferLen,pbBuffer,pulGuideDataPercentageProgress);
+}
+static FORCEINLINE HRESULT IBDA_GuideDataDeliveryService_RequestGuideDataUpdate(IBDA_GuideDataDeliveryService* This) {
+    return This->lpVtbl->RequestGuideDataUpdate(This);
+}
+static FORCEINLINE HRESULT IBDA_GuideDataDeliveryService_GetTuneXmlFromServiceIdx(IBDA_GuideDataDeliveryService* This,ULONG64 ul64ServiceIdx,BSTR *pbstrTuneXml) {
+    return This->lpVtbl->GetTuneXmlFromServiceIdx(This,ul64ServiceIdx,pbstrTuneXml);
+}
+static FORCEINLINE HRESULT IBDA_GuideDataDeliveryService_GetServices(IBDA_GuideDataDeliveryService* This,ULONG *pulcbBufferLen,BYTE *pbBuffer) {
+    return This->lpVtbl->GetServices(This,pulcbBufferLen,pbBuffer);
+}
+static FORCEINLINE HRESULT IBDA_GuideDataDeliveryService_GetServiceInfoFromTuneXml(IBDA_GuideDataDeliveryService* This,BSTR bstrTuneXml,BSTR *pbstrServiceDescription) {
+    return This->lpVtbl->GetServiceInfoFromTuneXml(This,bstrTuneXml,pbstrServiceDescription);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_GuideDataDeliveryService_GetGuideDataType_Proxy(
+    IBDA_GuideDataDeliveryService* This,
+    GUID *pguidDataType);
+void __RPC_STUB IBDA_GuideDataDeliveryService_GetGuideDataType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_GuideDataDeliveryService_GetGuideData_Proxy(
+    IBDA_GuideDataDeliveryService* This,
+    ULONG *pulcbBufferLen,
+    BYTE *pbBuffer,
+    ULONG *pulGuideDataPercentageProgress);
+void __RPC_STUB IBDA_GuideDataDeliveryService_GetGuideData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_GuideDataDeliveryService_RequestGuideDataUpdate_Proxy(
+    IBDA_GuideDataDeliveryService* This);
+void __RPC_STUB IBDA_GuideDataDeliveryService_RequestGuideDataUpdate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_GuideDataDeliveryService_GetTuneXmlFromServiceIdx_Proxy(
+    IBDA_GuideDataDeliveryService* This,
+    ULONG64 ul64ServiceIdx,
+    BSTR *pbstrTuneXml);
+void __RPC_STUB IBDA_GuideDataDeliveryService_GetTuneXmlFromServiceIdx_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_GuideDataDeliveryService_GetServices_Proxy(
+    IBDA_GuideDataDeliveryService* This,
+    ULONG *pulcbBufferLen,
+    BYTE *pbBuffer);
+void __RPC_STUB IBDA_GuideDataDeliveryService_GetServices_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_GuideDataDeliveryService_GetServiceInfoFromTuneXml_Proxy(
+    IBDA_GuideDataDeliveryService* This,
+    BSTR bstrTuneXml,
+    BSTR *pbstrServiceDescription);
+void __RPC_STUB IBDA_GuideDataDeliveryService_GetServiceInfoFromTuneXml_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_GuideDataDeliveryService_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_DRMService interface
+ */
+#ifndef __IBDA_DRMService_INTERFACE_DEFINED__
+#define __IBDA_DRMService_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_DRMService, 0xbff6b5bb, 0xb0ae, 0x484c, 0x9d,0xca, 0x73,0x52,0x8f,0xb0,0xb4,0x6e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("bff6b5bb-b0ae-484c-9dca-73528fb0b46e")
+IBDA_DRMService : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE SetDRM(
+        GUID *puuidNewDrm) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDRMStatus(
+        BSTR *pbstrDrmUuidList,
+        GUID *DrmUuid) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_DRMService, 0xbff6b5bb, 0xb0ae, 0x484c, 0x9d,0xca, 0x73,0x52,0x8f,0xb0,0xb4,0x6e)
+#endif
+#else
+typedef struct IBDA_DRMServiceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_DRMService* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_DRMService* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_DRMService* This);
+
+    /*** IBDA_DRMService methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetDRM)(
+        IBDA_DRMService* This,
+        GUID *puuidNewDrm);
+
+    HRESULT (STDMETHODCALLTYPE *GetDRMStatus)(
+        IBDA_DRMService* This,
+        BSTR *pbstrDrmUuidList,
+        GUID *DrmUuid);
+
+    END_INTERFACE
+} IBDA_DRMServiceVtbl;
+interface IBDA_DRMService {
+    CONST_VTBL IBDA_DRMServiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_DRMService_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_DRMService_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_DRMService_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_DRMService methods ***/
+#define IBDA_DRMService_SetDRM(This,puuidNewDrm) (This)->lpVtbl->SetDRM(This,puuidNewDrm)
+#define IBDA_DRMService_GetDRMStatus(This,pbstrDrmUuidList,DrmUuid) (This)->lpVtbl->GetDRMStatus(This,pbstrDrmUuidList,DrmUuid)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_DRMService_QueryInterface(IBDA_DRMService* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_DRMService_AddRef(IBDA_DRMService* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_DRMService_Release(IBDA_DRMService* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_DRMService methods ***/
+static FORCEINLINE HRESULT IBDA_DRMService_SetDRM(IBDA_DRMService* This,GUID *puuidNewDrm) {
+    return This->lpVtbl->SetDRM(This,puuidNewDrm);
+}
+static FORCEINLINE HRESULT IBDA_DRMService_GetDRMStatus(IBDA_DRMService* This,BSTR *pbstrDrmUuidList,GUID *DrmUuid) {
+    return This->lpVtbl->GetDRMStatus(This,pbstrDrmUuidList,DrmUuid);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_DRMService_SetDRM_Proxy(
+    IBDA_DRMService* This,
+    GUID *puuidNewDrm);
+void __RPC_STUB IBDA_DRMService_SetDRM_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DRMService_GetDRMStatus_Proxy(
+    IBDA_DRMService* This,
+    BSTR *pbstrDrmUuidList,
+    GUID *DrmUuid);
+void __RPC_STUB IBDA_DRMService_GetDRMStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_DRMService_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_WMDRMSession interface
+ */
+#ifndef __IBDA_WMDRMSession_INTERFACE_DEFINED__
+#define __IBDA_WMDRMSession_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_WMDRMSession, 0x4be6fa3d, 0x07cd, 0x4139, 0x8b,0x80, 0x8c,0x18,0xba,0x3a,0xec,0x88);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("4be6fa3d-07cd-4139-8b80-8c18ba3aec88")
+IBDA_WMDRMSession : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetStatus(
+        ULONG *MaxCaptureToken,
+        ULONG *MaxStreamingPid,
+        ULONG *MaxLicense,
+        ULONG *MinSecurityLevel,
+        ULONG *RevInfoSequenceNumber,
+        ULONGLONG *RevInfoIssuedTime,
+        ULONG *RevInfoTTL,
+        ULONG *RevListVersion,
+        ULONG *ulState) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetRevInfo(
+        ULONG ulRevInfoLen,
+        BYTE *pbRevInfo) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetCrl(
+        ULONG ulCrlLen,
+        BYTE *pbCrlLen) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE TransactMessage(
+        ULONG ulcbRequest,
+        BYTE *pbRequest,
+        ULONG *pulcbResponse,
+        BYTE *pbResponse) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLicense(
+        GUID *uuidKey,
+        ULONG *pulPackageLen,
+        BYTE *pbPackage) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ReissueLicense(
+        GUID *uuidKey) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RenewLicense(
+        ULONG ulInXmrLicenseLen,
+        BYTE *pbInXmrLicense,
+        ULONG ulEntitlementTokenLen,
+        BYTE *pbEntitlementToken,
+        ULONG *pulDescrambleStatus,
+        ULONG *pulOutXmrLicenseLen,
+        BYTE *pbOutXmrLicense) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetKeyInfo(
+        ULONG *pulKeyInfoLen,
+        BYTE *pbKeyInfo) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_WMDRMSession, 0x4be6fa3d, 0x07cd, 0x4139, 0x8b,0x80, 0x8c,0x18,0xba,0x3a,0xec,0x88)
+#endif
+#else
+typedef struct IBDA_WMDRMSessionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_WMDRMSession* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_WMDRMSession* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_WMDRMSession* This);
+
+    /*** IBDA_WMDRMSession methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetStatus)(
+        IBDA_WMDRMSession* This,
+        ULONG *MaxCaptureToken,
+        ULONG *MaxStreamingPid,
+        ULONG *MaxLicense,
+        ULONG *MinSecurityLevel,
+        ULONG *RevInfoSequenceNumber,
+        ULONGLONG *RevInfoIssuedTime,
+        ULONG *RevInfoTTL,
+        ULONG *RevListVersion,
+        ULONG *ulState);
+
+    HRESULT (STDMETHODCALLTYPE *SetRevInfo)(
+        IBDA_WMDRMSession* This,
+        ULONG ulRevInfoLen,
+        BYTE *pbRevInfo);
+
+    HRESULT (STDMETHODCALLTYPE *SetCrl)(
+        IBDA_WMDRMSession* This,
+        ULONG ulCrlLen,
+        BYTE *pbCrlLen);
+
+    HRESULT (STDMETHODCALLTYPE *TransactMessage)(
+        IBDA_WMDRMSession* This,
+        ULONG ulcbRequest,
+        BYTE *pbRequest,
+        ULONG *pulcbResponse,
+        BYTE *pbResponse);
+
+    HRESULT (STDMETHODCALLTYPE *GetLicense)(
+        IBDA_WMDRMSession* This,
+        GUID *uuidKey,
+        ULONG *pulPackageLen,
+        BYTE *pbPackage);
+
+    HRESULT (STDMETHODCALLTYPE *ReissueLicense)(
+        IBDA_WMDRMSession* This,
+        GUID *uuidKey);
+
+    HRESULT (STDMETHODCALLTYPE *RenewLicense)(
+        IBDA_WMDRMSession* This,
+        ULONG ulInXmrLicenseLen,
+        BYTE *pbInXmrLicense,
+        ULONG ulEntitlementTokenLen,
+        BYTE *pbEntitlementToken,
+        ULONG *pulDescrambleStatus,
+        ULONG *pulOutXmrLicenseLen,
+        BYTE *pbOutXmrLicense);
+
+    HRESULT (STDMETHODCALLTYPE *GetKeyInfo)(
+        IBDA_WMDRMSession* This,
+        ULONG *pulKeyInfoLen,
+        BYTE *pbKeyInfo);
+
+    END_INTERFACE
+} IBDA_WMDRMSessionVtbl;
+interface IBDA_WMDRMSession {
+    CONST_VTBL IBDA_WMDRMSessionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_WMDRMSession_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_WMDRMSession_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_WMDRMSession_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_WMDRMSession methods ***/
+#define IBDA_WMDRMSession_GetStatus(This,MaxCaptureToken,MaxStreamingPid,MaxLicense,MinSecurityLevel,RevInfoSequenceNumber,RevInfoIssuedTime,RevInfoTTL,RevListVersion,ulState) (This)->lpVtbl->GetStatus(This,MaxCaptureToken,MaxStreamingPid,MaxLicense,MinSecurityLevel,RevInfoSequenceNumber,RevInfoIssuedTime,RevInfoTTL,RevListVersion,ulState)
+#define IBDA_WMDRMSession_SetRevInfo(This,ulRevInfoLen,pbRevInfo) (This)->lpVtbl->SetRevInfo(This,ulRevInfoLen,pbRevInfo)
+#define IBDA_WMDRMSession_SetCrl(This,ulCrlLen,pbCrlLen) (This)->lpVtbl->SetCrl(This,ulCrlLen,pbCrlLen)
+#define IBDA_WMDRMSession_TransactMessage(This,ulcbRequest,pbRequest,pulcbResponse,pbResponse) (This)->lpVtbl->TransactMessage(This,ulcbRequest,pbRequest,pulcbResponse,pbResponse)
+#define IBDA_WMDRMSession_GetLicense(This,uuidKey,pulPackageLen,pbPackage) (This)->lpVtbl->GetLicense(This,uuidKey,pulPackageLen,pbPackage)
+#define IBDA_WMDRMSession_ReissueLicense(This,uuidKey) (This)->lpVtbl->ReissueLicense(This,uuidKey)
+#define IBDA_WMDRMSession_RenewLicense(This,ulInXmrLicenseLen,pbInXmrLicense,ulEntitlementTokenLen,pbEntitlementToken,pulDescrambleStatus,pulOutXmrLicenseLen,pbOutXmrLicense) (This)->lpVtbl->RenewLicense(This,ulInXmrLicenseLen,pbInXmrLicense,ulEntitlementTokenLen,pbEntitlementToken,pulDescrambleStatus,pulOutXmrLicenseLen,pbOutXmrLicense)
+#define IBDA_WMDRMSession_GetKeyInfo(This,pulKeyInfoLen,pbKeyInfo) (This)->lpVtbl->GetKeyInfo(This,pulKeyInfoLen,pbKeyInfo)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_WMDRMSession_QueryInterface(IBDA_WMDRMSession* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_WMDRMSession_AddRef(IBDA_WMDRMSession* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_WMDRMSession_Release(IBDA_WMDRMSession* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_WMDRMSession methods ***/
+static FORCEINLINE HRESULT IBDA_WMDRMSession_GetStatus(IBDA_WMDRMSession* This,ULONG *MaxCaptureToken,ULONG *MaxStreamingPid,ULONG *MaxLicense,ULONG *MinSecurityLevel,ULONG *RevInfoSequenceNumber,ULONGLONG *RevInfoIssuedTime,ULONG *RevInfoTTL,ULONG *RevListVersion,ULONG *ulState) {
+    return This->lpVtbl->GetStatus(This,MaxCaptureToken,MaxStreamingPid,MaxLicense,MinSecurityLevel,RevInfoSequenceNumber,RevInfoIssuedTime,RevInfoTTL,RevListVersion,ulState);
+}
+static FORCEINLINE HRESULT IBDA_WMDRMSession_SetRevInfo(IBDA_WMDRMSession* This,ULONG ulRevInfoLen,BYTE *pbRevInfo) {
+    return This->lpVtbl->SetRevInfo(This,ulRevInfoLen,pbRevInfo);
+}
+static FORCEINLINE HRESULT IBDA_WMDRMSession_SetCrl(IBDA_WMDRMSession* This,ULONG ulCrlLen,BYTE *pbCrlLen) {
+    return This->lpVtbl->SetCrl(This,ulCrlLen,pbCrlLen);
+}
+static FORCEINLINE HRESULT IBDA_WMDRMSession_TransactMessage(IBDA_WMDRMSession* This,ULONG ulcbRequest,BYTE *pbRequest,ULONG *pulcbResponse,BYTE *pbResponse) {
+    return This->lpVtbl->TransactMessage(This,ulcbRequest,pbRequest,pulcbResponse,pbResponse);
+}
+static FORCEINLINE HRESULT IBDA_WMDRMSession_GetLicense(IBDA_WMDRMSession* This,GUID *uuidKey,ULONG *pulPackageLen,BYTE *pbPackage) {
+    return This->lpVtbl->GetLicense(This,uuidKey,pulPackageLen,pbPackage);
+}
+static FORCEINLINE HRESULT IBDA_WMDRMSession_ReissueLicense(IBDA_WMDRMSession* This,GUID *uuidKey) {
+    return This->lpVtbl->ReissueLicense(This,uuidKey);
+}
+static FORCEINLINE HRESULT IBDA_WMDRMSession_RenewLicense(IBDA_WMDRMSession* This,ULONG ulInXmrLicenseLen,BYTE *pbInXmrLicense,ULONG ulEntitlementTokenLen,BYTE *pbEntitlementToken,ULONG *pulDescrambleStatus,ULONG *pulOutXmrLicenseLen,BYTE *pbOutXmrLicense) {
+    return This->lpVtbl->RenewLicense(This,ulInXmrLicenseLen,pbInXmrLicense,ulEntitlementTokenLen,pbEntitlementToken,pulDescrambleStatus,pulOutXmrLicenseLen,pbOutXmrLicense);
+}
+static FORCEINLINE HRESULT IBDA_WMDRMSession_GetKeyInfo(IBDA_WMDRMSession* This,ULONG *pulKeyInfoLen,BYTE *pbKeyInfo) {
+    return This->lpVtbl->GetKeyInfo(This,pulKeyInfoLen,pbKeyInfo);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_WMDRMSession_GetStatus_Proxy(
+    IBDA_WMDRMSession* This,
+    ULONG *MaxCaptureToken,
+    ULONG *MaxStreamingPid,
+    ULONG *MaxLicense,
+    ULONG *MinSecurityLevel,
+    ULONG *RevInfoSequenceNumber,
+    ULONGLONG *RevInfoIssuedTime,
+    ULONG *RevInfoTTL,
+    ULONG *RevListVersion,
+    ULONG *ulState);
+void __RPC_STUB IBDA_WMDRMSession_GetStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_WMDRMSession_SetRevInfo_Proxy(
+    IBDA_WMDRMSession* This,
+    ULONG ulRevInfoLen,
+    BYTE *pbRevInfo);
+void __RPC_STUB IBDA_WMDRMSession_SetRevInfo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_WMDRMSession_SetCrl_Proxy(
+    IBDA_WMDRMSession* This,
+    ULONG ulCrlLen,
+    BYTE *pbCrlLen);
+void __RPC_STUB IBDA_WMDRMSession_SetCrl_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_WMDRMSession_TransactMessage_Proxy(
+    IBDA_WMDRMSession* This,
+    ULONG ulcbRequest,
+    BYTE *pbRequest,
+    ULONG *pulcbResponse,
+    BYTE *pbResponse);
+void __RPC_STUB IBDA_WMDRMSession_TransactMessage_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_WMDRMSession_GetLicense_Proxy(
+    IBDA_WMDRMSession* This,
+    GUID *uuidKey,
+    ULONG *pulPackageLen,
+    BYTE *pbPackage);
+void __RPC_STUB IBDA_WMDRMSession_GetLicense_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_WMDRMSession_ReissueLicense_Proxy(
+    IBDA_WMDRMSession* This,
+    GUID *uuidKey);
+void __RPC_STUB IBDA_WMDRMSession_ReissueLicense_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_WMDRMSession_RenewLicense_Proxy(
+    IBDA_WMDRMSession* This,
+    ULONG ulInXmrLicenseLen,
+    BYTE *pbInXmrLicense,
+    ULONG ulEntitlementTokenLen,
+    BYTE *pbEntitlementToken,
+    ULONG *pulDescrambleStatus,
+    ULONG *pulOutXmrLicenseLen,
+    BYTE *pbOutXmrLicense);
+void __RPC_STUB IBDA_WMDRMSession_RenewLicense_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_WMDRMSession_GetKeyInfo_Proxy(
+    IBDA_WMDRMSession* This,
+    ULONG *pulKeyInfoLen,
+    BYTE *pbKeyInfo);
+void __RPC_STUB IBDA_WMDRMSession_GetKeyInfo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_WMDRMSession_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_WMDRMTuner interface
+ */
+#ifndef __IBDA_WMDRMTuner_INTERFACE_DEFINED__
+#define __IBDA_WMDRMTuner_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_WMDRMTuner, 0x86d979cf, 0xa8a7, 0x4f94, 0xb5,0xfb, 0x14,0xc0,0xac,0xa6,0x8f,0xe6);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("86d979cf-a8a7-4f94-b5fb-14c0aca68fe6")
+IBDA_WMDRMTuner : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE PurchaseEntitlement(
+        ULONG ulDialogRequest,
+        BSTR bstrLanguage,
+        ULONG ulPurchaseTokenLen,
+        BYTE *pbPurchaseToken,
+        ULONG *pulDescrambleStatus,
+        ULONG *pulCaptureTokenLen,
+        BYTE *pbCaptureToken) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CancelCaptureToken(
+        ULONG ulCaptureTokenLen,
+        BYTE *pbCaptureToken) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPidProtection(
+        ULONG ulPid,
+        GUID *uuidKey) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPidProtection(
+        ULONG pulPid,
+        GUID *uuidKey) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetSyncValue(
+        ULONG ulSyncValue) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetStartCodeProfile(
+        ULONG *pulStartCodeProfileLen,
+        BYTE *pbStartCodeProfile) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_WMDRMTuner, 0x86d979cf, 0xa8a7, 0x4f94, 0xb5,0xfb, 0x14,0xc0,0xac,0xa6,0x8f,0xe6)
+#endif
+#else
+typedef struct IBDA_WMDRMTunerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_WMDRMTuner* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_WMDRMTuner* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_WMDRMTuner* This);
+
+    /*** IBDA_WMDRMTuner methods ***/
+    HRESULT (STDMETHODCALLTYPE *PurchaseEntitlement)(
+        IBDA_WMDRMTuner* This,
+        ULONG ulDialogRequest,
+        BSTR bstrLanguage,
+        ULONG ulPurchaseTokenLen,
+        BYTE *pbPurchaseToken,
+        ULONG *pulDescrambleStatus,
+        ULONG *pulCaptureTokenLen,
+        BYTE *pbCaptureToken);
+
+    HRESULT (STDMETHODCALLTYPE *CancelCaptureToken)(
+        IBDA_WMDRMTuner* This,
+        ULONG ulCaptureTokenLen,
+        BYTE *pbCaptureToken);
+
+    HRESULT (STDMETHODCALLTYPE *SetPidProtection)(
+        IBDA_WMDRMTuner* This,
+        ULONG ulPid,
+        GUID *uuidKey);
+
+    HRESULT (STDMETHODCALLTYPE *GetPidProtection)(
+        IBDA_WMDRMTuner* This,
+        ULONG pulPid,
+        GUID *uuidKey);
+
+    HRESULT (STDMETHODCALLTYPE *SetSyncValue)(
+        IBDA_WMDRMTuner* This,
+        ULONG ulSyncValue);
+
+    HRESULT (STDMETHODCALLTYPE *GetStartCodeProfile)(
+        IBDA_WMDRMTuner* This,
+        ULONG *pulStartCodeProfileLen,
+        BYTE *pbStartCodeProfile);
+
+    END_INTERFACE
+} IBDA_WMDRMTunerVtbl;
+interface IBDA_WMDRMTuner {
+    CONST_VTBL IBDA_WMDRMTunerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_WMDRMTuner_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_WMDRMTuner_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_WMDRMTuner_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_WMDRMTuner methods ***/
+#define IBDA_WMDRMTuner_PurchaseEntitlement(This,ulDialogRequest,bstrLanguage,ulPurchaseTokenLen,pbPurchaseToken,pulDescrambleStatus,pulCaptureTokenLen,pbCaptureToken) (This)->lpVtbl->PurchaseEntitlement(This,ulDialogRequest,bstrLanguage,ulPurchaseTokenLen,pbPurchaseToken,pulDescrambleStatus,pulCaptureTokenLen,pbCaptureToken)
+#define IBDA_WMDRMTuner_CancelCaptureToken(This,ulCaptureTokenLen,pbCaptureToken) (This)->lpVtbl->CancelCaptureToken(This,ulCaptureTokenLen,pbCaptureToken)
+#define IBDA_WMDRMTuner_SetPidProtection(This,ulPid,uuidKey) (This)->lpVtbl->SetPidProtection(This,ulPid,uuidKey)
+#define IBDA_WMDRMTuner_GetPidProtection(This,pulPid,uuidKey) (This)->lpVtbl->GetPidProtection(This,pulPid,uuidKey)
+#define IBDA_WMDRMTuner_SetSyncValue(This,ulSyncValue) (This)->lpVtbl->SetSyncValue(This,ulSyncValue)
+#define IBDA_WMDRMTuner_GetStartCodeProfile(This,pulStartCodeProfileLen,pbStartCodeProfile) (This)->lpVtbl->GetStartCodeProfile(This,pulStartCodeProfileLen,pbStartCodeProfile)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_WMDRMTuner_QueryInterface(IBDA_WMDRMTuner* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_WMDRMTuner_AddRef(IBDA_WMDRMTuner* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_WMDRMTuner_Release(IBDA_WMDRMTuner* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_WMDRMTuner methods ***/
+static FORCEINLINE HRESULT IBDA_WMDRMTuner_PurchaseEntitlement(IBDA_WMDRMTuner* This,ULONG ulDialogRequest,BSTR bstrLanguage,ULONG ulPurchaseTokenLen,BYTE *pbPurchaseToken,ULONG *pulDescrambleStatus,ULONG *pulCaptureTokenLen,BYTE *pbCaptureToken) {
+    return This->lpVtbl->PurchaseEntitlement(This,ulDialogRequest,bstrLanguage,ulPurchaseTokenLen,pbPurchaseToken,pulDescrambleStatus,pulCaptureTokenLen,pbCaptureToken);
+}
+static FORCEINLINE HRESULT IBDA_WMDRMTuner_CancelCaptureToken(IBDA_WMDRMTuner* This,ULONG ulCaptureTokenLen,BYTE *pbCaptureToken) {
+    return This->lpVtbl->CancelCaptureToken(This,ulCaptureTokenLen,pbCaptureToken);
+}
+static FORCEINLINE HRESULT IBDA_WMDRMTuner_SetPidProtection(IBDA_WMDRMTuner* This,ULONG ulPid,GUID *uuidKey) {
+    return This->lpVtbl->SetPidProtection(This,ulPid,uuidKey);
+}
+static FORCEINLINE HRESULT IBDA_WMDRMTuner_GetPidProtection(IBDA_WMDRMTuner* This,ULONG pulPid,GUID *uuidKey) {
+    return This->lpVtbl->GetPidProtection(This,pulPid,uuidKey);
+}
+static FORCEINLINE HRESULT IBDA_WMDRMTuner_SetSyncValue(IBDA_WMDRMTuner* This,ULONG ulSyncValue) {
+    return This->lpVtbl->SetSyncValue(This,ulSyncValue);
+}
+static FORCEINLINE HRESULT IBDA_WMDRMTuner_GetStartCodeProfile(IBDA_WMDRMTuner* This,ULONG *pulStartCodeProfileLen,BYTE *pbStartCodeProfile) {
+    return This->lpVtbl->GetStartCodeProfile(This,pulStartCodeProfileLen,pbStartCodeProfile);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_WMDRMTuner_PurchaseEntitlement_Proxy(
+    IBDA_WMDRMTuner* This,
+    ULONG ulDialogRequest,
+    BSTR bstrLanguage,
+    ULONG ulPurchaseTokenLen,
+    BYTE *pbPurchaseToken,
+    ULONG *pulDescrambleStatus,
+    ULONG *pulCaptureTokenLen,
+    BYTE *pbCaptureToken);
+void __RPC_STUB IBDA_WMDRMTuner_PurchaseEntitlement_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_WMDRMTuner_CancelCaptureToken_Proxy(
+    IBDA_WMDRMTuner* This,
+    ULONG ulCaptureTokenLen,
+    BYTE *pbCaptureToken);
+void __RPC_STUB IBDA_WMDRMTuner_CancelCaptureToken_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_WMDRMTuner_SetPidProtection_Proxy(
+    IBDA_WMDRMTuner* This,
+    ULONG ulPid,
+    GUID *uuidKey);
+void __RPC_STUB IBDA_WMDRMTuner_SetPidProtection_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_WMDRMTuner_GetPidProtection_Proxy(
+    IBDA_WMDRMTuner* This,
+    ULONG pulPid,
+    GUID *uuidKey);
+void __RPC_STUB IBDA_WMDRMTuner_GetPidProtection_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_WMDRMTuner_SetSyncValue_Proxy(
+    IBDA_WMDRMTuner* This,
+    ULONG ulSyncValue);
+void __RPC_STUB IBDA_WMDRMTuner_SetSyncValue_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_WMDRMTuner_GetStartCodeProfile_Proxy(
+    IBDA_WMDRMTuner* This,
+    ULONG *pulStartCodeProfileLen,
+    BYTE *pbStartCodeProfile);
+void __RPC_STUB IBDA_WMDRMTuner_GetStartCodeProfile_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_WMDRMTuner_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_DRIDRMService interface
+ */
+#ifndef __IBDA_DRIDRMService_INTERFACE_DEFINED__
+#define __IBDA_DRIDRMService_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_DRIDRMService, 0x1f9bc2a5, 0x44a3, 0x4c52, 0xaa,0xb1, 0x0b,0xbc,0xe5,0xa1,0x38,0x1d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("1f9bc2a5-44a3-4c52-aab1-0bbce5a1381d")
+IBDA_DRIDRMService : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE SetDRM(
+        BSTR bstrNewDrm) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDRMStatus(
+        BSTR *pbstrDrmUuidList,
+        GUID *DrmUuid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPairingStatus(
+        BDA_DrmPairingError *penumPairingStatus) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_DRIDRMService, 0x1f9bc2a5, 0x44a3, 0x4c52, 0xaa,0xb1, 0x0b,0xbc,0xe5,0xa1,0x38,0x1d)
+#endif
+#else
+typedef struct IBDA_DRIDRMServiceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_DRIDRMService* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_DRIDRMService* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_DRIDRMService* This);
+
+    /*** IBDA_DRIDRMService methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetDRM)(
+        IBDA_DRIDRMService* This,
+        BSTR bstrNewDrm);
+
+    HRESULT (STDMETHODCALLTYPE *GetDRMStatus)(
+        IBDA_DRIDRMService* This,
+        BSTR *pbstrDrmUuidList,
+        GUID *DrmUuid);
+
+    HRESULT (STDMETHODCALLTYPE *GetPairingStatus)(
+        IBDA_DRIDRMService* This,
+        BDA_DrmPairingError *penumPairingStatus);
+
+    END_INTERFACE
+} IBDA_DRIDRMServiceVtbl;
+interface IBDA_DRIDRMService {
+    CONST_VTBL IBDA_DRIDRMServiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_DRIDRMService_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_DRIDRMService_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_DRIDRMService_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_DRIDRMService methods ***/
+#define IBDA_DRIDRMService_SetDRM(This,bstrNewDrm) (This)->lpVtbl->SetDRM(This,bstrNewDrm)
+#define IBDA_DRIDRMService_GetDRMStatus(This,pbstrDrmUuidList,DrmUuid) (This)->lpVtbl->GetDRMStatus(This,pbstrDrmUuidList,DrmUuid)
+#define IBDA_DRIDRMService_GetPairingStatus(This,penumPairingStatus) (This)->lpVtbl->GetPairingStatus(This,penumPairingStatus)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_DRIDRMService_QueryInterface(IBDA_DRIDRMService* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_DRIDRMService_AddRef(IBDA_DRIDRMService* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_DRIDRMService_Release(IBDA_DRIDRMService* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_DRIDRMService methods ***/
+static FORCEINLINE HRESULT IBDA_DRIDRMService_SetDRM(IBDA_DRIDRMService* This,BSTR bstrNewDrm) {
+    return This->lpVtbl->SetDRM(This,bstrNewDrm);
+}
+static FORCEINLINE HRESULT IBDA_DRIDRMService_GetDRMStatus(IBDA_DRIDRMService* This,BSTR *pbstrDrmUuidList,GUID *DrmUuid) {
+    return This->lpVtbl->GetDRMStatus(This,pbstrDrmUuidList,DrmUuid);
+}
+static FORCEINLINE HRESULT IBDA_DRIDRMService_GetPairingStatus(IBDA_DRIDRMService* This,BDA_DrmPairingError *penumPairingStatus) {
+    return This->lpVtbl->GetPairingStatus(This,penumPairingStatus);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_DRIDRMService_SetDRM_Proxy(
+    IBDA_DRIDRMService* This,
+    BSTR bstrNewDrm);
+void __RPC_STUB IBDA_DRIDRMService_SetDRM_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DRIDRMService_GetDRMStatus_Proxy(
+    IBDA_DRIDRMService* This,
+    BSTR *pbstrDrmUuidList,
+    GUID *DrmUuid);
+void __RPC_STUB IBDA_DRIDRMService_GetDRMStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DRIDRMService_GetPairingStatus_Proxy(
+    IBDA_DRIDRMService* This,
+    BDA_DrmPairingError *penumPairingStatus);
+void __RPC_STUB IBDA_DRIDRMService_GetPairingStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_DRIDRMService_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_DRIWMDRMSession interface
+ */
+#ifndef __IBDA_DRIWMDRMSession_INTERFACE_DEFINED__
+#define __IBDA_DRIWMDRMSession_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_DRIWMDRMSession, 0x05c690f8, 0x56db, 0x4bb2, 0xb0,0x53, 0x79,0xc1,0x20,0x98,0xbb,0x26);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("05c690f8-56db-4bb2-b053-79c12098bb26")
+IBDA_DRIWMDRMSession : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE AcknowledgeLicense(
+        HRESULT hrLicenseAck) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ProcessLicenseChallenge(
+        DWORD dwcbLicenseMessage,
+        BYTE *pbLicenseMessage,
+        DWORD *pdwcbLicenseResponse,
+        BYTE **ppbLicenseResponse) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ProcessRegistrationChallenge(
+        DWORD dwcbRegistrationMessage,
+        BYTE *pbRegistrationMessage,
+        DWORD *pdwcbRegistrationResponse,
+        BYTE **ppbRegistrationResponse) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetRevInfo(
+        DWORD dwRevInfoLen,
+        BYTE *pbRevInfo,
+        DWORD *pdwResponse) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetCrl(
+        DWORD dwCrlLen,
+        BYTE *pbCrlLen,
+        DWORD *pdwResponse) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetHMSAssociationData(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLastCardeaError(
+        DWORD *pdwError) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_DRIWMDRMSession, 0x05c690f8, 0x56db, 0x4bb2, 0xb0,0x53, 0x79,0xc1,0x20,0x98,0xbb,0x26)
+#endif
+#else
+typedef struct IBDA_DRIWMDRMSessionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_DRIWMDRMSession* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_DRIWMDRMSession* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_DRIWMDRMSession* This);
+
+    /*** IBDA_DRIWMDRMSession methods ***/
+    HRESULT (STDMETHODCALLTYPE *AcknowledgeLicense)(
+        IBDA_DRIWMDRMSession* This,
+        HRESULT hrLicenseAck);
+
+    HRESULT (STDMETHODCALLTYPE *ProcessLicenseChallenge)(
+        IBDA_DRIWMDRMSession* This,
+        DWORD dwcbLicenseMessage,
+        BYTE *pbLicenseMessage,
+        DWORD *pdwcbLicenseResponse,
+        BYTE **ppbLicenseResponse);
+
+    HRESULT (STDMETHODCALLTYPE *ProcessRegistrationChallenge)(
+        IBDA_DRIWMDRMSession* This,
+        DWORD dwcbRegistrationMessage,
+        BYTE *pbRegistrationMessage,
+        DWORD *pdwcbRegistrationResponse,
+        BYTE **ppbRegistrationResponse);
+
+    HRESULT (STDMETHODCALLTYPE *SetRevInfo)(
+        IBDA_DRIWMDRMSession* This,
+        DWORD dwRevInfoLen,
+        BYTE *pbRevInfo,
+        DWORD *pdwResponse);
+
+    HRESULT (STDMETHODCALLTYPE *SetCrl)(
+        IBDA_DRIWMDRMSession* This,
+        DWORD dwCrlLen,
+        BYTE *pbCrlLen,
+        DWORD *pdwResponse);
+
+    HRESULT (STDMETHODCALLTYPE *GetHMSAssociationData)(
+        IBDA_DRIWMDRMSession* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetLastCardeaError)(
+        IBDA_DRIWMDRMSession* This,
+        DWORD *pdwError);
+
+    END_INTERFACE
+} IBDA_DRIWMDRMSessionVtbl;
+interface IBDA_DRIWMDRMSession {
+    CONST_VTBL IBDA_DRIWMDRMSessionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_DRIWMDRMSession_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_DRIWMDRMSession_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_DRIWMDRMSession_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_DRIWMDRMSession methods ***/
+#define IBDA_DRIWMDRMSession_AcknowledgeLicense(This,hrLicenseAck) (This)->lpVtbl->AcknowledgeLicense(This,hrLicenseAck)
+#define IBDA_DRIWMDRMSession_ProcessLicenseChallenge(This,dwcbLicenseMessage,pbLicenseMessage,pdwcbLicenseResponse,ppbLicenseResponse) (This)->lpVtbl->ProcessLicenseChallenge(This,dwcbLicenseMessage,pbLicenseMessage,pdwcbLicenseResponse,ppbLicenseResponse)
+#define IBDA_DRIWMDRMSession_ProcessRegistrationChallenge(This,dwcbRegistrationMessage,pbRegistrationMessage,pdwcbRegistrationResponse,ppbRegistrationResponse) (This)->lpVtbl->ProcessRegistrationChallenge(This,dwcbRegistrationMessage,pbRegistrationMessage,pdwcbRegistrationResponse,ppbRegistrationResponse)
+#define IBDA_DRIWMDRMSession_SetRevInfo(This,dwRevInfoLen,pbRevInfo,pdwResponse) (This)->lpVtbl->SetRevInfo(This,dwRevInfoLen,pbRevInfo,pdwResponse)
+#define IBDA_DRIWMDRMSession_SetCrl(This,dwCrlLen,pbCrlLen,pdwResponse) (This)->lpVtbl->SetCrl(This,dwCrlLen,pbCrlLen,pdwResponse)
+#define IBDA_DRIWMDRMSession_GetHMSAssociationData(This) (This)->lpVtbl->GetHMSAssociationData(This)
+#define IBDA_DRIWMDRMSession_GetLastCardeaError(This,pdwError) (This)->lpVtbl->GetLastCardeaError(This,pdwError)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_DRIWMDRMSession_QueryInterface(IBDA_DRIWMDRMSession* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_DRIWMDRMSession_AddRef(IBDA_DRIWMDRMSession* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_DRIWMDRMSession_Release(IBDA_DRIWMDRMSession* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_DRIWMDRMSession methods ***/
+static FORCEINLINE HRESULT IBDA_DRIWMDRMSession_AcknowledgeLicense(IBDA_DRIWMDRMSession* This,HRESULT hrLicenseAck) {
+    return This->lpVtbl->AcknowledgeLicense(This,hrLicenseAck);
+}
+static FORCEINLINE HRESULT IBDA_DRIWMDRMSession_ProcessLicenseChallenge(IBDA_DRIWMDRMSession* This,DWORD dwcbLicenseMessage,BYTE *pbLicenseMessage,DWORD *pdwcbLicenseResponse,BYTE **ppbLicenseResponse) {
+    return This->lpVtbl->ProcessLicenseChallenge(This,dwcbLicenseMessage,pbLicenseMessage,pdwcbLicenseResponse,ppbLicenseResponse);
+}
+static FORCEINLINE HRESULT IBDA_DRIWMDRMSession_ProcessRegistrationChallenge(IBDA_DRIWMDRMSession* This,DWORD dwcbRegistrationMessage,BYTE *pbRegistrationMessage,DWORD *pdwcbRegistrationResponse,BYTE **ppbRegistrationResponse) {
+    return This->lpVtbl->ProcessRegistrationChallenge(This,dwcbRegistrationMessage,pbRegistrationMessage,pdwcbRegistrationResponse,ppbRegistrationResponse);
+}
+static FORCEINLINE HRESULT IBDA_DRIWMDRMSession_SetRevInfo(IBDA_DRIWMDRMSession* This,DWORD dwRevInfoLen,BYTE *pbRevInfo,DWORD *pdwResponse) {
+    return This->lpVtbl->SetRevInfo(This,dwRevInfoLen,pbRevInfo,pdwResponse);
+}
+static FORCEINLINE HRESULT IBDA_DRIWMDRMSession_SetCrl(IBDA_DRIWMDRMSession* This,DWORD dwCrlLen,BYTE *pbCrlLen,DWORD *pdwResponse) {
+    return This->lpVtbl->SetCrl(This,dwCrlLen,pbCrlLen,pdwResponse);
+}
+static FORCEINLINE HRESULT IBDA_DRIWMDRMSession_GetHMSAssociationData(IBDA_DRIWMDRMSession* This) {
+    return This->lpVtbl->GetHMSAssociationData(This);
+}
+static FORCEINLINE HRESULT IBDA_DRIWMDRMSession_GetLastCardeaError(IBDA_DRIWMDRMSession* This,DWORD *pdwError) {
+    return This->lpVtbl->GetLastCardeaError(This,pdwError);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_DRIWMDRMSession_AcknowledgeLicense_Proxy(
+    IBDA_DRIWMDRMSession* This,
+    HRESULT hrLicenseAck);
+void __RPC_STUB IBDA_DRIWMDRMSession_AcknowledgeLicense_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DRIWMDRMSession_ProcessLicenseChallenge_Proxy(
+    IBDA_DRIWMDRMSession* This,
+    DWORD dwcbLicenseMessage,
+    BYTE *pbLicenseMessage,
+    DWORD *pdwcbLicenseResponse,
+    BYTE **ppbLicenseResponse);
+void __RPC_STUB IBDA_DRIWMDRMSession_ProcessLicenseChallenge_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DRIWMDRMSession_ProcessRegistrationChallenge_Proxy(
+    IBDA_DRIWMDRMSession* This,
+    DWORD dwcbRegistrationMessage,
+    BYTE *pbRegistrationMessage,
+    DWORD *pdwcbRegistrationResponse,
+    BYTE **ppbRegistrationResponse);
+void __RPC_STUB IBDA_DRIWMDRMSession_ProcessRegistrationChallenge_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DRIWMDRMSession_SetRevInfo_Proxy(
+    IBDA_DRIWMDRMSession* This,
+    DWORD dwRevInfoLen,
+    BYTE *pbRevInfo,
+    DWORD *pdwResponse);
+void __RPC_STUB IBDA_DRIWMDRMSession_SetRevInfo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DRIWMDRMSession_SetCrl_Proxy(
+    IBDA_DRIWMDRMSession* This,
+    DWORD dwCrlLen,
+    BYTE *pbCrlLen,
+    DWORD *pdwResponse);
+void __RPC_STUB IBDA_DRIWMDRMSession_SetCrl_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DRIWMDRMSession_GetHMSAssociationData_Proxy(
+    IBDA_DRIWMDRMSession* This);
+void __RPC_STUB IBDA_DRIWMDRMSession_GetHMSAssociationData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_DRIWMDRMSession_GetLastCardeaError_Proxy(
+    IBDA_DRIWMDRMSession* This,
+    DWORD *pdwError);
+void __RPC_STUB IBDA_DRIWMDRMSession_GetLastCardeaError_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_DRIWMDRMSession_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_MUX interface
+ */
+#ifndef __IBDA_MUX_INTERFACE_DEFINED__
+#define __IBDA_MUX_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_MUX, 0x942aafec, 0x4c05, 0x4c74, 0xb8,0xeb, 0x87,0x06,0xc2,0xa4,0x94,0x3f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("942aafec-4c05-4c74-b8eb-8706c2a4943f")
+IBDA_MUX : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE SetPidList(
+        ULONG ulPidListCount,
+        BDA_MUX_PIDLISTITEM *pbPidListBuffer) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPidList(
+        ULONG *pulPidListCount,
+        BDA_MUX_PIDLISTITEM *pbPidListBuffer) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_MUX, 0x942aafec, 0x4c05, 0x4c74, 0xb8,0xeb, 0x87,0x06,0xc2,0xa4,0x94,0x3f)
+#endif
+#else
+typedef struct IBDA_MUXVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_MUX* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_MUX* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_MUX* This);
+
+    /*** IBDA_MUX methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPidList)(
+        IBDA_MUX* This,
+        ULONG ulPidListCount,
+        BDA_MUX_PIDLISTITEM *pbPidListBuffer);
+
+    HRESULT (STDMETHODCALLTYPE *GetPidList)(
+        IBDA_MUX* This,
+        ULONG *pulPidListCount,
+        BDA_MUX_PIDLISTITEM *pbPidListBuffer);
+
+    END_INTERFACE
+} IBDA_MUXVtbl;
+interface IBDA_MUX {
+    CONST_VTBL IBDA_MUXVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
 #define IBDA_MUX_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define IBDA_MUX_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define IBDA_MUX_Release(This) (This)->lpVtbl->Release(This)
-#define IBDA_MUX_GetPidList(This,pbPidListBuffer) (This)->lpVtbl->GetPidList(This,pbPidListBuffer)
+/*** IBDA_MUX methods ***/
 #define IBDA_MUX_SetPidList(This,ulPidListCount,pbPidListBuffer) (This)->lpVtbl->SetPidList(This,ulPidListCount,pbPidListBuffer)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IBDA_UserActivityService
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
+#define IBDA_MUX_GetPidList(This,pulPidListCount,pbPidListBuffer) (This)->lpVtbl->GetPidList(This,pulPidListCount,pbPidListBuffer)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_MUX_QueryInterface(IBDA_MUX* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_MUX_AddRef(IBDA_MUX* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_MUX_Release(IBDA_MUX* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_MUX methods ***/
+static FORCEINLINE HRESULT IBDA_MUX_SetPidList(IBDA_MUX* This,ULONG ulPidListCount,BDA_MUX_PIDLISTITEM *pbPidListBuffer) {
+    return This->lpVtbl->SetPidList(This,ulPidListCount,pbPidListBuffer);
+}
+static FORCEINLINE HRESULT IBDA_MUX_GetPidList(IBDA_MUX* This,ULONG *pulPidListCount,BDA_MUX_PIDLISTITEM *pbPidListBuffer) {
+    return This->lpVtbl->GetPidList(This,pulPidListCount,pbPidListBuffer);
+}
 #endif
-DECLARE_INTERFACE_(IBDA_UserActivityService,IUnknown)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_MUX_SetPidList_Proxy(
+    IBDA_MUX* This,
+    ULONG ulPidListCount,
+    BDA_MUX_PIDLISTITEM *pbPidListBuffer);
+void __RPC_STUB IBDA_MUX_SetPidList_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_MUX_GetPidList_Proxy(
+    IBDA_MUX* This,
+    ULONG *pulPidListCount,
+    BDA_MUX_PIDLISTITEM *pbPidListBuffer);
+void __RPC_STUB IBDA_MUX_GetPidList_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_MUX_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_TransportStreamSelector interface
+ */
+#ifndef __IBDA_TransportStreamSelector_INTERFACE_DEFINED__
+#define __IBDA_TransportStreamSelector_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_TransportStreamSelector, 0x1dcfafe9, 0xb45e, 0x41b3, 0xbb,0x2a, 0x56,0x1e,0xb1,0x29,0xae,0x98);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("1dcfafe9-b45e-41b3-bb2a-561eb129ae98")
+IBDA_TransportStreamSelector : public IUnknown
 {
+    virtual HRESULT STDMETHODCALLTYPE SetTSID(
+        USHORT usTSID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTSInformation(
+        ULONG *pulTSInformationBufferLen,
+        BYTE *pbTSInformationBuffer) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_TransportStreamSelector, 0x1dcfafe9, 0xb45e, 0x41b3, 0xbb,0x2a, 0x56,0x1e,0xb1,0x29,0xae,0x98)
+#endif
+#else
+typedef struct IBDA_TransportStreamSelectorVtbl {
     BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_TransportStreamSelector* This,
+        REFIID riid,
+        void **ppvObject);
 
-    /* IBDA_UserActivityService methods */
-    STDMETHOD_(HRESULT,GetUserActivityInterval)(THIS_ DWORD *pdwActivityInterval) PURE;
-    STDMETHOD_(HRESULT,SetCurrentTunerUseReason)(THIS_ DWORD dwUseReason) PURE;
-    STDMETHOD_(HRESULT,UserActivityDetected)(THIS) PURE;
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_TransportStreamSelector* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_TransportStreamSelector* This);
+
+    /*** IBDA_TransportStreamSelector methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetTSID)(
+        IBDA_TransportStreamSelector* This,
+        USHORT usTSID);
+
+    HRESULT (STDMETHODCALLTYPE *GetTSInformation)(
+        IBDA_TransportStreamSelector* This,
+        ULONG *pulTSInformationBufferLen,
+        BYTE *pbTSInformationBuffer);
 
     END_INTERFACE
+} IBDA_TransportStreamSelectorVtbl;
+interface IBDA_TransportStreamSelector {
+    CONST_VTBL IBDA_TransportStreamSelectorVtbl* lpVtbl;
 };
+
 #ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDA_TransportStreamSelector_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDA_TransportStreamSelector_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDA_TransportStreamSelector_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDA_TransportStreamSelector methods ***/
+#define IBDA_TransportStreamSelector_SetTSID(This,usTSID) (This)->lpVtbl->SetTSID(This,usTSID)
+#define IBDA_TransportStreamSelector_GetTSInformation(This,pulTSInformationBufferLen,pbTSInformationBuffer) (This)->lpVtbl->GetTSInformation(This,pulTSInformationBufferLen,pbTSInformationBuffer)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_TransportStreamSelector_QueryInterface(IBDA_TransportStreamSelector* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_TransportStreamSelector_AddRef(IBDA_TransportStreamSelector* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_TransportStreamSelector_Release(IBDA_TransportStreamSelector* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_TransportStreamSelector methods ***/
+static FORCEINLINE HRESULT IBDA_TransportStreamSelector_SetTSID(IBDA_TransportStreamSelector* This,USHORT usTSID) {
+    return This->lpVtbl->SetTSID(This,usTSID);
+}
+static FORCEINLINE HRESULT IBDA_TransportStreamSelector_GetTSInformation(IBDA_TransportStreamSelector* This,ULONG *pulTSInformationBufferLen,BYTE *pbTSInformationBuffer) {
+    return This->lpVtbl->GetTSInformation(This,pulTSInformationBufferLen,pbTSInformationBuffer);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_TransportStreamSelector_SetTSID_Proxy(
+    IBDA_TransportStreamSelector* This,
+    USHORT usTSID);
+void __RPC_STUB IBDA_TransportStreamSelector_SetTSID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_TransportStreamSelector_GetTSInformation_Proxy(
+    IBDA_TransportStreamSelector* This,
+    ULONG *pulTSInformationBufferLen,
+    BYTE *pbTSInformationBuffer);
+void __RPC_STUB IBDA_TransportStreamSelector_GetTSInformation_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_TransportStreamSelector_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDA_UserActivityService interface
+ */
+#ifndef __IBDA_UserActivityService_INTERFACE_DEFINED__
+#define __IBDA_UserActivityService_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDA_UserActivityService, 0x53b14189, 0xe478, 0x4b7a, 0xa1,0xff, 0x50,0x6d,0xb4,0xb9,0x9d,0xfe);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("53b14189-e478-4b7a-a1ff-506db4b99dfe")
+IBDA_UserActivityService : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE SetCurrentTunerUseReason(
+        DWORD dwUseReason) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetUserActivityInterval(
+        DWORD *pdwActivityInterval) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UserActivityDetected(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDA_UserActivityService, 0x53b14189, 0xe478, 0x4b7a, 0xa1,0xff, 0x50,0x6d,0xb4,0xb9,0x9d,0xfe)
+#endif
+#else
+typedef struct IBDA_UserActivityServiceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDA_UserActivityService* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDA_UserActivityService* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDA_UserActivityService* This);
+
+    /*** IBDA_UserActivityService methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetCurrentTunerUseReason)(
+        IBDA_UserActivityService* This,
+        DWORD dwUseReason);
+
+    HRESULT (STDMETHODCALLTYPE *GetUserActivityInterval)(
+        IBDA_UserActivityService* This,
+        DWORD *pdwActivityInterval);
+
+    HRESULT (STDMETHODCALLTYPE *UserActivityDetected)(
+        IBDA_UserActivityService* This);
+
+    END_INTERFACE
+} IBDA_UserActivityServiceVtbl;
+interface IBDA_UserActivityService {
+    CONST_VTBL IBDA_UserActivityServiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
 #define IBDA_UserActivityService_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define IBDA_UserActivityService_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define IBDA_UserActivityService_Release(This) (This)->lpVtbl->Release(This)
-#define IBDA_UserActivityService_GetUserActivityInterval(This,pdwActivityInterval) (This)->lpVtbl->GetUserActivityInterval(This,pdwActivityInterval)
+/*** IBDA_UserActivityService methods ***/
 #define IBDA_UserActivityService_SetCurrentTunerUseReason(This,dwUseReason) (This)->lpVtbl->SetCurrentTunerUseReason(This,dwUseReason)
-#define IBDA_UserActivityService_UserActivityDetected() (This)->lpVtbl->UserActivityDetected(This)
-#endif /*COBJMACROS*/
+#define IBDA_UserActivityService_GetUserActivityInterval(This,pdwActivityInterval) (This)->lpVtbl->GetUserActivityInterval(This,pdwActivityInterval)
+#define IBDA_UserActivityService_UserActivityDetected(This) (This)->lpVtbl->UserActivityDetected(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDA_UserActivityService_QueryInterface(IBDA_UserActivityService* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDA_UserActivityService_AddRef(IBDA_UserActivityService* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDA_UserActivityService_Release(IBDA_UserActivityService* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDA_UserActivityService methods ***/
+static FORCEINLINE HRESULT IBDA_UserActivityService_SetCurrentTunerUseReason(IBDA_UserActivityService* This,DWORD dwUseReason) {
+    return This->lpVtbl->SetCurrentTunerUseReason(This,dwUseReason);
+}
+static FORCEINLINE HRESULT IBDA_UserActivityService_GetUserActivityInterval(IBDA_UserActivityService* This,DWORD *pdwActivityInterval) {
+    return This->lpVtbl->GetUserActivityInterval(This,pdwActivityInterval);
+}
+static FORCEINLINE HRESULT IBDA_UserActivityService_UserActivityDetected(IBDA_UserActivityService* This) {
+    return This->lpVtbl->UserActivityDetected(This);
+}
+#endif
+#endif
 
-#endif /*(_WIN32_WINNT >= 0x0601)*/
-#endif /*__INC_BDAIFACE__*/
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDA_UserActivityService_SetCurrentTunerUseReason_Proxy(
+    IBDA_UserActivityService* This,
+    DWORD dwUseReason);
+void __RPC_STUB IBDA_UserActivityService_SetCurrentTunerUseReason_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_UserActivityService_GetUserActivityInterval_Proxy(
+    IBDA_UserActivityService* This,
+    DWORD *pdwActivityInterval);
+void __RPC_STUB IBDA_UserActivityService_GetUserActivityInterval_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDA_UserActivityService_UserActivityDetected_Proxy(
+    IBDA_UserActivityService* This);
+void __RPC_STUB IBDA_UserActivityService_UserActivityDetected_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDA_UserActivityService_INTERFACE_DEFINED__ */
+
+#define SID_BDA_EasMessage __uuidof (IBDA_EasMessage)
+#define SID_BDA_TransportStreamInfo __uuidof (IBDA_TransportStreamInfo)
+#define SID_BDA_ConditionalAccess __uuidof (IBDA_ConditionalAccess)
+#define SID_BDA_DiagnosticProperties __uuidof (IBDA_DiagnosticProperties)
+#define SID_BDA_DRM __uuidof (IBDA_DRM)
+#define SID_BDA_NameValueService __uuidof (IBDA_NameValueService)
+#define SID_BDA_ConditionalAccessEx __uuidof (IBDA_ConditionalAccessEx)
+#define SID_BDA_ISDBConditionalAccess __uuidof (IBDA_ISDBConditionalAccess)
+#define SID_BDA_EventingService __uuidof (IBDA_EventingService)
+#define SID_BDA_AUX __uuidof (IBDA_AUX)
+#define SID_BDA_Encoder __uuidof (IBDA_Encoder)
+#define SID_BDA_FDC __uuidof (IBDA_FDC
+#define SID_BDA_GuideDataDeliveryService  __uuidof (IBDA_GuideDataDeliveryService)
+#define SID_BDA_DRMService __uuidof (IBDA_DRMService)
+#define SID_BDA_WMDRMSession __uuidof (IBDA_WMDRMSession)
+#define SID_BDA_WMDRMTuner __uuidof (IBDA_WMDRMTuner)
+#define SID_BDA_DRIDRMService __uuidof (IBDA_DRIDRMService)
+#define SID_BDA_DRIWMDRMSession __uuidof (IBDA_DRIWMDRMSession)
+#define SID_BDA_MUX __uuidof (IBDA_MUX)
+#define SID_BDA_TransportStreamSelector __uuidof (IBDA_TransportStreamSelector)
+#define SID_BDA_UserActivityService __uuidof (IBDA_UserActivityService)
+
+DEFINE_GUID(CLSID_PBDA_Encoder_DATA_TYPE, 0x728fd6bc, 0x5546, 0x4716, 0xb1, 0x03, 0xf8, 0x99, 0xf5, 0xa1, 0xfa, 0x68);
+DEFINE_GUID(CLSID_PBDA_FDC_DATA_TYPE, 0xe7dbf9a0, 0x22ab, 0x4047, 0x8e, 0x67, 0xef, 0x9a, 0xd5, 0x4, 0xe7, 0x29);
+DEFINE_GUID(CLSID_PBDA_GDDS_DATA_TYPE, 0xC80C0DF3, 0x6052, 0x4c16, 0x9F, 0x56, 0xC4, 0x4C, 0x21, 0xF7, 0x3C, 0x45);
+DEFINE_GUID(PBDA_AUX_CONNECTOR_TYPE_SVideo, 0xa0e905f4,0x24c9,0x4a54, 0xb7, 0x61, 0x21, 0x33, 0x55, 0xef, 0xc1, 0x3A);
+DEFINE_GUID(PBDA_AUX_CONNECTOR_TYPE_Composite, 0xf6298b4c,0xc725,0x4d42, 0x84, 0x9b, 0x41, 0x0b, 0xbb, 0x14, 0xea, 0x62);
+DEFINE_GUID(CLSID_PBDA_AUX_DATA_TYPE, 0xfd456373, 0x3323, 0x4090, 0xad, 0xca, 0x8e, 0xd4, 0x5f, 0x55, 0xcf, 0x10);
+#endif
+/* Begin additional prototypes for all interfaces */
+
+ULONG           __RPC_USER BSTR_UserSize     (ULONG *, ULONG, BSTR *);
+unsigned char * __RPC_USER BSTR_UserMarshal  (ULONG *, unsigned char *, BSTR *);
+unsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *);
+void            __RPC_USER BSTR_UserFree     (ULONG *, BSTR *);
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __bdaiface_h__ */
diff --git a/x86_64-w64-mingw32/include/bdaiface_enums.h b/x86_64-w64-mingw32/include/bdaiface_enums.h
new file mode 100644
index 0000000..9a262e0
--- /dev/null
+++ b/x86_64-w64-mingw32/include/bdaiface_enums.h
@@ -0,0 +1,96 @@
+/**
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef BDAIFACE_ENUMS_H
+#define BDAIFACE_ENUMS_H
+
+#include <winapifamily.h>
+
+#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
+
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum SmartCardStatusType {
+  CardInserted = 0,
+  CardRemoved,
+  CardError,
+  CardDataChanged,
+  CardFirmwareUpgrade
+} SmartCardStatusType;
+
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+ enum SmartCardAssociationType {
+  NotAssociated = 0,
+  Associated,
+  AssociationUnknown
+} SmartCardAssociationType;
+
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+ enum LocationCodeSchemeType {
+  SCTE_18 = 0
+} LocationCodeSchemeType;
+
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum EntitlementType {
+  Entitled = 0,
+  NotEntitled,
+  TechnicalFailure
+} EntitlementType;
+
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum UICloseReasonType {
+  NotReady = 0,
+  UserClosed,
+  SystemClosed,
+  DeviceClosed,
+  ErrorClosed
+} UICloseReasonType;
+
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum BDA_DrmPairingError {
+  BDA_DrmPairing_Succeeded = 0,
+  BDA_DrmPairing_HardwareFailure,
+  BDA_DrmPairing_NeedRevocationData,
+  BDA_DrmPairing_NeedIndiv,
+  BDA_DrmPairing_Other,
+  BDA_DrmPairing_DrmInitFailed,
+  BDA_DrmPairing_DrmNotPaired,
+  BDA_DrmPairing_DrmRePairSoon,
+  BDA_DrmPairing_Aborted,
+  BDA_DrmPairing_NeedSDKUpdate
+} BDA_DrmPairingError;
+
+typedef struct EALocationCodeType {
+  LocationCodeSchemeType LocationCodeScheme;
+  BYTE state_code;
+  BYTE county_subdivision;
+  WORD county_code;
+} EALocationCodeType;
+
+typedef struct SmartCardApplication {
+  ApplicationTypeType ApplicationType;
+  USHORT ApplicationVersion;
+  BSTR pbstrApplicationName;
+  BSTR pbstrApplicationURL;
+} SmartCardApplication;
+
+#endif
+#endif
diff --git a/x86_64-w64-mingw32/include/bdatypes.h b/x86_64-w64-mingw32/include/bdatypes.h
index 7bca649..8ddc3be 100644
--- a/x86_64-w64-mingw32/include/bdatypes.h
+++ b/x86_64-w64-mingw32/include/bdatypes.h
@@ -1,62 +1,25 @@
-/*
- * bdatypes.h
- *
- * This file is part of the ReactOS DXSDK package.
- *
- * THIS SOFTWARE IS NOT COPYRIGHTED
- *
- * This source code is offered for use in the public domain. You may
- * use, modify or distribute it freely.
- *
- * This code is distributed in the hope that it will be useful but
- * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
- * DISCLAIMED. This includes but is not limited to warranties of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
+/**
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
  */
-
 #ifndef _BDATYPES_
 #define _BDATYPES_ 1
 
-#define MIN_DIMENSION				1
+#include <winapifamily.h>
 
-#ifdef __midl
-#define V1_ENUM [v1_enum]
-#else
-#define V1_ENUM
+#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
+
+#define BDA_PLP_ID_NOT_SET -1
+
+#define MIN_DIMENSION 1
+
+typedef LONG PBDARESULT;
+
+typedef
+#ifdef __WIDL__
+  [v1_enum]
 #endif
-
-#define BDA_FREQUENCY_NOT_SET			-1
-#define BDA_FREQUENCY_NOT_DEFINED		 0
-#define BDA_RANGE_NOT_SET			-1
-#define BDA_RANGE_NOT_DEFINED			 0
-#define BDA_CHAN_BANDWITH_NOT_SET		-1
-#define BDA_CHAN_BANDWITH_NOT_DEFINED		 0
-#define BDA_FREQUENCY_MULTIPLIER_NOT_SET	-1
-#define BDA_FREQUENCY_MULTIPLIER_NOT_DEFINED	 0
-
-typedef struct _BDA_TEMPLATE_CONNECTION {
-  ULONG FromNodeType;
-  ULONG FromNodePinType;
-  ULONG ToNodeType;
-  ULONG ToNodePinType;
-} BDA_TEMPLATE_CONNECTION, *PBDA_TEMPLATE_CONNECTION;
-
-typedef struct _BDA_TEMPLATE_PIN_JOINT {
-  ULONG uliTemplateConnection;
-  ULONG ulcInstancesMax;
-} BDA_TEMPLATE_PIN_JOINT, *PBDA_TEMPLATE_PIN_JOINT;
-
-typedef struct tagKS_BDA_FRAME_INFO {
-  ULONG ExtendedHeaderSize;
-  DWORD dwFrameFlags;
-  ULONG ulEvent;
-  ULONG ulChannelNumber;
-  ULONG ulSubchannelNumber;
-  ULONG ulReason;
-} KS_BDA_FRAME_INFO, *PKS_BDA_FRAME_INFO;
-
-typedef enum {
+  enum BDA_EVENT_ID {
   BDA_EVENT_SIGNAL_LOSS = 0,
   BDA_EVENT_SIGNAL_LOCK,
   BDA_EVENT_DATA_START,
@@ -79,158 +42,169 @@
   BDA_EVENT_SMART_CARD_REMOVED
 } BDA_EVENT_ID, *PBDA_EVENT_ID;
 
-typedef struct _BDA_ETHERNET_ADDRESS {
-  BYTE rgbAddress[6];
-} BDA_ETHERNET_ADDRESS, *PBDA_ETHERNET_ADDRESS;
-
-typedef struct _BDA_ETHERNET_ADDRESS_LIST {
-  ULONG ulcAddresses;
-  BDA_ETHERNET_ADDRESS rgAddressl[MIN_DIMENSION];
-} BDA_ETHERNET_ADDRESS_LIST, *PBDA_ETHERNET_ADDRESS_LIST;
-
-typedef enum {
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum BDA_MULTICAST_MODE {
   BDA_PROMISCUOUS_MULTICAST = 0,
   BDA_FILTERED_MULTICAST,
   BDA_NO_MULTICAST
 } BDA_MULTICAST_MODE, *PBDA_MULTICAST_MODE;
 
-typedef struct _BDA_IPv4_ADDRESS {
-  BYTE rgbAddress[4];
-} BDA_IPv4_ADDRESS, *PBDA_IPv4_ADDRESS;
-
-typedef struct _BDA_IPv4_ADDRESS_LIST {
-  ULONG ulcAddresses;
-  BDA_IPv4_ADDRESS rgAddressl[MIN_DIMENSION];
-} BDA_IPv4_ADDRESS_LIST, *PBDA_IPv4_ADDRESS_LIST;
-
-typedef struct _BDA_IPv6_ADDRESS {
-  BYTE rgbAddress[6];
-} BDA_IPv6_ADDRESS, *PBDA_IPv6_ADDRESS;
-
-typedef struct _BDA_IPv6_ADDRESS_LIST {
-  ULONG ulcAddresses;
-  BDA_IPv6_ADDRESS rgAddressl[MIN_DIMENSION];
-} BDA_IPv6_ADDRESS_LIST, *PBDA_IPv6_ADDRESS_LIST;
-
-typedef enum {
-  BDA_CHANGES_COMPLETE = 0,
-  BDA_CHANGES_PENDING
-} BDA_CHANGE_STATE, *PBDA_CHANGE_STATE;
-
-typedef enum {
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum BDA_SIGNAL_STATE {
   BDA_SIGNAL_UNAVAILABLE = 0,
   BDA_SIGNAL_INACTIVE,
   BDA_SIGNAL_ACTIVE
 } BDA_SIGNAL_STATE, *PBDA_SIGNAL_STATE;
 
-typedef struct _BDANODE_DESCRIPTOR {
-  ULONG ulBdaNodeType;
-  GUID guidFunction;
-  GUID guidName;
-} BDANODE_DESCRIPTOR, *PBDANODE_DESCRIPTOR;
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum BDA_CHANGE_STATE {
+  BDA_CHANGES_COMPLETE = 0,
+  BDA_CHANGES_PENDING
+} BDA_CHANGE_STATE, *PBDA_CHANGE_STATE;
 
-typedef enum {
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum MEDIA_SAMPLE_CONTENT {
   MEDIA_TRANSPORT_PACKET,
   MEDIA_ELEMENTARY_STREAM,
   MEDIA_MPEG2_PSI,
   MEDIA_TRANSPORT_PAYLOAD
 } MEDIA_SAMPLE_CONTENT;
 
-typedef struct _BDA_TABLE_SECTION {
-  ULONG ulPrimarySectionId;
-  ULONG ulSecondarySectionId;
-  ULONG ulcbSectionLength;
-  ULONG argbSectionData[MIN_DIMENSION];
-} BDA_TABLE_SECTION, *PBDA_TABLE_SECTION;
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum ISDBCAS_REQUEST_ID {
+  ISDBCAS_REQUEST_ID_EMG = 0x38,
+  ISDBCAS_REQUEST_ID_EMD = 0x3a,
+} ISDBCAS_REQUEST_ID;
 
-typedef struct {
-  ULONG ulPID;
-  MEDIA_SAMPLE_CONTENT MediaSampleContent;
-} PID_MAP;
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum MUX_PID_TYPE {
+  PID_OTHER = -1,
+  PID_ELEMENTARY_STREAM,
+  PID_MPEG2_SECTION_PSI_SI
+} MUX_PID_TYPE;
 
-typedef struct _BDA_PID_MAP {
-  MEDIA_SAMPLE_CONTENT MediaSampleContent;
-  ULONG ulcPIDs;
-  ULONG aulPIDs[MIN_DIMENSION];
-} BDA_PID_MAP, *PBDA_PID_MAP;
-
-typedef struct _BDA_PID_UNMAP {
-  ULONG ulcPIDs;
-  ULONG aulPIDs[MIN_DIMENSION];
-} BDA_PID_UNMAP, *PBDA_PID_UNMAP;
-
-typedef enum DVBSystemType {
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum DVBSystemType {
   DVB_Cable,
   DVB_Terrestrial,
   DVB_Satellite,
+  ISDB_Terrestrial,
+  ISDB_Satellite
 } DVBSystemType;
 
-typedef struct _BDA_CA_MODULE_UI {
-  ULONG ulFormat;
-  ULONG ulbcDesc;
-  ULONG ulDesc[MIN_DIMENSION];
-} BDA_CA_MODULE_UI, *PBDA_CA_MODULE_UI;
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum BDA_Channel {
+  BDA_UNDEFINED_CHANNEL = -1
+} BDA_Channel;
 
-typedef struct _BDA_PROGRAM_PID_LIST {
-  ULONG ulProgramNumber;
-  ULONG ulcPIDs;
-  ULONG ulPID[MIN_DIMENSION];
-} BDA_PROGRAM_PID_LIST, *PBDA_PROGRAM_PID_LIST;
-
-V1_ENUM enum {
-  BDA_UNDEFINED_CHANNEL = -1,
-};
-
-typedef V1_ENUM enum ComponentCategory {
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum ComponentCategory {
   CategoryNotSet = -1,
   CategoryOther = 0,
   CategoryVideo,
   CategoryAudio,
   CategoryText,
+  CategorySubtitles,
+  CategoryCaptions,
+  CategorySuperimpose,
   CategoryData,
+  CATEGORY_COUNT
 } ComponentCategory;
 
-typedef enum ComponentStatus {
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum ComponentStatus {
   StatusActive,
   StatusInactive,
-  StatusUnavailable,
+  StatusUnavailable
 } ComponentStatus;
 
-typedef enum ATSCComponentTypeFlags {
-  ATSCCT_AC3 = 0x00000001,
-} ATSCComponentTypeFlags;
-
-typedef V1_ENUM enum MPEG2StreamType {
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum MPEG2StreamType {
   BDA_UNITIALIZED_MPEG2STREAMTYPE = -1,
-  Reserved1 = 0x0,
-  ISO_IEC_11172_2_VIDEO = Reserved1 + 1,
-  ISO_IEC_13818_2_VIDEO = ISO_IEC_11172_2_VIDEO + 1,
-  ISO_IEC_11172_3_AUDIO = ISO_IEC_13818_2_VIDEO + 1,
-  ISO_IEC_13818_3_AUDIO = ISO_IEC_11172_3_AUDIO + 1,
-  ISO_IEC_13818_1_PRIVATE_SECTION = ISO_IEC_13818_3_AUDIO + 1,
-  ISO_IEC_13818_1_PES = ISO_IEC_13818_1_PRIVATE_SECTION + 1,
-  ISO_IEC_13522_MHEG = ISO_IEC_13818_1_PES + 1,
-  ANNEX_A_DSM_CC = ISO_IEC_13522_MHEG + 1,
-  ITU_T_REC_H_222_1 = ANNEX_A_DSM_CC + 1,
-  ISO_IEC_13818_6_TYPE_A = ITU_T_REC_H_222_1 + 1,
-  ISO_IEC_13818_6_TYPE_B = ISO_IEC_13818_6_TYPE_A + 1,
-  ISO_IEC_13818_6_TYPE_C = ISO_IEC_13818_6_TYPE_B + 1,
-  ISO_IEC_13818_6_TYPE_D = ISO_IEC_13818_6_TYPE_C + 1,
-  ISO_IEC_13818_1_AUXILIARY = ISO_IEC_13818_6_TYPE_D + 1,
-  ISO_IEC_13818_1_RESERVED = ISO_IEC_13818_1_AUXILIARY + 1,
-  USER_PRIVATE = ISO_IEC_13818_1_RESERVED + 1
+  Reserved1 = 0x00,
+  ISO_IEC_11172_2_VIDEO = 0x01,
+  ISO_IEC_13818_2_VIDEO = 0x02,
+  ISO_IEC_11172_3_AUDIO = 0x03,
+  ISO_IEC_13818_3_AUDIO = 0x04,
+  ISO_IEC_13818_1_PRIVATE_SECTION = 0x05,
+  ISO_IEC_13818_1_PES = 0x06,
+  ISO_IEC_13522_MHEG = 0x07,
+  ANNEX_A_DSM_CC = 0x08,
+  ITU_T_REC_H_222_1 = 0x09,
+  ISO_IEC_13818_6_TYPE_A = 0x0a,
+  ISO_IEC_13818_6_TYPE_B = 0x0b,
+  ISO_IEC_13818_6_TYPE_C = 0x0c,
+  ISO_IEC_13818_6_TYPE_D = 0x0d,
+  ISO_IEC_13818_1_AUXILIARY = 0x0e,
+  ISO_IEC_13818_7_AUDIO = 0x0f,
+  ISO_IEC_14496_2_VISUAL = 0x10,
+  ISO_IEC_14496_3_AUDIO = 0x11,
+  ISO_IEC_14496_1_IN_PES = 0x12,
+  ISO_IEC_14496_1_IN_SECTION = 0x13,
+  ISO_IEC_13818_6_DOWNLOAD = 0x14,
+  METADATA_IN_PES = 0x15,
+  METADATA_IN_SECTION = 0x16,
+  METADATA_IN_DATA_CAROUSEL = 0x17,
+  METADATA_IN_OBJECT_CAROUSEL = 0x18,
+  METADATA_IN_DOWNLOAD_PROTOCOL = 0x19,
+  IRPM_STREAMM = 0x1a,
+  ITU_T_H264 = 0x1b,
+  ISO_IEC_13818_1_RESERVED = 0x1c,
+  USER_PRIVATE = 0x10,
+  ISO_IEC_USER_PRIVATE = 0x80,
+  DOLBY_AC3_AUDIO = 0x81,
+  DOLBY_DIGITAL_PLUS_AUDIO_ATSC = 0x87
 } MPEG2StreamType;
 
-typedef struct _MPEG2_TRANSPORT_STRIDE {
-  DWORD dwOffset;
-  DWORD dwPacketLength;
-  DWORD dwStride;
-} MPEG2_TRANSPORT_STRIDE, *PMPEG2_TRANSPORT_STRIDE;
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum ATSCComponentTypeFlags {
+  ATSCCT_AC3 = 0x1
+} ATSCComponentTypeFlags;
 
-typedef V1_ENUM enum BinaryConvolutionCodeRate {
-  BDA_BCC_RATE_NOT_SET       = -1,
-  BDA_BCC_RATE_NOT_DEFINED   = 0,
-  BDA_BCC_RATE_1_2           = 1,
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum BinaryConvolutionCodeRate {
+  BDA_BCC_RATE_NOT_SET = -1,
+  BDA_BCC_RATE_NOT_DEFINED = 0,
+  BDA_BCC_RATE_1_2 = 1,
   BDA_BCC_RATE_2_3,
   BDA_BCC_RATE_3_4,
   BDA_BCC_RATE_3_5,
@@ -244,33 +218,32 @@
   BDA_BCC_RATE_6_7,
   BDA_BCC_RATE_8_9,
   BDA_BCC_RATE_9_10,
-  BDA_BCC_RATE_MAX 
+  BDA_BCC_RATE_MAX
 } BinaryConvolutionCodeRate;
 
-typedef V1_ENUM enum SpectralInversion {
-  BDA_SPECTRAL_INVERSION_NOT_SET = -1,
-  BDA_SPECTRAL_INVERSION_NOT_DEFINED = 0,
-  BDA_SPECTRAL_INVERSION_AUTOMATIC = 1,
-  BDA_SPECTRAL_INVERSION_NORMAL,
-  BDA_SPECTRAL_INVERSION_INVERTED,
-  BDA_SPECTRAL_INVERSION_MAX
-} SpectralInversion;
-
-typedef V1_ENUM enum FECMethod {
-  BDA_FEC_METHOD_NOT_SET       = -1,
-  BDA_FEC_METHOD_NOT_DEFINED   = 0,
-  BDA_FEC_VITERBI              = 1,
-  BDA_FEC_RS_204_188           = 2,
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum FECMethod {
+  BDA_FEC_METHOD_NOT_SET = -1,
+  BDA_FEC_METHOD_NOT_DEFINED = 0,
+  BDA_FEC_VITERBI = 1,
+  BDA_FEC_RS_204_188,
   BDA_FEC_LDPC,
   BDA_FEC_BCH,
   BDA_FEC_RS_147_130,
   BDA_FEC_MAX
 } FECMethod;
 
-typedef V1_ENUM enum ModulationType {
-  BDA_MOD_NOT_SET            = -1,
-  BDA_MOD_NOT_DEFINED        = 0,
-  BDA_MOD_16QAM              = 1,
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum ModulationType {
+  BDA_MOD_NOT_SET = -1,
+  BDA_MOD_NOT_DEFINED = 0,
+  BDA_MOD_16QAM = 1,
   BDA_MOD_32QAM,
   BDA_MOD_64QAM,
   BDA_MOD_80QAM,
@@ -305,142 +278,525 @@
   BDA_MOD_DIRECTV,
   BDA_MOD_ISDB_T_TMCC,
   BDA_MOD_ISDB_S_TMCC,
-  BDA_MOD_MAX 
+  BDA_MOD_MAX
 } ModulationType;
 
-typedef enum tagScanModulationTypes {
-  BDA_SCAN_MOD_16QAM                            = 0x00000001,
-  BDA_SCAN_MOD_32QAM                            = 0x00000002,
-  BDA_SCAN_MOD_64QAM                            = 0x00000004,
-  BDA_SCAN_MOD_80QAM                            = 0x00000008,
-  BDA_SCAN_MOD_96QAM                            = 0x00000010,
-  BDA_SCAN_MOD_112QAM                           = 0x00000020,
-  BDA_SCAN_MOD_128QAM                           = 0x00000040,
-  BDA_SCAN_MOD_160QAM                           = 0x00000080,
-  BDA_SCAN_MOD_192QAM                           = 0x00000100,
-  BDA_SCAN_MOD_224QAM                           = 0x00000200,
-  BDA_SCAN_MOD_256QAM                           = 0x00000400,
-  BDA_SCAN_MOD_320QAM                           = 0x00000800,
-  BDA_SCAN_MOD_384QAM                           = 0x00001000,
-  BDA_SCAN_MOD_448QAM                           = 0x00002000,
-  BDA_SCAN_MOD_512QAM                           = 0x00004000,
-  BDA_SCAN_MOD_640QAM                           = 0x00008000,
-  BDA_SCAN_MOD_768QAM                           = 0x00010000,
-  BDA_SCAN_MOD_896QAM                           = 0x00020000,
-  BDA_SCAN_MOD_1024QAM                          = 0x00040000,
-  BDA_SCAN_MOD_QPSK                             = 0x00080000,
-  BDA_SCAN_MOD_BPSK                             = 0x00100000,
-  BDA_SCAN_MOD_OQPSK                            = 0x00200000,
-  BDA_SCAN_MOD_8VSB                             = 0x00400000,
-  BDA_SCAN_MOD_16VSB                            = 0x00800000,
-  BDA_SCAN_MOD_AM_RADIO                         = 0x01000000,
-  BDA_SCAN_MOD_FM_RADIO                         = 0x02000000,
-  BDA_SCAN_MOD_8PSK                             = 0x04000000,
-  BDA_SCAN_MOD_RF                               = 0x08000000, /* analog TV */
-  ScanModulationTypesMask_MCE_DigitalCable      = BDA_MOD_64QAM | BDA_MOD_256QAM,
-  ScanModulationTypesMask_MCE_TerrestrialATSC   = BDA_MOD_8VSB,
-  ScanModulationTypesMask_MCE_AnalogTv          = BDA_MOD_RF,
-  ScanModulationTypesMask_MCE_All_TV            = 0xffffffff,
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum tagScanModulationTypes {
+  BDA_SCAN_MOD_16QAM = 0x00000001,
+  BDA_SCAN_MOD_32QAM = 0x00000002,
+  BDA_SCAN_MOD_64QAM = 0x00000004,
+  BDA_SCAN_MOD_80QAM = 0x00000008,
+  BDA_SCAN_MOD_96QAM = 0x00000010,
+  BDA_SCAN_MOD_112QAM = 0x00000020,
+  BDA_SCAN_MOD_128QAM = 0x00000040,
+  BDA_SCAN_MOD_160QAM = 0x00000080,
+  BDA_SCAN_MOD_192QAM = 0x00000100,
+  BDA_SCAN_MOD_224QAM = 0x00000200,
+  BDA_SCAN_MOD_256QAM = 0x00000400,
+  BDA_SCAN_MOD_320QAM = 0x00000800,
+  BDA_SCAN_MOD_384QAM = 0x00001000,
+  BDA_SCAN_MOD_448QAM = 0x00002000,
+  BDA_SCAN_MOD_512QAM = 0x00004000,
+  BDA_SCAN_MOD_640QAM = 0x00008000,
+  BDA_SCAN_MOD_768QAM = 0x00010000,
+  BDA_SCAN_MOD_896QAM = 0x00020000,
+  BDA_SCAN_MOD_1024QAM = 0x00040000,
+  BDA_SCAN_MOD_QPSK = 0x00080000,
+  BDA_SCAN_MOD_BPSK = 0x00100000,
+  BDA_SCAN_MOD_OQPSK = 0x00200000,
+  BDA_SCAN_MOD_8VSB = 0x00400000,
+  BDA_SCAN_MOD_16VSB = 0x00800000,
+  BDA_SCAN_MOD_AM_RADIO = 0x01000000,
+  BDA_SCAN_MOD_FM_RADIO = 0x02000000,
+  BDA_SCAN_MOD_8PSK = 0x04000000,
+  BDA_SCAN_MOD_RF = 0x08000000,
+  ScanModulationTypesMask_MCE_DigitalCable = BDA_MOD_64QAM |
+  BDA_MOD_256QAM,
+  ScanModulationTypesMask_MCE_TerrestrialATSC = BDA_MOD_8VSB,
+  ScanModulationTypesMask_MCE_AnalogTv = BDA_MOD_RF,
+  ScanModulationTypesMask_MCE_All_TV = 0xffffffff,
+  ScanModulationTypesMask_DVBC = BDA_MOD_64QAM | BDA_SCAN_MOD_128QAM |
+  BDA_MOD_256QAM,
+  BDA_SCAN_MOD_16APSK = 0x10000000,
+  BDA_SCAN_MOD_32APSK = 0x20000000,
 } ScanModulationTypes;
 
-typedef V1_ENUM enum TransmissionMode {
-  BDA_XMIT_MODE_NOT_SET          = -1,
-  BDA_XMIT_MODE_NOT_DEFINED      = 0,
-  BDA_XMIT_MODE_2K,
-  BDA_XMIT_MODE_8K,
-  BDA_XMIT_MODE_4K,
-  BDA_XMIT_MODE_2K_INTERLEAVED,
-  BDA_XMIT_MODE_4K_INTERLEAVED,
-  BDA_XMIT_MODE_MAX 
-} TransmissionMode;
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum SpectralInversion {
+  BDA_SPECTRAL_INVERSION_NOT_SET = -1,
+  BDA_SPECTRAL_INVERSION_NOT_DEFINED = 0,
+  BDA_SPECTRAL_INVERSION_AUTOMATIC = 1,
+  BDA_SPECTRAL_INVERSION_NORMAL,
+  BDA_SPECTRAL_INVERSION_INVERTED,
+  BDA_SPECTRAL_INVERSION_MAX
+} SpectralInversion;
 
-
-typedef V1_ENUM enum Polarisation {
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum Polarisation {
   BDA_POLARISATION_NOT_SET = -1,
   BDA_POLARISATION_NOT_DEFINED = 0,
   BDA_POLARISATION_LINEAR_H = 1,
   BDA_POLARISATION_LINEAR_V,
   BDA_POLARISATION_CIRCULAR_L,
   BDA_POLARISATION_CIRCULAR_R,
-  BDA_POLARISATION_MAX,
+  BDA_POLARISATION_MAX
 } Polarisation;
 
-typedef V1_ENUM enum GuardInterval {
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum LNB_Source {
+  BDA_LNB_SOURCE_NOT_SET = -1,
+  BDA_LNB_SOURCE_NOT_DEFINED = 0,
+  BDA_LNB_SOURCE_A = 1,
+  BDA_LNB_SOURCE_B = 2,
+  BDA_LNB_SOURCE_C = 3,
+  BDA_LNB_SOURCE_D = 4,
+  BDA_LNB_SOURCE_MAX
+} LNB_Source;
+
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum GuardInterval {
   BDA_GUARD_NOT_SET = -1,
   BDA_GUARD_NOT_DEFINED = 0,
   BDA_GUARD_1_32 = 1,
   BDA_GUARD_1_16,
   BDA_GUARD_1_8,
   BDA_GUARD_1_4,
-  BDA_GUARD_MAX,
+  BDA_GUARD_1_128,
+  BDA_GUARD_19_128,
+  BDA_GUARD_19_256,
+  BDA_GUARD_MAX
 } GuardInterval;
 
-typedef V1_ENUM enum HierarchyAlpha {
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum HierarchyAlpha {
   BDA_HALPHA_NOT_SET = -1,
   BDA_HALPHA_NOT_DEFINED = 0,
   BDA_HALPHA_1 = 1,
   BDA_HALPHA_2,
   BDA_HALPHA_4,
-  BDA_HALPHA_MAX,
+  BDA_HALPHA_MAX
 } HierarchyAlpha;
 
-typedef enum _BDA_Comp_Flags {
-  BDACOMP_NOT_DEFINED             = 0x00000000,
-  BDACOMP_EXCLUDE_TS_FROM_TR      = 0x00000001,
-  BDACOMP_INCLUDE_LOCATOR_IN_TR   = 0x00000002 
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum TransmissionMode {
+  BDA_XMIT_MODE_NOT_SET = -1,
+  BDA_XMIT_MODE_NOT_DEFINED = 0,
+  BDA_XMIT_MODE_2K = 1,
+  BDA_XMIT_MODE_8K,
+  BDA_XMIT_MODE_4K,
+  BDA_XMIT_MODE_2K_INTERLEAVED,
+  BDA_XMIT_MODE_4K_INTERLEAVED,
+  BDA_XMIT_MODE_1K,
+  BDA_XMIT_MODE_16K,
+  BDA_XMIT_MODE_32K,
+  BDA_XMIT_MODE_MAX
+} TransmissionMode;
+
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum RollOff {
+  BDA_ROLL_OFF_NOT_SET = -1,
+  BDA_ROLL_OFF_NOT_DEFINED = 0,
+  BDA_ROLL_OFF_20 = 1,
+  BDA_ROLL_OFF_25,
+  BDA_ROLL_OFF_35,
+  BDA_ROLL_OFF_MAX
+} RollOff;
+
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum Pilot {
+  BDA_PILOT_NOT_SET = -1,
+  BDA_PILOT_NOT_DEFINED = 0,
+  BDA_PILOT_OFF = 1,
+  BDA_PILOT_ON,
+  BDA_PILOT_MAX
+} Pilot;
+
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum BDA_Frequency {
+  BDA_FREQUENCY_NOT_SET = -1,
+  BDA_FREQUENCY_NOT_DEFINED = 0
+} BDA_Frequency;
+
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum BDA_Range {
+  BDA_RANGE_NOT_SET = -1,
+  BDA_RANGE_NOT_DEFINED = 0
+} BDA_Range;
+
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum BDA_Channel_Bandwidth {
+  BDA_CHAN_BANDWITH_NOT_SET = -1,
+  BDA_CHAN_BANDWITH_NOT_DEFINED = 0
+} BDA_Channel_Bandwidth;
+
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum BDA_Frequency_Multiplier {
+  BDA_FREQUENCY_MULTIPLIER_NOT_SET = -1,
+  BDA_FREQUENCY_MULTIPLIER_NOT_DEFINED = 0
+} BDA_Frequency_Multiplier;
+
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum BDA_Comp_Flags {
+  BDACOMP_NOT_DEFINED = 0x00000000,
+  BDACOMP_EXCLUDE_TS_FROM_TR = 0x00000001,
+  BDACOMP_INCLUDE_LOCATOR_IN_TR = 0x00000002,
+  BDACOMP_INCLUDE_COMPONENTS_IN_TR = 0x00000004
 } BDA_Comp_Flags;
 
-#if (_WIN32_WINNT >= 0x0601)
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum ApplicationTypeType {
+  SCTE28_ConditionalAccess = 0,
+  SCTE28_POD_Host_Binding_Information,
+  SCTE28_IPService,
+  SCTE28_NetworkInterface_SCTE55_2,
+  SCTE28_NetworkInterface_SCTE55_1,
+  SCTE28_CopyProtection,
+  SCTE28_Diagnostic,
+  SCTE28_Undesignated,
+  SCTE28_Reserved,
+} ApplicationTypeType;
 
-typedef enum _BDA_CONDITIONALACCESS_MMICLOSEREASON {
-  CONDITIONALACCESS_UNSPECIFIED                 = 0,
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum BDA_CONDITIONALACCESS_REQUESTTYPE {
+  CONDITIONALACCESS_ACCESS_UNSPECIFIED = 0,
+  CONDITIONALACCESS_ACCESS_NOT_POSSIBLE,
+  CONDITIONALACCESS_ACCESS_POSSIBLE,
+  CONDITIONALACCESS_ACCESS_POSSIBLE_NO_STREAMING_DISRUPTION
+} BDA_CONDITIONALACCESS_REQUESTTYPE;
+
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum BDA_CONDITIONALACCESS_MMICLOSEREASON {
+  CONDITIONALACCESS_UNSPECIFIED = 0,
   CONDITIONALACCESS_CLOSED_ITSELF,
   CONDITIONALACCESS_TUNER_REQUESTED_CLOSE,
   CONDITIONALACCESS_DIALOG_TIMEOUT,
   CONDITIONALACCESS_DIALOG_FOCUS_CHANGE,
   CONDITIONALACCESS_DIALOG_USER_DISMISSED,
-  CONDITIONALACCESS_DIALOG_USER_NOT_AVAILABLE 
+  CONDITIONALACCESS_DIALOG_USER_NOT_AVAILABLE
 } BDA_CONDITIONALACCESS_MMICLOSEREASON;
 
-typedef enum BDA_CONDITIONALACCESS_REQUESTTYPE {
-  CONDITIONALACCESS_ACCESS_UNSPECIFIED                        = 0,
-  CONDITIONALACCESS_ACCESS_NOT_POSSIBLE,
-  CONDITIONALACCESS_ACCESS_POSSIBLE,
-  CONDITIONALACCESS_ACCESS_POSSIBLE_NO_STREAMING_DISRUPTION 
-} BDA_CONDITIONALACCESS_REQUESTTYPE;
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum BDA_CONDITIONALACCESS_SESSION_RESULT {
+  CONDITIONALACCESS_SUCCESSFULL = 0,
+  CONDITIONALACCESS_ENDED_NOCHANGE,
+  CONDITIONALACCESS_ABORTED
+} BDA_CONDITIONALACCESS_SESSION_RESULT;
 
-typedef enum MUX_PID_TYPE {
-  PID_OTHER                  = -1,
-  PID_ELEMENTARY_STREAM,
-  PID_MPEG2_SECTION_PSI_SI 
-} MUX_PID_TYPE;
+typedef
+#ifdef __WIDL__
+  [v1_enum]
+#endif
+  enum BDA_DISCOVERY_STATE {
+  BDA_DISCOVERY_UNSPECIFIED = 0,
+  BDA_DISCOVERY_REQUIRED,
+  BDA_DISCOVERY_COMPLETE
+} BDA_DISCOVERY_STATE;
 
-typedef enum Pilot {
-  BDA_PILOT_NOT_SET       = -1,
-  BDA_PILOT_NOT_DEFINED   = 0,
-  BDA_PILOT_OFF           = 1,
-  BDA_PILOT_ON,
-  BDA_PILOT_MAX 
-} Pilot;
+typedef struct _BDA_TEMPLATE_CONNECTION {
+  ULONG FromNodeType;
+  ULONG FromNodePinType;
+  ULONG ToNodeType;
+  ULONG ToNodePinType;
+} BDA_TEMPLATE_CONNECTION, *PBDA_TEMPLATE_CONNECTION;
 
-typedef enum RollOff {
-  BDA_ROLL_OFF_NOT_SET       = -1,
-  BDA_ROLL_OFF_NOT_DEFINED   = 0,
-  BDA_ROLL_OFF_20            = 1,
-  BDA_ROLL_OFF_25,
-  BDA_ROLL_OFF_35,
-  BDA_ROLL_OFF_MAX 
-} RollOff;
+typedef struct _BDA_TEMPLATE_PIN_JOINT {
+  ULONG uliTemplateConnection;
+  ULONG ulcInstancesMax;
+} BDA_TEMPLATE_PIN_JOINT, *PBDA_TEMPLATE_PIN_JOINT;
 
-typedef enum _LNB_Source {
-  BDA_LNB_SOURCE_NOT_SET       = -1,
-  BDA_LNB_SOURCE_NOT_DEFINED   = 0,
-  BDA_LNB_SOURCE_A             = 1,
-  BDA_LNB_SOURCE_B             = 2,
-  BDA_LNB_SOURCE_C             = 3,
-  BDA_LNB_SOURCE_D             = 4,
-  BDA_LNB_SOURCE_MAX           = 5 
-} LNB_Source;
+typedef struct tagKS_BDA_FRAME_INFO {
+  ULONG ExtendedHeaderSize;
+  DWORD dwFrameFlags;
+  ULONG ulEvent;
+  ULONG ulChannelNumber;
+  ULONG ulSubchannelNumber;
+  ULONG ulReason;
+} KS_BDA_FRAME_INFO, *PKS_BDA_FRAME_INFO;
+
+typedef struct _BDA_ETHERNET_ADDRESS {
+  BYTE rgbAddress[6];
+} BDA_ETHERNET_ADDRESS, *PBDA_ETHERNET_ADDRESS;
+
+typedef struct _BDA_ETHERNET_ADDRESS_LIST {
+  ULONG ulcAddresses;
+  BDA_ETHERNET_ADDRESS rgAddressl[MIN_DIMENSION];
+} BDA_ETHERNET_ADDRESS_LIST, *PBDA_ETHERNET_ADDRESS_LIST;
+
+typedef struct _BDA_IPv4_ADDRESS {
+  BYTE rgbAddress[4];
+} BDA_IPv4_ADDRESS, *PBDA_IPv4_ADDRESS;
+
+typedef struct _BDA_IPv4_ADDRESS_LIST {
+  ULONG ulcAddresses;
+  BDA_IPv4_ADDRESS rgAddressl[MIN_DIMENSION];
+} BDA_IPv4_ADDRESS_LIST, *PBDA_IPv4_ADDRESS_LIST;
+
+typedef struct _BDA_IPv6_ADDRESS {
+  BYTE rgbAddress[6];
+} BDA_IPv6_ADDRESS, *PBDA_IPv6_ADDRESS;
+
+typedef struct _BDA_IPv6_ADDRESS_LIST {
+  ULONG ulcAddresses;
+  BDA_IPv6_ADDRESS rgAddressl[MIN_DIMENSION];
+} BDA_IPv6_ADDRESS_LIST, *PBDA_IPv6_ADDRESS_LIST;
+
+typedef struct _BDANODE_DESCRIPTOR {
+  ULONG ulBdaNodeType;
+  GUID guidFunction;
+  GUID guidName;
+} BDANODE_DESCRIPTOR, *PBDANODE_DESCRIPTOR;
+
+typedef struct _BDA_TABLE_SECTION {
+  ULONG ulPrimarySectionId;
+  ULONG ulSecondarySectionId;
+  ULONG ulcbSectionLength;
+  ULONG argbSectionData[MIN_DIMENSION];
+} BDA_TABLE_SECTION, *PBDA_TABLE_SECTION;
+
+typedef struct _BDA_DISEQC_SEND {
+  ULONG ulRequestId;
+  ULONG ulPacketLength;
+  BYTE argbPacketData[8];
+} BDA_DISEQC_SEND, *PBDA_DISEQC_SEND;
+
+typedef struct _BDA_DISEQC_RESPONSE {
+  ULONG ulRequestId;
+  ULONG ulPacketLength;
+  BYTE argbPacketData[8];
+} BDA_DISEQC_RESPONSE, *PBDA_DISEQC_RESPONSE;
+
+typedef struct {
+  ULONG ulPID;
+  MEDIA_SAMPLE_CONTENT MediaSampleContent;
+} PID_MAP;
+
+typedef struct _BDA_PID_MAP {
+  MEDIA_SAMPLE_CONTENT MediaSampleContent;
+  ULONG ulcPIDs;
+  ULONG aulPIDs[MIN_DIMENSION];
+} BDA_PID_MAP, *PBDA_PID_MAP;
+
+typedef struct _BDA_PID_UNMAP {
+  ULONG ulcPIDs;
+  ULONG aulPIDs[MIN_DIMENSION];
+} BDA_PID_UNMAP, *PBDA_PID_UNMAP;
+
+typedef struct _BDA_CA_MODULE_UI {
+  ULONG ulFormat;
+  ULONG ulbcDesc;
+  ULONG ulDesc[MIN_DIMENSION];
+} BDA_CA_MODULE_UI, *PBDA_CA_MODULE_UI;
+
+typedef struct _BDA_PROGRAM_PID_LIST {
+  ULONG ulProgramNumber;
+  ULONG ulcPIDs;
+  ULONG ulPID[MIN_DIMENSION];
+} BDA_PROGRAM_PID_LIST, *PBDA_PROGRAM_PID_LIST;
+
+typedef struct _BDA_DRM_DRMSTATUS {
+  PBDARESULT lResult;
+  GUID DRMuuid;
+  ULONG ulDrmUuidListStringSize;
+  GUID argbDrmUuidListString[MIN_DIMENSION];
+} BDA_DRM_DRMSTATUS, *PBDA_DRM_DRMSTATUS;
+
+typedef struct _BDA_WMDRM_STATUS {
+  PBDARESULT lResult;
+  ULONG ulMaxCaptureTokenSize;
+  ULONG uMaxStreamingPid;
+  ULONG ulMaxLicense;
+  ULONG ulMinSecurityLevel;
+  ULONG ulRevInfoSequenceNumber;
+  ULONGLONG ulRevInfoIssuedTime;
+  ULONG ulRevListVersion;
+  ULONG ulRevInfoTTL;
+  ULONG ulState;
+} BDA_WMDRM_STATUS, *PBDA_WMDRM_STATUS;
+
+typedef struct _BDA_WMDRM_KEYINFOLIST {
+  PBDARESULT lResult;
+  ULONG ulKeyuuidBufferLen;
+  GUID argKeyuuidBuffer[MIN_DIMENSION];
+} BDA_WMDRM_KEYINFOLIST, *PBDA_WMDRM_KEYINFOLIST;
+
+typedef struct _BDA_BUFFER {
+  PBDARESULT lResult;
+  ULONG ulBufferSize;
+  BYTE argbBuffer[MIN_DIMENSION];
+} BDA_BUFFER, *PBDA_BUFFER;
+
+typedef struct _BDA_WMDRM_RENEWLICENSE {
+  PBDARESULT lResult;
+  ULONG ulDescrambleStatus;
+  ULONG ulXmrLicenseOutputLength;
+  BYTE argbXmrLicenceOutputBuffer[MIN_DIMENSION];
+} BDA_WMDRM_RENEWLICENSE, *PBDA_WMDRM_RENEWLICENSE;
+
+typedef struct _BDA_WMDRMTUNER_PIDPROTECTION {
+  PBDARESULT lResult;
+  GUID uuidKeyID;
+} BDA_WMDRMTUNER_PIDPROTECTION, *PBDA_WMDRMTUNER_PIDPROTECTION;
+
+typedef struct _BDA_WMDRMTUNER_PURCHASEENTITLEMENT {
+  PBDARESULT lResult;
+  ULONG ulDescrambleStatus;
+  ULONG ulCaptureTokenLength;
+  BYTE argbCaptureTokenBuffer[MIN_DIMENSION];
+} BDA_WMDRMTUNER_PURCHASEENTITLEMENT, *PBDA_WMDRMTUNER_PURCHASEENTITLEMENT;
+
+typedef struct _BDA_TUNER_TUNERSTATE {
+  PBDARESULT lResult;
+  ULONG ulTuneLength;
+  BYTE argbTuneData [MIN_DIMENSION];
+} BDA_TUNER_TUNERSTATE, *PBDA_TUNER_TUNERSTATE;
+
+typedef struct _BDA_TUNER_DIAGNOSTICS {
+  PBDARESULT lResult;
+  ULONG ulSignalLevel;
+  ULONG ulSignalLevelQuality;
+  ULONG ulSignalNoiseRatio;
+} BDA_TUNER_DIAGNOSTICS, *PBDA_TUNER_DIAGNOSTICS;
+
+typedef struct _BDA_STRING {
+  PBDARESULT lResult;
+  ULONG ulStringSize;
+  BYTE argbString[MIN_DIMENSION];
+} BDA_STRING, *PBDA_STRING;
+
+typedef struct _BDA_SCAN_CAPABILTIES {
+  PBDARESULT lResult;
+  UINT64 ul64AnalogStandardsSupported;
+} BDA_SCAN_CAPABILTIES, *PBDA_SCAN_CAPABILTIES;
+
+typedef struct _BDA_SCAN_STATE {
+  PBDARESULT lResult;
+  ULONG ulSignalLock;
+  ULONG ulSecondsLeft;
+  ULONG ulCurrentFrequency;
+} BDA_SCAN_STATE, *PBDA_SCAN_STATE;
+
+typedef struct _BDA_SCAN_START {
+  PBDARESULT lResult;
+  ULONG LowerFrequency;
+  ULONG HigerFrequency;
+} BDA_SCAN_START, *PBDA_SCAN_START;
+
+typedef struct _BDA_GDDS_DATATYPE {
+  PBDARESULT lResult;
+  GUID uuidDataType;
+} BDA_GDDS_DATATYPE, *P_BDA_GDDS_DATATYPE;
+
+typedef struct _BDA_GDDS_DATA {
+  PBDARESULT lResult;
+  ULONG ulDataLength;
+  ULONG ulPercentageProgress;
+  BYTE argbData [MIN_DIMENSION];
+} BDA_GDDS_DATA, *P_BDA_GDDS_DATA;
+
+typedef struct _BDA_USERACTIVITY_INTERVAL {
+  PBDARESULT lResult;
+  ULONG ulActivityInterval;
+} BDA_USERACTIVITY_INTERVAL, *P_BDA_USERACTIVITY_INTERVAL;
+
+typedef struct _BDA_CAS_CHECK_ENTITLEMENTTOKEN {
+  PBDARESULT lResult;
+  ULONG ulDescrambleStatus;
+} BDA_CAS_CHECK_ENTITLEMENTTOKEN, *PBDA_CAS_CHECK_ENTITLEMENTTOKEN;
+
+typedef struct _BDA_CAS_CLOSE_MMIDIALOG {
+  PBDARESULT lResult;
+  ULONG SessionResult;
+} BDA_CAS_CLOSE_MMIDIALOG, *PBDA_CAS_CLOSE_MMIDIALOG;
+
+typedef struct _BDA_CAS_REQUESTTUNERDATA {
+  UCHAR ucRequestPriority;
+  UCHAR ucRequestReason;
+  UCHAR ucRequestConsequences;
+  ULONG ulEstimatedTime;
+} BDA_CAS_REQUESTTUNERDATA, *PBDA_CAS_REQUESTTUNERDATA;
+
+typedef struct _BDA_CAS_OPENMMIDATA {
+  ULONG ulDialogNumber;
+  ULONG ulDialogRequest;
+  GUID uuidDialogType;
+  USHORT usDialogDataLength;
+  BYTE argbDialogData[MIN_DIMENSION];
+} BDA_CAS_OPENMMIDATA, *PBDA_CAS_OPENMMIDATA;
+
+typedef struct _BDA_CAS_CLOSEMMIDATA {
+  ULONG ulDialogNumber;
+} BDA_CAS_CLOSEMMIDATA, *PBDA_CAS_CLOSEMMIDATA;
+
+#pragma pack(push, 1)
+typedef struct _BDA_ISDBCAS_REQUESTHEADER {
+  BYTE bInstruction;
+  BYTE bReserved[3];
+  ULONG ulDataLength;
+  BYTE argbIsdbCommand[MIN_DIMENSION];
+} BDA_ISDBCAS_REQUESTHEADER, *PBDA_ISDBCAS_REQUESTHEADER;
+
+typedef struct _BDA_ISDBCAS_RESPONSEDATA {
+  PBDARESULT lResult;
+  ULONG ulRequestID;
+  ULONG ulIsdbStatus;
+  ULONG ulIsdbDataSize;
+  BYTE argbIsdbCommandData[MIN_DIMENSION];
+} BDA_ISDBCAS_RESPONSEDATA, *PBDA_ISDBCAS_RESPONSEDATA;
 
 typedef struct _BDA_ISDBCAS_EMG_REQ {
   BYTE bCLA;
@@ -448,20 +804,69 @@
   BYTE bP1;
   BYTE bP2;
   BYTE bLC;
-  BYTE bCardId;
+  BYTE bCardId[6];
   BYTE bProtocol;
   BYTE bCABroadcasterGroupId;
   BYTE bMessageControl;
   BYTE bMessageCode[MIN_DIMENSION];
 } BDA_ISDBCAS_EMG_REQ, *PBDA_ISDBCAS_EMG_REQ;
+#pragma pack(pop)
 
+#pragma pack(push, 2)
 typedef struct _BDA_MUX_PIDLISTITEM {
-  USHORT       usPIDNumber;
-  USHORT       usProgramNumber;
+  USHORT usPIDNumber;
+  USHORT usProgramNumber;
   MUX_PID_TYPE ePIDType;
 } BDA_MUX_PIDLISTITEM, *PBDA_MUX_PIDLISTITEM;
+#pragma pack(pop)
 
-#endif /*(_WIN32_WINNT >= 0x0601)*/
+#pragma pack(push, 1)
+typedef struct _BDA_TS_SELECTORINFO {
+  BYTE bTSInfolength;
+  BYTE bReserved[2];
+  GUID guidNetworkType;
+  BYTE bTSIDCount;
+  USHORT usTSID[MIN_DIMENSION];
+} BDA_TS_SELECTORINFO, *PBDA_TS_SELECTORINFO;
 
-#endif /* _BDATYPES_ */
+typedef struct _BDA_TS_SELECTORINFO_ISDBS_EXT {
+  BYTE bTMCC[48];
+} BDA_TS_SELECTORINFO_ISDBS_EXT, *PBDA_TS_SELECTORINFO_ISDBS_EXT;
+#pragma pack(pop)
 
+typedef struct _BDA_DVBT2_L1_SIGNALLING_DATA {
+  BYTE L1Pre_TYPE;
+  BYTE L1Pre_BWT_S1_S2;
+  BYTE L1Pre_REPETITION_GUARD_PAPR;
+  BYTE L1Pre_MOD_COD_FEC;
+  BYTE L1Pre_POSTSIZE_INFO_PILOT[5];
+  BYTE L1Pre_TX_ID_AVAIL;
+  BYTE L1Pre_CELL_ID[2];
+  BYTE L1Pre_NETWORK_ID[2];
+  BYTE L1Pre_T2SYSTEM_ID[2];
+  BYTE L1Pre_NUM_T2_FRAMES;
+  BYTE L1Pre_NUM_DATA_REGENFLAG_L1POSTEXT[2];
+  BYTE L1Pre_NUMRF_CURRENTRF_RESERVED[2];
+  BYTE L1Pre_CRC32[4];
+  BYTE L1PostData[MIN_DIMENSION];
+} BDA_DVBT2_L1_SIGNALLING_DATA, *PBDA_DVBT2_L1_SIGNALLING_DATA;
+
+typedef struct _BDA_RATING_PINRESET {
+  BYTE bPinLength;
+  BYTE argbNewPin[MIN_DIMENSION];
+} BDA_RATING_PINRESET, *PBDA_RATING_PINRESET;
+
+typedef struct _MPEG2_TRANSPORT_STRIDE {
+  DWORD dwOffset;
+  DWORD dwPacketLength;
+  DWORD dwStride;
+} MPEG2_TRANSPORT_STRIDE, *PMPEG2_TRANSPORT_STRIDE;
+
+typedef struct _BDA_SIGNAL_TIMEOUTS {
+  ULONG ulCarrierTimeoutMs;
+  ULONG ulScanningTimeoutMs;
+  ULONG ulTuningTimeoutMs;
+} BDA_SIGNAL_TIMEOUTS, *PBDA_SIGNAL_TIMEOUTS;
+
+#endif
+#endif
diff --git a/x86_64-w64-mingw32/include/codecapi.h b/x86_64-w64-mingw32/include/codecapi.h
index 2583793..a829b62 100644
--- a/x86_64-w64-mingw32/include/codecapi.h
+++ b/x86_64-w64-mingw32/include/codecapi.h
@@ -6,6 +6,30 @@
 #ifndef _INC_CODECAPI
 #define _INC_CODECAPI
 
+#ifdef UUID_GEN
+#  define DEFINE_CODECAPI_GUID(name, guidstr, g1,g2,g3,g4,g5,g6,g7,g8,g9,g10,g11) \
+    OUR_GUID_ENTRY(CODECAPI_##name, g1,g2,g3,g4,g5,g6,g7,g8,g9,g10,g11)
+#else
+#  ifndef DEFINE_GUIDSTRUCT
+#    ifdef __cplusplus
+#      define DEFINE_GUIDSTRUCT(g, n) struct n
+#      define DEFINE_GUIDNAMED(n) __uuidof(struct n)
+#    else
+#      define DEFINE_GUIDSTRUCT(g, n) DEFINE_GUIDEX(n)
+#      define DEFINE_GUIDNAMED(n) n
+#    endif
+#  endif
+#  ifdef __CRT_UUID_DECL
+#    define DEFINE_CODECAPI_GUID(name, guidstr, g1,g2,g3,g4,g5,g6,g7,g8,g9,g10,g11) \
+       struct CODECAPI_##name; \
+       __CRT_UUID_DECL(CODECAPI_##name, g1,g2,g3,g4,g5,g6,g7,g8,g9,g10,g11)
+#    define DEFINE_CODECAPI_GUIDNAMED(name) __uuidof(CODECAPI_##name)
+#  else
+#    define DEFINE_CODECAPI_GUID(name, guidstr, g1,g2,g3,g4,g5,g6,g7,g8,g9,g10,g11) DEFINE_GUIDSTRUCT(guidstr, CODECAPI_##name);
+#    define DEFINE_CODECAPI_GUIDNAMED(name) DEFINE_GUIDNAMED(CODECAPI_##name)
+#  endif
+#endif
+
   enum eAVEncH264VLevel {
     eAVEncH264VLevel1     = 10,
     eAVEncH264VLevel1_b   = 11,
@@ -37,4 +61,89 @@
     eAVEncH264VProfile_Extended   = 88 
   };
 
+#define STATIC_CODECAPI_AVDecVideoThumbnailGenerationMode  0x2efd8eee,0x1150,0x4328,0x9c,0xf5,0x66,0xdc,0xe9,0x33,0xfc,0xf4
+DEFINE_CODECAPI_GUID(AVDecVideoThumbnailGenerationMode, "2efd8eee-1150-4328-9cf5-66dce933fcf4", 0x2efd8eee,
+                     0x1150,0x4328,0x9c,0xf5,0x66,0xdc,0xe9,0x33,0xfc,0xf4)
+
+#define STATIC_CODECAPI_AVDecVideoDropPicWithMissingRef  0xf8226383,0x14c2,0x4567,0x97,0x34,0x50,0x04,0xe9,0x6f,0xf8,0x87
+DEFINE_CODECAPI_GUID(AVDecVideoDropPicWithMissingRef, "f8226383-14c2-4567-9734-5004e96ff887",
+                     0xf8226383,0x14c2,0x4567,0x97,0x34,0x50,0x04,0xe9,0x6f,0xf8,0x87)
+
+#define STATIC_CODECAPI_AVDecVideoSoftwareDeinterlaceMode  0x0c08d1ce,0x9ced,0x4540,0xba,0xe3,0xce,0xb3,0x80,0x14,0x11,0x09
+DEFINE_CODECAPI_GUID(AVDecVideoSoftwareDeinterlaceMode, "0c08d1ce-9ced-4540-bae3-ceb380141109",
+                     0x0c08d1ce,0x9ced,0x4540,0xba,0xe3,0xce,0xb3,0x80,0x14,0x11,0x09);
+
+#define STATIC_CODECAPI_AVDecVideoFastDecodeMode  0x6b529f7d,0xd3b1,0x49c6,0xa9,0x99,0x9e,0xc6,0x91,0x1b,0xed,0xbf
+DEFINE_CODECAPI_GUID(AVDecVideoFastDecodeMode, "6b529f7d-d3b1-49c6-a999-9ec6911bedbf",
+                     0x6b529f7d,0xd3b1,0x49c6,0xa9,0x99,0x9e,0xc6,0x91,0x1b,0xed,0xbf);
+
+#define STATIC_CODECAPI_AVLowLatencyMode  0x9c27891a,0xed7a,0x40e1,0x88,0xe8,0xb2,0x27,0x27,0xa0,0x24,0xee
+DEFINE_CODECAPI_GUID(AVLowLatencyMode, "9c27891a-ed7a-40e1-88e8-b22727a024ee",
+                     0x9c27891a,0xed7a,0x40e1,0x88,0xe8,0xb2,0x27,0x27,0xa0,0x24,0xee)
+
+#define STATIC_CODECAPI_AVDecVideoH264ErrorConcealment  0xececace8,0x3436,0x462c,0x92,0x94,0xcd,0x7b,0xac,0xd7,0x58,0xa9
+DEFINE_CODECAPI_GUID(AVDecVideoH264ErrorConcealment, "ececace8-3436-462c-9294-cd7bacd758a9",
+                     0xececace8,0x3436,0x462c,0x92,0x94,0xcd,0x7b,0xac,0xd7,0x58,0xa9)
+
+#define STATIC_CODECAPI_AVDecVideoMPEG2ErrorConcealment  0x9d2bfe18,0x728d,0x48d2,0xb3,0x58,0xbc,0x7e,0x43,0x6c,0x66,0x74
+DEFINE_CODECAPI_GUID(AVDecVideoMPEG2ErrorConcealment, "9d2bfe18-728d-48d2-b358-bc7e436c6674",
+                     0x9d2bfe18,0x728d,0x48d2,0xb3,0x58,0xbc,0x7e,0x43,0x6c,0x66,0x74)
+
+#define STATIC_CODECAPI_AVDecVideoCodecType  0x434528e5,0x21f0,0x46b6,0xb6,0x2c,0x9b,0x1b,0x6b,0x65,0x8c,0xd1
+DEFINE_CODECAPI_GUID(AVDecVideoCodecType, "434528e5-21f0-46b6-b62c-9b1b6b658cd1",
+                     0x434528e5,0x21f0,0x46b6,0xb6,0x2c,0x9b,0x1b,0x6b,0x65,0x8c,0xd1);
+
+#define STATIC_CODECAPI_AVDecVideoDXVAMode  0xf758f09e,0x7337,0x4ae7,0x83,0x87,0x73,0xdc,0x2d,0x54,0xe6,0x7d
+DEFINE_CODECAPI_GUID(AVDecVideoDXVAMode, "f758f09e-7337-4ae7-8387-73dc2d54e67d",
+                     0xf758f09e,0x7337,0x4ae7,0x83,0x87,0x73,0xdc,0x2d,0x54,0xe6,0x7d);
+
+#define STATIC_CODECAPI_AVDecVideoDXVABusEncryption  0x42153c8b,0xfd0b,0x4765,0xa4,0x62,0xdd,0xd9,0xe8,0xbc,0xc3,0x88
+DEFINE_CODECAPI_GUID(AVDecVideoDXVABusEncryption, "42153c8b-fd0b-4765-a462-ddd9e8bcc388",
+                     0x42153c8b,0xfd0b,0x4765,0xa4,0x62,0xdd,0xd9,0xe8,0xbc,0xc3,0x88);
+
+#define STATIC_CODECAPI_AVDecVideoSWPowerLevel  0xfb5d2347,0x4dd8,0x4509,0xae,0xd0,0xdb,0x5f,0xa9,0xaa,0x93,0xf4
+DEFINE_CODECAPI_GUID(AVDecVideoSWPowerLevel,  "fb5d2347-4dd8-4509-aed0-db5fa9aa93f4",
+                     0xfb5d2347,0x4dd8,0x4509,0xae,0xd0,0xdb,0x5f,0xa9,0xaa,0x93,0xf4)
+
+#define STATIC_CODECAPI_AVDecVideoMaxCodedWidth  0x5ae557b8,0x77af,0x41f5,0x9f,0xa6,0x4d,0xb2,0xfe,0x1d,0x4b,0xca
+DEFINE_CODECAPI_GUID(AVDecVideoMaxCodedWidth, "5ae557b8-77af-41f5-9fa6-4db2fe1d4bca",
+                     0x5ae557b8,0x77af,0x41f5,0x9f,0xa6,0x4d,0xb2,0xfe,0x1d,0x4b,0xca)
+
+#define STATIC_CODECAPI_AVDecVideoMaxCodedHeight  0x7262a16a,0xd2dc,0x4e75,0x9b,0xa8,0x65,0xc0,0xc6,0xd3,0x2b,0x13
+DEFINE_CODECAPI_GUID(AVDecVideoMaxCodedHeight, "7262a16a-d2dc-4e75-9ba8-65c0c6d32b13",
+                     0x7262a16a,0xd2dc,0x4e75,0x9b,0xa8,0x65,0xc0,0xc6,0xd3,0x2b,0x13)
+
+#define STATIC_CODECAPI_AVDecNumWorkerThreads  0x9561c3e8,0xea9e,0x4435,0x9b,0x1e,0xa9,0x3e,0x69,0x18,0x94,0xd8
+DEFINE_CODECAPI_GUID(AVDecNumWorkerThreads, "9561c3e8-ea9e-4435-9b1e-a93e691894d8",
+                     0x9561c3e8,0xea9e,0x4435,0x9b,0x1e,0xa9,0x3e,0x69,0x18,0x94,0xd8)
+
+#define STATIC_CODECAPI_AVDecSoftwareDynamicFormatChange  0x862e2f0a,0x507b,0x47ff,0xaf,0x47,0x01,0xe2,0x62,0x42,0x98,0xb7
+DEFINE_CODECAPI_GUID(AVDecSoftwareDynamicFormatChange, "862e2f0a-507b-47ff-af47-01e2624298b7",
+                     0x862e2f0a,0x507b,0x47ff,0xaf,0x47,0x01,0xe2,0x62,0x42,0x98,0xb7)
+
+#define STATIC_CODECAPI_AVDecDisableVideoPostProcessing  0xf8749193,0x667a,0x4f2c,0xa9,0xe8,0x5d,0x4a,0xf9,0x24,0xf0,0x8f
+DEFINE_CODECAPI_GUID(AVDecDisableVideoPostProcessing, "f8749193-667a-4f2c-a9e8-5d4af924f08f",
+                     0xf8749193,0x667a,0x4f2c,0xa9,0xe8,0x5d,0x4a,0xf9,0x24,0xf0,0x8f);
+
+#ifndef UUID_GEN
+
+#define CODECAPI_AVDecVideoThumbnailGenerationMode  DEFINE_CODECAPI_GUIDNAMED(AVDecVideoThumbnailGenerationMode)
+#define CODECAPI_AVDecVideoDropPicWithMissingRef    DEFINE_CODECAPI_GUIDNAMED(AVDecVideoDropPicWithMissingRef)
+#define CODECAPI_AVDecVideoSoftwareDeinterlaceMode  DEFINE_CODECAPI_GUIDNAMED(AVDecVideoSoftwareDeinterlaceMode)
+#define CODECAPI_AVDecVideoFastDecodeMode           DEFINE_CODECAPI_GUIDNAMED(AVDecVideoFastDecodeMode)
+#define CODECAPI_AVLowLatencyMode                   DEFINE_CODECAPI_GUIDNAMED(AVLowLatencyMode)
+#define CODECAPI_AVDecVideoH264ErrorConcealment     DEFINE_CODECAPI_GUIDNAMED(AVDecVideoH264ErrorConcealment)
+#define CODECAPI_AVDecVideoMPEG2ErrorConcealment    DEFINE_CODECAPI_GUIDNAMED(AVDecVideoMPEG2ErrorConcealment)
+#define CODECAPI_AVDecVideoCodecType                DEFINE_CODECAPI_GUIDNAMED(AVDecVideoCodecType)
+#define CODECAPI_AVDecVideoDXVAMode                 DEFINE_CODECAPI_GUIDNAMED(AVDecVideoDXVAMode)
+#define CODECAPI_AVDecVideoDXVABusEncryption        DEFINE_CODECAPI_GUIDNAMED(AVDecVideoDXVABusEncryption)
+#define CODECAPI_AVDecVideoSWPowerLevel             DEFINE_CODECAPI_GUIDNAMED(AVDecVideoSWPowerLevel)
+#define CODECAPI_AVDecVideoMaxCodedWidth            DEFINE_CODECAPI_GUIDNAMED(AVDecVideoMaxCodedWidth)
+#define CODECAPI_AVDecVideoMaxCodedHeight           DEFINE_CODECAPI_GUIDNAMED(AVDecVideoMaxCodedHeight)
+#define CODECAPI_AVDecNumWorkerThreads              DEFINE_CODECAPI_GUIDNAMED(AVDecNumWorkerThreads)
+#define CODECAPI_AVDecSoftwareDynamicFormatChange   DEFINE_CODECAPI_GUIDNAMED(AVDecSoftwareDynamicFormatChange)
+#define CODECAPI_AVDecDisableVideoPostProcessing    DEFINE_CODECAPI_GUIDNAMED(AVDecDisableVideoPostProcessing)
+
+#endif
+
 #endif /*_INC_CODECAPI*/
diff --git a/x86_64-w64-mingw32/include/ctfutb.h b/x86_64-w64-mingw32/include/ctfutb.h
index 8cbf07a..58a995d 100644
--- a/x86_64-w64-mingw32/include/ctfutb.h
+++ b/x86_64-w64-mingw32/include/ctfutb.h
@@ -17,11 +17,36 @@
 
 /* Forward declarations */
 
+#ifndef __ITfLangBarItem_FWD_DEFINED__
+#define __ITfLangBarItem_FWD_DEFINED__
+typedef interface ITfLangBarItem ITfLangBarItem;
+#endif
+
+#ifndef __IEnumTfLangBarItems_FWD_DEFINED__
+#define __IEnumTfLangBarItems_FWD_DEFINED__
+typedef interface IEnumTfLangBarItems IEnumTfLangBarItems;
+#endif
+
+#ifndef __ITfLangBarItemSink_FWD_DEFINED__
+#define __ITfLangBarItemSink_FWD_DEFINED__
+typedef interface ITfLangBarItemSink ITfLangBarItemSink;
+#endif
+
+#ifndef __ITfLangBarItemMgr_FWD_DEFINED__
+#define __ITfLangBarItemMgr_FWD_DEFINED__
+typedef interface ITfLangBarItemMgr ITfLangBarItemMgr;
+#endif
+
 #ifndef __ITfLangBarMgr_FWD_DEFINED__
 #define __ITfLangBarMgr_FWD_DEFINED__
 typedef interface ITfLangBarMgr ITfLangBarMgr;
 #endif
 
+#ifndef __ITfLangBarEventSink_FWD_DEFINED__
+#define __ITfLangBarEventSink_FWD_DEFINED__
+typedef interface ITfLangBarEventSink ITfLangBarEventSink;
+#endif
+
 /* Headers for imported files */
 
 #include <oaidl.h>
@@ -45,6 +70,723 @@
 typedef interface ITfInputProcessorProfiles ITfInputProcessorProfiles;
 #endif
 
+#define TF_LBI_DESC_MAXLEN (32)
+
+typedef struct TF_LANGBARITEMINFO {
+    CLSID clsidService;
+    GUID guidItem;
+    DWORD dwStyle;
+    ULONG ulSort;
+    WCHAR szDescription[32];
+} TF_LANGBARITEMINFO;
+/*****************************************************************************
+ * ITfLangBarItem interface
+ */
+#ifndef __ITfLangBarItem_INTERFACE_DEFINED__
+#define __ITfLangBarItem_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITfLangBarItem, 0x73540d69, 0xedeb, 0x4ee9, 0x96,0xc9, 0x23,0xaa,0x30,0xb2,0x59,0x16);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("73540d69-edeb-4ee9-96c9-23aa30b25916")
+ITfLangBarItem : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetInfo(
+        TF_LANGBARITEMINFO *pInfo) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetStatus(
+        DWORD *pdwStatus) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Show(
+        WINBOOL fShow) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTooltipString(
+        BSTR *pbstrToolTip) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITfLangBarItem, 0x73540d69, 0xedeb, 0x4ee9, 0x96,0xc9, 0x23,0xaa,0x30,0xb2,0x59,0x16)
+#endif
+#else
+typedef struct ITfLangBarItemVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITfLangBarItem* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITfLangBarItem* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITfLangBarItem* This);
+
+    /*** ITfLangBarItem methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetInfo)(
+        ITfLangBarItem* This,
+        TF_LANGBARITEMINFO *pInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetStatus)(
+        ITfLangBarItem* This,
+        DWORD *pdwStatus);
+
+    HRESULT (STDMETHODCALLTYPE *Show)(
+        ITfLangBarItem* This,
+        WINBOOL fShow);
+
+    HRESULT (STDMETHODCALLTYPE *GetTooltipString)(
+        ITfLangBarItem* This,
+        BSTR *pbstrToolTip);
+
+    END_INTERFACE
+} ITfLangBarItemVtbl;
+interface ITfLangBarItem {
+    CONST_VTBL ITfLangBarItemVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ITfLangBarItem_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITfLangBarItem_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITfLangBarItem_Release(This) (This)->lpVtbl->Release(This)
+/*** ITfLangBarItem methods ***/
+#define ITfLangBarItem_GetInfo(This,pInfo) (This)->lpVtbl->GetInfo(This,pInfo)
+#define ITfLangBarItem_GetStatus(This,pdwStatus) (This)->lpVtbl->GetStatus(This,pdwStatus)
+#define ITfLangBarItem_Show(This,fShow) (This)->lpVtbl->Show(This,fShow)
+#define ITfLangBarItem_GetTooltipString(This,pbstrToolTip) (This)->lpVtbl->GetTooltipString(This,pbstrToolTip)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ITfLangBarItem_QueryInterface(ITfLangBarItem* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ITfLangBarItem_AddRef(ITfLangBarItem* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ITfLangBarItem_Release(ITfLangBarItem* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITfLangBarItem methods ***/
+static FORCEINLINE HRESULT ITfLangBarItem_GetInfo(ITfLangBarItem* This,TF_LANGBARITEMINFO *pInfo) {
+    return This->lpVtbl->GetInfo(This,pInfo);
+}
+static FORCEINLINE HRESULT ITfLangBarItem_GetStatus(ITfLangBarItem* This,DWORD *pdwStatus) {
+    return This->lpVtbl->GetStatus(This,pdwStatus);
+}
+static FORCEINLINE HRESULT ITfLangBarItem_Show(ITfLangBarItem* This,WINBOOL fShow) {
+    return This->lpVtbl->Show(This,fShow);
+}
+static FORCEINLINE HRESULT ITfLangBarItem_GetTooltipString(ITfLangBarItem* This,BSTR *pbstrToolTip) {
+    return This->lpVtbl->GetTooltipString(This,pbstrToolTip);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITfLangBarItem_GetInfo_Proxy(
+    ITfLangBarItem* This,
+    TF_LANGBARITEMINFO *pInfo);
+void __RPC_STUB ITfLangBarItem_GetInfo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfLangBarItem_GetStatus_Proxy(
+    ITfLangBarItem* This,
+    DWORD *pdwStatus);
+void __RPC_STUB ITfLangBarItem_GetStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfLangBarItem_Show_Proxy(
+    ITfLangBarItem* This,
+    WINBOOL fShow);
+void __RPC_STUB ITfLangBarItem_Show_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfLangBarItem_GetTooltipString_Proxy(
+    ITfLangBarItem* This,
+    BSTR *pbstrToolTip);
+void __RPC_STUB ITfLangBarItem_GetTooltipString_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ITfLangBarItem_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumTfLangBarItems interface
+ */
+#ifndef __IEnumTfLangBarItems_INTERFACE_DEFINED__
+#define __IEnumTfLangBarItems_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IEnumTfLangBarItems, 0x583f34d0, 0xde25, 0x11d2, 0xaf,0xdd, 0x00,0x10,0x5a,0x27,0x99,0xb5);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("583f34d0-de25-11d2-afdd-00105a2799b5")
+IEnumTfLangBarItems : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IEnumTfLangBarItems **ppEnum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Next(
+        ULONG ulCount,
+        ITfLangBarItem **ppItem,
+        ULONG *pcFetched) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Skip(
+        ULONG ulCount) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IEnumTfLangBarItems, 0x583f34d0, 0xde25, 0x11d2, 0xaf,0xdd, 0x00,0x10,0x5a,0x27,0x99,0xb5)
+#endif
+#else
+typedef struct IEnumTfLangBarItemsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IEnumTfLangBarItems* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IEnumTfLangBarItems* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IEnumTfLangBarItems* This);
+
+    /*** IEnumTfLangBarItems methods ***/
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IEnumTfLangBarItems* This,
+        IEnumTfLangBarItems **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *Next)(
+        IEnumTfLangBarItems* This,
+        ULONG ulCount,
+        ITfLangBarItem **ppItem,
+        ULONG *pcFetched);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        IEnumTfLangBarItems* This);
+
+    HRESULT (STDMETHODCALLTYPE *Skip)(
+        IEnumTfLangBarItems* This,
+        ULONG ulCount);
+
+    END_INTERFACE
+} IEnumTfLangBarItemsVtbl;
+interface IEnumTfLangBarItems {
+    CONST_VTBL IEnumTfLangBarItemsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IEnumTfLangBarItems_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumTfLangBarItems_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumTfLangBarItems_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumTfLangBarItems methods ***/
+#define IEnumTfLangBarItems_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)
+#define IEnumTfLangBarItems_Next(This,ulCount,ppItem,pcFetched) (This)->lpVtbl->Next(This,ulCount,ppItem,pcFetched)
+#define IEnumTfLangBarItems_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumTfLangBarItems_Skip(This,ulCount) (This)->lpVtbl->Skip(This,ulCount)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IEnumTfLangBarItems_QueryInterface(IEnumTfLangBarItems* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IEnumTfLangBarItems_AddRef(IEnumTfLangBarItems* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IEnumTfLangBarItems_Release(IEnumTfLangBarItems* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IEnumTfLangBarItems methods ***/
+static FORCEINLINE HRESULT IEnumTfLangBarItems_Clone(IEnumTfLangBarItems* This,IEnumTfLangBarItems **ppEnum) {
+    return This->lpVtbl->Clone(This,ppEnum);
+}
+static FORCEINLINE HRESULT IEnumTfLangBarItems_Next(IEnumTfLangBarItems* This,ULONG ulCount,ITfLangBarItem **ppItem,ULONG *pcFetched) {
+    return This->lpVtbl->Next(This,ulCount,ppItem,pcFetched);
+}
+static FORCEINLINE HRESULT IEnumTfLangBarItems_Reset(IEnumTfLangBarItems* This) {
+    return This->lpVtbl->Reset(This);
+}
+static FORCEINLINE HRESULT IEnumTfLangBarItems_Skip(IEnumTfLangBarItems* This,ULONG ulCount) {
+    return This->lpVtbl->Skip(This,ulCount);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumTfLangBarItems_Clone_Proxy(
+    IEnumTfLangBarItems* This,
+    IEnumTfLangBarItems **ppEnum);
+void __RPC_STUB IEnumTfLangBarItems_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumTfLangBarItems_Next_Proxy(
+    IEnumTfLangBarItems* This,
+    ULONG ulCount,
+    ITfLangBarItem **ppItem,
+    ULONG *pcFetched);
+void __RPC_STUB IEnumTfLangBarItems_Next_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumTfLangBarItems_Reset_Proxy(
+    IEnumTfLangBarItems* This);
+void __RPC_STUB IEnumTfLangBarItems_Reset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumTfLangBarItems_Skip_Proxy(
+    IEnumTfLangBarItems* This,
+    ULONG ulCount);
+void __RPC_STUB IEnumTfLangBarItems_Skip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IEnumTfLangBarItems_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITfLangBarItemSink interface
+ */
+#ifndef __ITfLangBarItemSink_INTERFACE_DEFINED__
+#define __ITfLangBarItemSink_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITfLangBarItemSink, 0x57dbe1a0, 0xde25, 0x11d2, 0xaf,0xdd, 0x00,0x10,0x5a,0x27,0x99,0xb5);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("57dbe1a0-de25-11d2-afdd-00105a2799b5")
+ITfLangBarItemSink : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE OnUpdate(
+        DWORD dwFlags) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITfLangBarItemSink, 0x57dbe1a0, 0xde25, 0x11d2, 0xaf,0xdd, 0x00,0x10,0x5a,0x27,0x99,0xb5)
+#endif
+#else
+typedef struct ITfLangBarItemSinkVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITfLangBarItemSink* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITfLangBarItemSink* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITfLangBarItemSink* This);
+
+    /*** ITfLangBarItemSink methods ***/
+    HRESULT (STDMETHODCALLTYPE *OnUpdate)(
+        ITfLangBarItemSink* This,
+        DWORD dwFlags);
+
+    END_INTERFACE
+} ITfLangBarItemSinkVtbl;
+interface ITfLangBarItemSink {
+    CONST_VTBL ITfLangBarItemSinkVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ITfLangBarItemSink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITfLangBarItemSink_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITfLangBarItemSink_Release(This) (This)->lpVtbl->Release(This)
+/*** ITfLangBarItemSink methods ***/
+#define ITfLangBarItemSink_OnUpdate(This,dwFlags) (This)->lpVtbl->OnUpdate(This,dwFlags)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ITfLangBarItemSink_QueryInterface(ITfLangBarItemSink* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ITfLangBarItemSink_AddRef(ITfLangBarItemSink* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ITfLangBarItemSink_Release(ITfLangBarItemSink* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITfLangBarItemSink methods ***/
+static FORCEINLINE HRESULT ITfLangBarItemSink_OnUpdate(ITfLangBarItemSink* This,DWORD dwFlags) {
+    return This->lpVtbl->OnUpdate(This,dwFlags);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITfLangBarItemSink_OnUpdate_Proxy(
+    ITfLangBarItemSink* This,
+    DWORD dwFlags);
+void __RPC_STUB ITfLangBarItemSink_OnUpdate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ITfLangBarItemSink_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITfLangBarItemMgr interface
+ */
+#ifndef __ITfLangBarItemMgr_INTERFACE_DEFINED__
+#define __ITfLangBarItemMgr_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITfLangBarItemMgr, 0xba468c55, 0x9956, 0x4fb1, 0xa5,0x9d, 0x52,0xa7,0xdd,0x7c,0xc6,0xaa);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("ba468c55-9956-4fb1-a59d-52a7dd7cc6aa")
+ITfLangBarItemMgr : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE EnumItems(
+        IEnumTfLangBarItems **ppEnum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetItem(
+        REFGUID rguid,
+        ITfLangBarItem **ppItem) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddItem(
+        ITfLangBarItem *punk) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveItem(
+        ITfLangBarItem *punk) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AdviseItemSink(
+        ITfLangBarItemSink *punk,
+        DWORD *pdwCookie,
+        REFGUID rguidItem) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnadviseItemSink(
+        DWORD dwCookie) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetItemFloatingRect(
+        DWORD dwThreadId,
+        REFGUID rguid,
+        RECT *prc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetItemsStatus(
+        ULONG ulCount,
+        const GUID *prgguid,
+        DWORD *pdwStatus) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetItemNum(
+        ULONG *pulCount) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetItems(
+        ULONG ulCount,
+        ITfLangBarItem **ppItem,
+        TF_LANGBARITEMINFO *pInfo,
+        DWORD *pdwStatus,
+        ULONG *pcFetched) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AdviseItemsSink(
+        ULONG ulCount,
+        ITfLangBarItemSink **ppunk,
+        const GUID *pguidItem,
+        DWORD *pdwCookie) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnadviseItemsSink(
+        ULONG ulCount,
+        DWORD *pdwCookie) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITfLangBarItemMgr, 0xba468c55, 0x9956, 0x4fb1, 0xa5,0x9d, 0x52,0xa7,0xdd,0x7c,0xc6,0xaa)
+#endif
+#else
+typedef struct ITfLangBarItemMgrVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITfLangBarItemMgr* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITfLangBarItemMgr* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITfLangBarItemMgr* This);
+
+    /*** ITfLangBarItemMgr methods ***/
+    HRESULT (STDMETHODCALLTYPE *EnumItems)(
+        ITfLangBarItemMgr* This,
+        IEnumTfLangBarItems **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *GetItem)(
+        ITfLangBarItemMgr* This,
+        REFGUID rguid,
+        ITfLangBarItem **ppItem);
+
+    HRESULT (STDMETHODCALLTYPE *AddItem)(
+        ITfLangBarItemMgr* This,
+        ITfLangBarItem *punk);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveItem)(
+        ITfLangBarItemMgr* This,
+        ITfLangBarItem *punk);
+
+    HRESULT (STDMETHODCALLTYPE *AdviseItemSink)(
+        ITfLangBarItemMgr* This,
+        ITfLangBarItemSink *punk,
+        DWORD *pdwCookie,
+        REFGUID rguidItem);
+
+    HRESULT (STDMETHODCALLTYPE *UnadviseItemSink)(
+        ITfLangBarItemMgr* This,
+        DWORD dwCookie);
+
+    HRESULT (STDMETHODCALLTYPE *GetItemFloatingRect)(
+        ITfLangBarItemMgr* This,
+        DWORD dwThreadId,
+        REFGUID rguid,
+        RECT *prc);
+
+    HRESULT (STDMETHODCALLTYPE *GetItemsStatus)(
+        ITfLangBarItemMgr* This,
+        ULONG ulCount,
+        const GUID *prgguid,
+        DWORD *pdwStatus);
+
+    HRESULT (STDMETHODCALLTYPE *GetItemNum)(
+        ITfLangBarItemMgr* This,
+        ULONG *pulCount);
+
+    HRESULT (STDMETHODCALLTYPE *GetItems)(
+        ITfLangBarItemMgr* This,
+        ULONG ulCount,
+        ITfLangBarItem **ppItem,
+        TF_LANGBARITEMINFO *pInfo,
+        DWORD *pdwStatus,
+        ULONG *pcFetched);
+
+    HRESULT (STDMETHODCALLTYPE *AdviseItemsSink)(
+        ITfLangBarItemMgr* This,
+        ULONG ulCount,
+        ITfLangBarItemSink **ppunk,
+        const GUID *pguidItem,
+        DWORD *pdwCookie);
+
+    HRESULT (STDMETHODCALLTYPE *UnadviseItemsSink)(
+        ITfLangBarItemMgr* This,
+        ULONG ulCount,
+        DWORD *pdwCookie);
+
+    END_INTERFACE
+} ITfLangBarItemMgrVtbl;
+interface ITfLangBarItemMgr {
+    CONST_VTBL ITfLangBarItemMgrVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ITfLangBarItemMgr_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITfLangBarItemMgr_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITfLangBarItemMgr_Release(This) (This)->lpVtbl->Release(This)
+/*** ITfLangBarItemMgr methods ***/
+#define ITfLangBarItemMgr_EnumItems(This,ppEnum) (This)->lpVtbl->EnumItems(This,ppEnum)
+#define ITfLangBarItemMgr_GetItem(This,rguid,ppItem) (This)->lpVtbl->GetItem(This,rguid,ppItem)
+#define ITfLangBarItemMgr_AddItem(This,punk) (This)->lpVtbl->AddItem(This,punk)
+#define ITfLangBarItemMgr_RemoveItem(This,punk) (This)->lpVtbl->RemoveItem(This,punk)
+#define ITfLangBarItemMgr_AdviseItemSink(This,punk,pdwCookie,rguidItem) (This)->lpVtbl->AdviseItemSink(This,punk,pdwCookie,rguidItem)
+#define ITfLangBarItemMgr_UnadviseItemSink(This,dwCookie) (This)->lpVtbl->UnadviseItemSink(This,dwCookie)
+#define ITfLangBarItemMgr_GetItemFloatingRect(This,dwThreadId,rguid,prc) (This)->lpVtbl->GetItemFloatingRect(This,dwThreadId,rguid,prc)
+#define ITfLangBarItemMgr_GetItemsStatus(This,ulCount,prgguid,pdwStatus) (This)->lpVtbl->GetItemsStatus(This,ulCount,prgguid,pdwStatus)
+#define ITfLangBarItemMgr_GetItemNum(This,pulCount) (This)->lpVtbl->GetItemNum(This,pulCount)
+#define ITfLangBarItemMgr_GetItems(This,ulCount,ppItem,pInfo,pdwStatus,pcFetched) (This)->lpVtbl->GetItems(This,ulCount,ppItem,pInfo,pdwStatus,pcFetched)
+#define ITfLangBarItemMgr_AdviseItemsSink(This,ulCount,ppunk,pguidItem,pdwCookie) (This)->lpVtbl->AdviseItemsSink(This,ulCount,ppunk,pguidItem,pdwCookie)
+#define ITfLangBarItemMgr_UnadviseItemsSink(This,ulCount,pdwCookie) (This)->lpVtbl->UnadviseItemsSink(This,ulCount,pdwCookie)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ITfLangBarItemMgr_QueryInterface(ITfLangBarItemMgr* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ITfLangBarItemMgr_AddRef(ITfLangBarItemMgr* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ITfLangBarItemMgr_Release(ITfLangBarItemMgr* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITfLangBarItemMgr methods ***/
+static FORCEINLINE HRESULT ITfLangBarItemMgr_EnumItems(ITfLangBarItemMgr* This,IEnumTfLangBarItems **ppEnum) {
+    return This->lpVtbl->EnumItems(This,ppEnum);
+}
+static FORCEINLINE HRESULT ITfLangBarItemMgr_GetItem(ITfLangBarItemMgr* This,REFGUID rguid,ITfLangBarItem **ppItem) {
+    return This->lpVtbl->GetItem(This,rguid,ppItem);
+}
+static FORCEINLINE HRESULT ITfLangBarItemMgr_AddItem(ITfLangBarItemMgr* This,ITfLangBarItem *punk) {
+    return This->lpVtbl->AddItem(This,punk);
+}
+static FORCEINLINE HRESULT ITfLangBarItemMgr_RemoveItem(ITfLangBarItemMgr* This,ITfLangBarItem *punk) {
+    return This->lpVtbl->RemoveItem(This,punk);
+}
+static FORCEINLINE HRESULT ITfLangBarItemMgr_AdviseItemSink(ITfLangBarItemMgr* This,ITfLangBarItemSink *punk,DWORD *pdwCookie,REFGUID rguidItem) {
+    return This->lpVtbl->AdviseItemSink(This,punk,pdwCookie,rguidItem);
+}
+static FORCEINLINE HRESULT ITfLangBarItemMgr_UnadviseItemSink(ITfLangBarItemMgr* This,DWORD dwCookie) {
+    return This->lpVtbl->UnadviseItemSink(This,dwCookie);
+}
+static FORCEINLINE HRESULT ITfLangBarItemMgr_GetItemFloatingRect(ITfLangBarItemMgr* This,DWORD dwThreadId,REFGUID rguid,RECT *prc) {
+    return This->lpVtbl->GetItemFloatingRect(This,dwThreadId,rguid,prc);
+}
+static FORCEINLINE HRESULT ITfLangBarItemMgr_GetItemsStatus(ITfLangBarItemMgr* This,ULONG ulCount,const GUID *prgguid,DWORD *pdwStatus) {
+    return This->lpVtbl->GetItemsStatus(This,ulCount,prgguid,pdwStatus);
+}
+static FORCEINLINE HRESULT ITfLangBarItemMgr_GetItemNum(ITfLangBarItemMgr* This,ULONG *pulCount) {
+    return This->lpVtbl->GetItemNum(This,pulCount);
+}
+static FORCEINLINE HRESULT ITfLangBarItemMgr_GetItems(ITfLangBarItemMgr* This,ULONG ulCount,ITfLangBarItem **ppItem,TF_LANGBARITEMINFO *pInfo,DWORD *pdwStatus,ULONG *pcFetched) {
+    return This->lpVtbl->GetItems(This,ulCount,ppItem,pInfo,pdwStatus,pcFetched);
+}
+static FORCEINLINE HRESULT ITfLangBarItemMgr_AdviseItemsSink(ITfLangBarItemMgr* This,ULONG ulCount,ITfLangBarItemSink **ppunk,const GUID *pguidItem,DWORD *pdwCookie) {
+    return This->lpVtbl->AdviseItemsSink(This,ulCount,ppunk,pguidItem,pdwCookie);
+}
+static FORCEINLINE HRESULT ITfLangBarItemMgr_UnadviseItemsSink(ITfLangBarItemMgr* This,ULONG ulCount,DWORD *pdwCookie) {
+    return This->lpVtbl->UnadviseItemsSink(This,ulCount,pdwCookie);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITfLangBarItemMgr_EnumItems_Proxy(
+    ITfLangBarItemMgr* This,
+    IEnumTfLangBarItems **ppEnum);
+void __RPC_STUB ITfLangBarItemMgr_EnumItems_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfLangBarItemMgr_GetItem_Proxy(
+    ITfLangBarItemMgr* This,
+    REFGUID rguid,
+    ITfLangBarItem **ppItem);
+void __RPC_STUB ITfLangBarItemMgr_GetItem_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfLangBarItemMgr_AddItem_Proxy(
+    ITfLangBarItemMgr* This,
+    ITfLangBarItem *punk);
+void __RPC_STUB ITfLangBarItemMgr_AddItem_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfLangBarItemMgr_RemoveItem_Proxy(
+    ITfLangBarItemMgr* This,
+    ITfLangBarItem *punk);
+void __RPC_STUB ITfLangBarItemMgr_RemoveItem_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfLangBarItemMgr_AdviseItemSink_Proxy(
+    ITfLangBarItemMgr* This,
+    ITfLangBarItemSink *punk,
+    DWORD *pdwCookie,
+    REFGUID rguidItem);
+void __RPC_STUB ITfLangBarItemMgr_AdviseItemSink_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfLangBarItemMgr_UnadviseItemSink_Proxy(
+    ITfLangBarItemMgr* This,
+    DWORD dwCookie);
+void __RPC_STUB ITfLangBarItemMgr_UnadviseItemSink_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfLangBarItemMgr_GetItemFloatingRect_Proxy(
+    ITfLangBarItemMgr* This,
+    DWORD dwThreadId,
+    REFGUID rguid,
+    RECT *prc);
+void __RPC_STUB ITfLangBarItemMgr_GetItemFloatingRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfLangBarItemMgr_GetItemsStatus_Proxy(
+    ITfLangBarItemMgr* This,
+    ULONG ulCount,
+    const GUID *prgguid,
+    DWORD *pdwStatus);
+void __RPC_STUB ITfLangBarItemMgr_GetItemsStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfLangBarItemMgr_GetItemNum_Proxy(
+    ITfLangBarItemMgr* This,
+    ULONG *pulCount);
+void __RPC_STUB ITfLangBarItemMgr_GetItemNum_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfLangBarItemMgr_GetItems_Proxy(
+    ITfLangBarItemMgr* This,
+    ULONG ulCount,
+    ITfLangBarItem **ppItem,
+    TF_LANGBARITEMINFO *pInfo,
+    DWORD *pdwStatus,
+    ULONG *pcFetched);
+void __RPC_STUB ITfLangBarItemMgr_GetItems_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfLangBarItemMgr_AdviseItemsSink_Proxy(
+    ITfLangBarItemMgr* This,
+    ULONG ulCount,
+    ITfLangBarItemSink **ppunk,
+    const GUID *pguidItem,
+    DWORD *pdwCookie);
+void __RPC_STUB ITfLangBarItemMgr_AdviseItemsSink_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfLangBarItemMgr_UnadviseItemsSink_Proxy(
+    ITfLangBarItemMgr* This,
+    ULONG ulCount,
+    DWORD *pdwCookie);
+void __RPC_STUB ITfLangBarItemMgr_UnadviseItemsSink_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ITfLangBarItemMgr_INTERFACE_DEFINED__ */
+
 /*****************************************************************************
  * ITfLangBarMgr interface
  */
@@ -320,8 +1062,206 @@
 
 #endif  /* __ITfLangBarMgr_INTERFACE_DEFINED__ */
 
+/*****************************************************************************
+ * ITfLangBarEventSink interface
+ */
+#ifndef __ITfLangBarEventSink_INTERFACE_DEFINED__
+#define __ITfLangBarEventSink_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITfLangBarEventSink, 0x18a4e900, 0xe0ae, 0x11d2, 0xaf,0xdd, 0x00,0x10,0x5a,0x27,0x99,0xb5);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("18a4e900-e0ae-11d2-afdd-00105a2799b5")
+ITfLangBarEventSink : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE OnSetFocus(
+        DWORD dwThreadId) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnThreadTerminate(
+        DWORD dwThreadId) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnThreadItemChange(
+        DWORD dwThreadId) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnModalInput(
+        DWORD dwThreadId,
+        UINT uMsg,
+        WPARAM wParam,
+        LPARAM lParam) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ShowFloating(
+        DWORD dwFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetItemFloatingRect(
+        DWORD dwThreadId,
+        REFGUID rguid,
+        RECT *prc) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITfLangBarEventSink, 0x18a4e900, 0xe0ae, 0x11d2, 0xaf,0xdd, 0x00,0x10,0x5a,0x27,0x99,0xb5)
+#endif
+#else
+typedef struct ITfLangBarEventSinkVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITfLangBarEventSink* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITfLangBarEventSink* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITfLangBarEventSink* This);
+
+    /*** ITfLangBarEventSink methods ***/
+    HRESULT (STDMETHODCALLTYPE *OnSetFocus)(
+        ITfLangBarEventSink* This,
+        DWORD dwThreadId);
+
+    HRESULT (STDMETHODCALLTYPE *OnThreadTerminate)(
+        ITfLangBarEventSink* This,
+        DWORD dwThreadId);
+
+    HRESULT (STDMETHODCALLTYPE *OnThreadItemChange)(
+        ITfLangBarEventSink* This,
+        DWORD dwThreadId);
+
+    HRESULT (STDMETHODCALLTYPE *OnModalInput)(
+        ITfLangBarEventSink* This,
+        DWORD dwThreadId,
+        UINT uMsg,
+        WPARAM wParam,
+        LPARAM lParam);
+
+    HRESULT (STDMETHODCALLTYPE *ShowFloating)(
+        ITfLangBarEventSink* This,
+        DWORD dwFlags);
+
+    HRESULT (STDMETHODCALLTYPE *GetItemFloatingRect)(
+        ITfLangBarEventSink* This,
+        DWORD dwThreadId,
+        REFGUID rguid,
+        RECT *prc);
+
+    END_INTERFACE
+} ITfLangBarEventSinkVtbl;
+interface ITfLangBarEventSink {
+    CONST_VTBL ITfLangBarEventSinkVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ITfLangBarEventSink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITfLangBarEventSink_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITfLangBarEventSink_Release(This) (This)->lpVtbl->Release(This)
+/*** ITfLangBarEventSink methods ***/
+#define ITfLangBarEventSink_OnSetFocus(This,dwThreadId) (This)->lpVtbl->OnSetFocus(This,dwThreadId)
+#define ITfLangBarEventSink_OnThreadTerminate(This,dwThreadId) (This)->lpVtbl->OnThreadTerminate(This,dwThreadId)
+#define ITfLangBarEventSink_OnThreadItemChange(This,dwThreadId) (This)->lpVtbl->OnThreadItemChange(This,dwThreadId)
+#define ITfLangBarEventSink_OnModalInput(This,dwThreadId,uMsg,wParam,lParam) (This)->lpVtbl->OnModalInput(This,dwThreadId,uMsg,wParam,lParam)
+#define ITfLangBarEventSink_ShowFloating(This,dwFlags) (This)->lpVtbl->ShowFloating(This,dwFlags)
+#define ITfLangBarEventSink_GetItemFloatingRect(This,dwThreadId,rguid,prc) (This)->lpVtbl->GetItemFloatingRect(This,dwThreadId,rguid,prc)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ITfLangBarEventSink_QueryInterface(ITfLangBarEventSink* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ITfLangBarEventSink_AddRef(ITfLangBarEventSink* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ITfLangBarEventSink_Release(ITfLangBarEventSink* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITfLangBarEventSink methods ***/
+static FORCEINLINE HRESULT ITfLangBarEventSink_OnSetFocus(ITfLangBarEventSink* This,DWORD dwThreadId) {
+    return This->lpVtbl->OnSetFocus(This,dwThreadId);
+}
+static FORCEINLINE HRESULT ITfLangBarEventSink_OnThreadTerminate(ITfLangBarEventSink* This,DWORD dwThreadId) {
+    return This->lpVtbl->OnThreadTerminate(This,dwThreadId);
+}
+static FORCEINLINE HRESULT ITfLangBarEventSink_OnThreadItemChange(ITfLangBarEventSink* This,DWORD dwThreadId) {
+    return This->lpVtbl->OnThreadItemChange(This,dwThreadId);
+}
+static FORCEINLINE HRESULT ITfLangBarEventSink_OnModalInput(ITfLangBarEventSink* This,DWORD dwThreadId,UINT uMsg,WPARAM wParam,LPARAM lParam) {
+    return This->lpVtbl->OnModalInput(This,dwThreadId,uMsg,wParam,lParam);
+}
+static FORCEINLINE HRESULT ITfLangBarEventSink_ShowFloating(ITfLangBarEventSink* This,DWORD dwFlags) {
+    return This->lpVtbl->ShowFloating(This,dwFlags);
+}
+static FORCEINLINE HRESULT ITfLangBarEventSink_GetItemFloatingRect(ITfLangBarEventSink* This,DWORD dwThreadId,REFGUID rguid,RECT *prc) {
+    return This->lpVtbl->GetItemFloatingRect(This,dwThreadId,rguid,prc);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITfLangBarEventSink_OnSetFocus_Proxy(
+    ITfLangBarEventSink* This,
+    DWORD dwThreadId);
+void __RPC_STUB ITfLangBarEventSink_OnSetFocus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfLangBarEventSink_OnThreadTerminate_Proxy(
+    ITfLangBarEventSink* This,
+    DWORD dwThreadId);
+void __RPC_STUB ITfLangBarEventSink_OnThreadTerminate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfLangBarEventSink_OnThreadItemChange_Proxy(
+    ITfLangBarEventSink* This,
+    DWORD dwThreadId);
+void __RPC_STUB ITfLangBarEventSink_OnThreadItemChange_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfLangBarEventSink_OnModalInput_Proxy(
+    ITfLangBarEventSink* This,
+    DWORD dwThreadId,
+    UINT uMsg,
+    WPARAM wParam,
+    LPARAM lParam);
+void __RPC_STUB ITfLangBarEventSink_OnModalInput_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfLangBarEventSink_ShowFloating_Proxy(
+    ITfLangBarEventSink* This,
+    DWORD dwFlags);
+void __RPC_STUB ITfLangBarEventSink_ShowFloating_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfLangBarEventSink_GetItemFloatingRect_Proxy(
+    ITfLangBarEventSink* This,
+    DWORD dwThreadId,
+    REFGUID rguid,
+    RECT *prc);
+void __RPC_STUB ITfLangBarEventSink_GetItemFloatingRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ITfLangBarEventSink_INTERFACE_DEFINED__ */
+
 /* Begin additional prototypes for all interfaces */
 
+ULONG           __RPC_USER BSTR_UserSize     (ULONG *, ULONG, BSTR *);
+unsigned char * __RPC_USER BSTR_UserMarshal  (ULONG *, unsigned char *, BSTR *);
+unsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *);
+void            __RPC_USER BSTR_UserFree     (ULONG *, BSTR *);
 ULONG           __RPC_USER HWND_UserSize     (ULONG *, ULONG, HWND *);
 unsigned char * __RPC_USER HWND_UserMarshal  (ULONG *, unsigned char *, HWND *);
 unsigned char * __RPC_USER HWND_UserUnmarshal(ULONG *, unsigned char *, HWND *);
diff --git a/x86_64-w64-mingw32/include/d2d1.h b/x86_64-w64-mingw32/include/d2d1.h
index a86bcee..bc45785 100644
--- a/x86_64-w64-mingw32/include/d2d1.h
+++ b/x86_64-w64-mingw32/include/d2d1.h
@@ -1035,9 +1035,9 @@
 #define ID2D1RenderTarget_CreateBitmap(this,A,B,C,D,E) (this)->lpVtbl->CreateBitmap(this,A,B,C,D,E)
 #define ID2D1RenderTarget_CreateBitmapBrush(this,A,B) (this)->lpVtbl->CreateBitmapBrush(this,A,B)
 #define ID2D1RenderTarget_CreateBitmapFromWicBitmap(this,A,B,C) (this)->lpVtbl->CreateBitmapFromWicBitmap(this,A,B,C)
-#define ID2D1RenderTarget_CreateCompatibleRenderTarget(this,A) (this)->lpVtbl->CreateCompatibleRenderTarget(this,A)
+#define ID2D1RenderTarget_CreateCompatibleRenderTarget(this,A,B,C,D,E) (this)->lpVtbl->CreateCompatibleRenderTarget(this,A,B,C,D,E)
 #define ID2D1RenderTarget_CreateGradientStopCollection(this,A,B,C) (this)->lpVtbl->CreateGradientStopCollection(this,A,B,C)
-#define ID2D1RenderTarget_CreateLayer(this,A) (this)->lpVtbl->CreateLayer(this,A)
+#define ID2D1RenderTarget_CreateLayer(this,A,B) (this)->lpVtbl->CreateLayer(this,A,B)
 #define ID2D1RenderTarget_CreateLinearGradientBrush(this,A,B,C,D) (this)->lpVtbl->CreateLinearGradientBrush(this,A,B,C,D)
 #define ID2D1RenderTarget_CreateMesh(this,A) (this)->lpVtbl->CreateMesh(this,A)
 #define ID2D1RenderTarget_CreateRadialGradientBrush(this,A,B,C,D) (this)->lpVtbl->CreateRadialGradientBrush(this,A,B,C,D)
@@ -1327,9 +1327,9 @@
 #define ID2D1BitmapRenderTarget_CreateBitmap(this,A,B,C,D,E) (this)->lpVtbl->Base.CreateBitmap((ID2D1RenderTarget*)(this),A,B,C,D,E)
 #define ID2D1BitmapRenderTarget_CreateBitmapBrush(this,A,B) (this)->lpVtbl->Base.CreateBitmapBrush((ID2D1RenderTarget*)(this),A,B)
 #define ID2D1BitmapRenderTarget_CreateBitmapFromWicBitmap(this,A,B,C) (this)->lpVtbl->Base.CreateBitmapFromWicBitmap((ID2D1RenderTarget*)(this),A,B,C)
-#define ID2D1BitmapRenderTarget_CreateCompatibleBitmapRenderTarget(this,A) (this)->lpVtbl->Base.CreateCompatibleBitmapRenderTarget((ID2D1RenderTarget*)(this),A)
+#define ID2D1BitmapRenderTarget_CreateCompatibleBitmapRenderTarget(this,A,B,C,D,E) (this)->lpVtbl->Base.CreateCompatibleBitmapRenderTarget((ID2D1RenderTarget*)(this),A,B,C,D,E)
 #define ID2D1BitmapRenderTarget_CreateGradientStopCollection(this,A,B,C) (this)->lpVtbl->Base.CreateGradientStopCollection((ID2D1RenderTarget*)(this),A,B,C)
-#define ID2D1BitmapRenderTarget_CreateLayer(this,A) (this)->lpVtbl->Base.CreateLayer((ID2D1RenderTarget*)(this),A)
+#define ID2D1BitmapRenderTarget_CreateLayer(this,A,B) (this)->lpVtbl->Base.CreateLayer((ID2D1RenderTarget*)(this),A,B)
 #define ID2D1BitmapRenderTarget_CreateLinearGradientBrush(this,A,B,C,D) (this)->lpVtbl->Base.CreateLinearGradientBrush((ID2D1RenderTarget*)(this),A,B,C,D)
 #define ID2D1BitmapRenderTarget_CreateMesh(this,A) (this)->lpVtbl->Base.CreateMesh((ID2D1RenderTarget*)(this),A)
 #define ID2D1BitmapRenderTarget_CreateRadialGradientBrush(this,A,B,C,D) (this)->lpVtbl->Base.CreateRadialGradientBrush((ID2D1RenderTarget*)(this),A,B,C,D)
@@ -1409,9 +1409,9 @@
 #define ID2D1DCRenderTarget_CreateBitmap(this,A,B,C,D,E) (this)->lpVtbl->Base.CreateBitmap((ID2D1RenderTarget*)(this),A,B,C,D,E)
 #define ID2D1DCRenderTarget_CreateBitmapBrush(this,A,B) (this)->lpVtbl->Base.CreateBitmapBrush((ID2D1RenderTarget*)(this),A,B)
 #define ID2D1DCRenderTarget_CreateBitmapFromWicBitmap(this,A,B,C) (this)->lpVtbl->Base.CreateBitmapFromWicBitmap((ID2D1RenderTarget*)(this),A,B,C)
-#define ID2D1DCRenderTarget_CreateCompatibleRenderTarget(this,A) (this)->lpVtbl->Base.CreateCompatibleRenderTarget((ID2D1RenderTarget*)(this),A)
+#define ID2D1DCRenderTarget_CreateCompatibleRenderTarget(this,A,B,C,D,E) (this)->lpVtbl->Base.CreateCompatibleRenderTarget((ID2D1RenderTarget*)(this),A,B,C,D,E)
 #define ID2D1DCRenderTarget_CreateGradientStopCollection(this,A,B,C) (this)->lpVtbl->Base.CreateGradientStopCollection((ID2D1RenderTarget*)(this),A,B,C)
-#define ID2D1DCRenderTarget_CreateLayer(this,A) (this)->lpVtbl->Base.CreateLayer((ID2D1RenderTarget*)(this),A)
+#define ID2D1DCRenderTarget_CreateLayer(this,A,B) (this)->lpVtbl->Base.CreateLayer((ID2D1RenderTarget*)(this),A,B)
 #define ID2D1DCRenderTarget_CreateLinearGradientBrush(this,A,B,C,D) (this)->lpVtbl->Base.CreateLinearGradientBrush((ID2D1RenderTarget*)(this),A,B,C,D)
 #define ID2D1DCRenderTarget_CreateMesh(this,A) (this)->lpVtbl->Base.CreateMesh((ID2D1RenderTarget*)(this),A)
 #define ID2D1DCRenderTarget_CreateRadialGradientBrush(this,A,B,C,D) (this)->lpVtbl->Base.CreateRadialGradientBrush((ID2D1RenderTarget*)(this),A,B,C,D)
@@ -1903,9 +1903,9 @@
 #define ID2D1HwndRenderTarget_CreateBitmap(this,A,B,C,D,E) (this)->lpVtbl->Base.CreateBitmap((ID2D1RenderTarget*)(this),A,B,C,D,E)
 #define ID2D1HwndRenderTarget_CreateBitmapBrush(this,A,B) (this)->lpVtbl->Base.CreateBitmapBrush((ID2D1RenderTarget*)(this),A,B)
 #define ID2D1HwndRenderTarget_CreateBitmapFromWicBitmap(this,A,B,C) (this)->lpVtbl->Base.CreateBitmapFromWicBitmap((ID2D1RenderTarget*)(this),A,B,C)
-#define ID2D1HwndRenderTarget_CreateCompatibleRenderTarget(this,A) (this)->lpVtbl->Base.CreateCompatibleRenderTarget((ID2D1RenderTarget*)(this),A)
+#define ID2D1HwndRenderTarget_CreateCompatibleRenderTarget(this,A,B,C,D,E) (this)->lpVtbl->Base.CreateCompatibleRenderTarget((ID2D1RenderTarget*)(this),A,B,C,D,E)
 #define ID2D1HwndRenderTarget_CreateGradientStopCollection(this,A,B,C) (this)->lpVtbl->Base.CreateGradientStopCollection((ID2D1RenderTarget*)(this),A,B,C)
-#define ID2D1HwndRenderTarget_CreateLayer(this,A) (this)->lpVtbl->Base.CreateLayer((ID2D1RenderTarget*)(this),A)
+#define ID2D1HwndRenderTarget_CreateLayer(this,A,B) (this)->lpVtbl->Base.CreateLayer((ID2D1RenderTarget*)(this),A,B)
 #define ID2D1HwndRenderTarget_CreateLinearGradientBrush(this,A,B,C,D) (this)->lpVtbl->Base.CreateLinearGradientBrush((ID2D1RenderTarget*)(this),A,B,C,D)
 #define ID2D1HwndRenderTarget_CreateMesh(this,A) (this)->lpVtbl->Base.CreateMesh((ID2D1RenderTarget*)(this),A)
 #define ID2D1HwndRenderTarget_CreateRadialGradientBrush(this,A,B,C,D) (this)->lpVtbl->Base.CreateRadialGradientBrush((ID2D1RenderTarget*)(this),A,B,C,D)
diff --git a/x86_64-w64-mingw32/include/d2d1_1.h b/x86_64-w64-mingw32/include/d2d1_1.h
index 36a9864..2eb398a 100644
--- a/x86_64-w64-mingw32/include/d2d1_1.h
+++ b/x86_64-w64-mingw32/include/d2d1_1.h
@@ -150,6 +150,8 @@
 typedef enum D2D1_PRIMITIVE_BLEND {
     D2D1_PRIMITIVE_BLEND_SOURCE_OVER = 0,
     D2D1_PRIMITIVE_BLEND_COPY        = 1,
+    D2D1_PRIMITIVE_BLEND_MIN         = 2,
+    D2D1_PRIMITIVE_BLEND_ADD         = 3,
     D2D1_PRIMITIVE_BLEND_FORCE_DWORD = 0xffffffff
 } D2D1_PRIMITIVE_BLEND;
 
diff --git a/x86_64-w64-mingw32/include/d2d1_1helper.h b/x86_64-w64-mingw32/include/d2d1_1helper.h
index 9523203..54c6539 100644
--- a/x86_64-w64-mingw32/include/d2d1_1helper.h
+++ b/x86_64-w64-mingw32/include/d2d1_1helper.h
@@ -10,11 +10,15 @@
 #ifndef D2D_USE_C_DEFINITIONS
 
 namespace D2D1 {
+    template<> struct TypeTraits<INT32> {
+        typedef D2D1_POINT_2L Point;
+        typedef D2D1_RECT_L Rect;
+    };
 
-    D2D1FORCEINLINE D2D1_VECTOR_2F Vector2F(FLOAT x = 0.0f, FLOAT y = 0.0f) {
-        D2D1_VECTOR_2F r = {x, y};
-        return r;
-    }
+    template<> struct TypeTraits<LONG> {
+        typedef D2D1_POINT_2L Point;
+        typedef D2D1_RECT_L Rect;
+    };
 
     D2D1FORCEINLINE D2D1_LAYER_PARAMETERS1 LayerParameters1(CONST D2D1_RECT_F &contentBounds = D2D1::InfiniteRect(),
             ID2D1Geometry *geometricMask = NULL, D2D1_ANTIALIAS_MODE maskAntialiasMode = D2D1_ANTIALIAS_MODE_PER_PRIMITIVE,
@@ -63,6 +67,11 @@
         }
     };
 
+    D2D1FORCEINLINE D2D1_VECTOR_2F Vector2F(FLOAT x = 0.0f, FLOAT y = 0.0f) {
+        D2D1_VECTOR_2F r = {x, y};
+        return r;
+    }
+
     D2D1FORCEINLINE D2D1_VECTOR_3F Vector3F(FLOAT x = 0.0f, FLOAT y = 0.0f, FLOAT z = 0.0f) {
         D2D1_VECTOR_3F r = {x, y, z};
         return r;
@@ -72,6 +81,14 @@
         D2D1_VECTOR_4F r = {x, y, z, w};
         return r;
     }
+
+    D2D1FORCEINLINE D2D1_POINT_2L Point2L(INT32 x = 0, INT32 y = 0) {
+        return Point2<INT32>(x, y);
+    }
+
+    D2D1FORCEINLINE D2D1_RECT_L RectL(INT32 left = 0.0f, INT32 top = 0.0f, INT32 right = 0.0f, INT32 bottom = 0.0f) {
+        return Rect<INT32>(left, top, right, bottom);
+    }
 }
 
 #endif /* D2D_USE_C_DEFINITIONS */
diff --git a/x86_64-w64-mingw32/include/d3d11.h b/x86_64-w64-mingw32/include/d3d11.h
index 34c846b..931fa51 100644
--- a/x86_64-w64-mingw32/include/d3d11.h
+++ b/x86_64-w64-mingw32/include/d3d11.h
@@ -167,6 +167,56 @@
 typedef interface ID3D11DeviceContext ID3D11DeviceContext;
 #endif
 
+#ifndef __ID3D11AuthenticatedChannel_FWD_DEFINED__
+#define __ID3D11AuthenticatedChannel_FWD_DEFINED__
+typedef interface ID3D11AuthenticatedChannel ID3D11AuthenticatedChannel;
+#endif
+
+#ifndef __ID3D11CryptoSession_FWD_DEFINED__
+#define __ID3D11CryptoSession_FWD_DEFINED__
+typedef interface ID3D11CryptoSession ID3D11CryptoSession;
+#endif
+
+#ifndef __ID3D11VideoDecoder_FWD_DEFINED__
+#define __ID3D11VideoDecoder_FWD_DEFINED__
+typedef interface ID3D11VideoDecoder ID3D11VideoDecoder;
+#endif
+
+#ifndef __ID3D11VideoProcessorEnumerator_FWD_DEFINED__
+#define __ID3D11VideoProcessorEnumerator_FWD_DEFINED__
+typedef interface ID3D11VideoProcessorEnumerator ID3D11VideoProcessorEnumerator;
+#endif
+
+#ifndef __ID3D11VideoProcessor_FWD_DEFINED__
+#define __ID3D11VideoProcessor_FWD_DEFINED__
+typedef interface ID3D11VideoProcessor ID3D11VideoProcessor;
+#endif
+
+#ifndef __ID3D11VideoDecoderOutputView_FWD_DEFINED__
+#define __ID3D11VideoDecoderOutputView_FWD_DEFINED__
+typedef interface ID3D11VideoDecoderOutputView ID3D11VideoDecoderOutputView;
+#endif
+
+#ifndef __ID3D11VideoProcessorInputView_FWD_DEFINED__
+#define __ID3D11VideoProcessorInputView_FWD_DEFINED__
+typedef interface ID3D11VideoProcessorInputView ID3D11VideoProcessorInputView;
+#endif
+
+#ifndef __ID3D11VideoProcessorOutputView_FWD_DEFINED__
+#define __ID3D11VideoProcessorOutputView_FWD_DEFINED__
+typedef interface ID3D11VideoProcessorOutputView ID3D11VideoProcessorOutputView;
+#endif
+
+#ifndef __ID3D11VideoDevice_FWD_DEFINED__
+#define __ID3D11VideoDevice_FWD_DEFINED__
+typedef interface ID3D11VideoDevice ID3D11VideoDevice;
+#endif
+
+#ifndef __ID3D11VideoContext_FWD_DEFINED__
+#define __ID3D11VideoContext_FWD_DEFINED__
+typedef interface ID3D11VideoContext ID3D11VideoContext;
+#endif
+
 #ifndef __ID3D11Device_FWD_DEFINED__
 #define __ID3D11Device_FWD_DEFINED__
 typedef interface ID3D11Device ID3D11Device;
@@ -187,6 +237,26 @@
 typedef D3D_PRIMITIVE_TOPOLOGY D3D11_PRIMITIVE_TOPOLOGY;
 typedef D3D_SRV_DIMENSION D3D11_SRV_DIMENSION;
 typedef RECT D3D11_RECT;
+#ifndef __ID3D11Device_FWD_DEFINED__
+#define __ID3D11Device_FWD_DEFINED__
+typedef interface ID3D11Device ID3D11Device;
+#endif
+
+#ifndef __ID3D11ClassLinkage_FWD_DEFINED__
+#define __ID3D11ClassLinkage_FWD_DEFINED__
+typedef interface ID3D11ClassLinkage ID3D11ClassLinkage;
+#endif
+
+#ifndef __ID3D11Resource_FWD_DEFINED__
+#define __ID3D11Resource_FWD_DEFINED__
+typedef interface ID3D11Resource ID3D11Resource;
+#endif
+
+#ifndef __ID3D11VideoProcessorInputView_FWD_DEFINED__
+#define __ID3D11VideoProcessorInputView_FWD_DEFINED__
+typedef interface ID3D11VideoProcessorInputView ID3D11VideoProcessorInputView;
+#endif
+
 #define D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT (14)
 
 #define D3D11_COMMONSHADER_CONSTANT_BUFFER_COMPONENTS (4)
@@ -295,6 +365,8 @@
 #define D3D11_DEFAULT_VIEWPORT_WIDTH (0)
 
 #define D3D11_FLOAT32_MAX         (3.402823466e+38f)
+#define D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT (32)
+
 #define D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT (8)
 
 #define D3D11_MAX_MAXANISOTROPY (16)
@@ -305,6 +377,10 @@
 
 #define D3D11_VIEWPORT_BOUNDS_MIN (-32768)
 
+#define D3D11_VIEWPORT_AND_SCISSORRECT_MAX_INDEX (15)
+
+#define D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE (16)
+
 #define D3D11_SHADER_MAJOR_VERSION (5)
 
 #define D3D11_SHADER_MAX_INSTANCES (65535)
@@ -319,6 +395,8 @@
 
 #define D3D11_VS_OUTPUT_REGISTER_COUNT (32)
 
+#define D3D11_OMAC_SIZE (16)
+
 #define D3D11_PS_CS_UAV_REGISTER_COMPONENTS (1)
 
 #define D3D11_PS_CS_UAV_REGISTER_COUNT (8)
@@ -494,6 +572,49 @@
     D3D11_BLEND_OP_MIN = 4,
     D3D11_BLEND_OP_MAX = 5
 } D3D11_BLEND_OP;
+typedef enum D3D11_VIDEO_DECODER_BUFFER_TYPE {
+    D3D11_VIDEO_DECODER_BUFFER_PICTURE_PARAMETERS = 0,
+    D3D11_VIDEO_DECODER_BUFFER_MACROBLOCK_CONTROL = 1,
+    D3D11_VIDEO_DECODER_BUFFER_RESIDUAL_DIFFERENCE = 2,
+    D3D11_VIDEO_DECODER_BUFFER_DEBLOCKING_CONTROL = 3,
+    D3D11_VIDEO_DECODER_BUFFER_INVERSE_QUANTIZATION_MATRIX = 4,
+    D3D11_VIDEO_DECODER_BUFFER_SLICE_CONTROL = 5,
+    D3D11_VIDEO_DECODER_BUFFER_BITSTREAM = 6,
+    D3D11_VIDEO_DECODER_BUFFER_MOTION_VECTOR = 7,
+    D3D11_VIDEO_DECODER_BUFFER_FILM_GRAIN = 8
+} D3D11_VIDEO_DECODER_BUFFER_TYPE;
+typedef enum D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE {
+    D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_OPAQUE = 0,
+    D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_BACKGROUND = 1,
+    D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_DESTINATION = 2,
+    D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_SOURCE_STREAM = 3
+} D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE;
+typedef enum D3D11_VIDEO_PROCESSOR_OUTPUT_RATE {
+    D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_NORMAL = 0,
+    D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_HALF = 1,
+    D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_CUSTOM = 2
+} D3D11_VIDEO_PROCESSOR_OUTPUT_RATE;
+typedef enum D3D11_VIDEO_PROCESSOR_STEREO_FORMAT {
+    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO = 0,
+    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_HORIZONTAL = 1,
+    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_VERTICAL = 2,
+    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_SEPARATE = 3,
+    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET = 4,
+    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_ROW_INTERLEAVED = 5,
+    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_COLUMN_INTERLEAVED = 6,
+    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_CHECKERBOARD = 7
+} D3D11_VIDEO_PROCESSOR_STEREO_FORMAT;
+typedef enum D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE {
+    D3D11_VIDEO_PROCESSOR_STEREO_FLIP_NONE = 0,
+    D3D11_VIDEO_PROCESSOR_STEREO_FLIP_FRAME0 = 1,
+    D3D11_VIDEO_PROCESSOR_STEREO_FLIP_FRAME1 = 2
+} D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE;
+typedef enum D3D11_VIDEO_PROCESSOR_ROTATION {
+    D3D11_VIDEO_PROCESSOR_ROTATION_IDENTITY = 0,
+    D3D11_VIDEO_PROCESSOR_ROTATION_90 = 1,
+    D3D11_VIDEO_PROCESSOR_ROTATION_180 = 2,
+    D3D11_VIDEO_PROCESSOR_ROTATION_270 = 3
+} D3D11_VIDEO_PROCESSOR_ROTATION;
 typedef struct D3D11_BOX {
     UINT left;
     UINT top;
@@ -597,8 +718,29 @@
     D3D11_FEATURE_DOUBLES = 1,
     D3D11_FEATURE_FORMAT_SUPPORT = 2,
     D3D11_FEATURE_FORMAT_SUPPORT2 = 3,
-    D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS = 4
+    D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS = 4,
+    D3D11_FEATURE_D3D11_OPTIONS = 5,
+    D3D11_FEATURE_ARCHITECTURE_INFO = 6,
+    D3D11_FEATURE_D3D9_OPTIONS = 7,
+    D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT = 8,
+    D3D11_FEATURE_D3D9_SHADOW_SUPPORT = 9
 } D3D11_FEATURE;
+typedef struct D3D11_FEATURE_DATA_D3D11_OPTIONS {
+    WINBOOL OutputMergerLogicOp;
+    WINBOOL UAVOnlyRenderingForcedSampleCount;
+    WINBOOL DiscardAPIsSeenByDriver;
+    WINBOOL FlagsForUpdateAndCopySeenByDriver;
+    WINBOOL ClearView;
+    WINBOOL CopyWithOverlap;
+    WINBOOL ConstantBufferPartialUpdate;
+    WINBOOL ConstantBufferOffsetting;
+    WINBOOL MapNoOverwriteOnDynamicConstantBuffer;
+    WINBOOL MapNoOverwriteOnDynamicBufferSRV;
+    WINBOOL MultisampleRTVWithForcedSampleCountOne;
+    WINBOOL SAD4ShaderInstructions;
+    WINBOOL ExtendedDoublesShaderInstructions;
+    WINBOOL ExtendedResourceSharing;
+} D3D11_FEATURE_DATA_D3D11_OPTIONS;
 typedef enum D3D11_FILL_MODE {
     D3D11_FILL_WIREFRAME = 2,
     D3D11_FILL_SOLID = 3
@@ -716,6 +858,9 @@
     D3D11_QUERY_SO_STATISTICS_STREAM3 = 14,
     D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM3 = 15
 } D3D11_QUERY;
+typedef enum D3D11_QUERY_MISC_FLAG {
+    D3D11_QUERY_MISC_PREDICATEHINT = 0x1
+} D3D11_QUERY_MISC_FLAG;
 typedef enum D3D11_ASYNC_GETDATA_FLAG {
     D3D11_ASYNC_GETDATA_DONOTFLUSH = 0x1
 } D3D11_ASYNC_GETDATA_FLAG;
@@ -1038,7 +1183,11 @@
     D3D11_FORMAT_SUPPORT_SHADER_GATHER = 0x800000,
     D3D11_FORMAT_SUPPORT_BACK_BUFFER_CAST = 0x1000000,
     D3D11_FORMAT_SUPPORT_TYPED_UNORDERED_ACCESS_VIEW = 0x2000000,
-    D3D11_FORMAT_SUPPORT_SHADER_GATHER_COMPARISON = 0x4000000
+    D3D11_FORMAT_SUPPORT_SHADER_GATHER_COMPARISON = 0x4000000,
+    D3D11_FORMAT_SUPPORT_DECODER_OUTPUT = 0x8000000,
+    D3D11_FORMAT_SUPPORT_VIDEO_PROCESSOR_OUTPUT = 0x10000000,
+    D3D11_FORMAT_SUPPORT_VIDEO_PROCESSOR_INPUT = 0x20000000,
+    D3D11_FORMAT_SUPPORT_VIDEO_ENCODER = 0x40000000
 } D3D11_FORMAT_SUPPORT;
 typedef enum D3D11_CLEAR_FLAG {
     D3D11_CLEAR_DEPTH = 0x1,
@@ -1147,6 +1296,70 @@
         D3D11_TEX3D_RTV Texture3D;
     } __C89_NAMELESSUNIONNAME;
 } D3D11_RENDER_TARGET_VIEW_DESC;
+#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)
+struct CD3D11_RENDER_TARGET_VIEW_DESC : public D3D11_RENDER_TARGET_VIEW_DESC {
+    CD3D11_RENDER_TARGET_VIEW_DESC() {}
+    explicit CD3D11_RENDER_TARGET_VIEW_DESC(D3D11_RTV_DIMENSION dim, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,
+            UINT mip_slice = 0, UINT first_slice = 0, UINT array_size = -1) {
+        Format = format;
+        ViewDimension = dim;
+        switch(dim) {
+        case D3D11_RTV_DIMENSION_BUFFER:
+            Buffer.FirstElement = mip_slice;
+            Buffer.NumElements = first_slice;
+            break;
+        case D3D11_RTV_DIMENSION_TEXTURE1D:
+            Texture1D.MipSlice = mip_slice;
+            break;
+        case D3D11_RTV_DIMENSION_TEXTURE1DARRAY:
+            Texture1DArray.MipSlice = mip_slice;
+            Texture1DArray.FirstArraySlice = first_slice;
+            Texture1DArray.ArraySize = array_size;
+            break;
+        case D3D11_RTV_DIMENSION_TEXTURE2D:
+            Texture2D.MipSlice = mip_slice;
+            break;
+        case D3D11_RTV_DIMENSION_TEXTURE2DARRAY:
+            Texture2DArray.MipSlice = mip_slice;
+            Texture2DArray.FirstArraySlice = first_slice;
+            Texture2DArray.ArraySize = array_size;
+            break;
+        case D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY:
+            Texture2DMSArray.FirstArraySlice = first_slice;
+            Texture2DMSArray.ArraySize = array_size;
+            break;
+        case D3D11_RTV_DIMENSION_TEXTURE3D:
+            Texture3D.MipSlice = mip_slice;
+            Texture3D.FirstWSlice = first_slice;
+            Texture3D.WSize = array_size;
+            break;
+        default:
+            break;
+        }
+    }
+    explicit CD3D11_RENDER_TARGET_VIEW_DESC(ID3D11Buffer*, DXGI_FORMAT format, UINT first_elem,
+            UINT elem_cnt) {
+        Format = format;
+        ViewDimension = D3D11_RTV_DIMENSION_BUFFER;
+        Buffer.FirstElement = first_elem;
+        Buffer.NumElements = elem_cnt;
+    }
+    explicit CD3D11_RENDER_TARGET_VIEW_DESC(ID3D11Texture1D *texture, D3D11_RTV_DIMENSION dim,
+            DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT mip_slice = 0, UINT first_slice = 0,
+            UINT array_size = -1);
+    explicit CD3D11_RENDER_TARGET_VIEW_DESC(ID3D11Texture2D *texture, D3D11_RTV_DIMENSION dim,
+            DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT mip_slice = 0, UINT first_slice = 0,
+            UINT array_size = -1);
+    explicit CD3D11_RENDER_TARGET_VIEW_DESC(ID3D11Texture3D *texture, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,
+            UINT mip_slice = 0, UINT first_w_slice = 0, UINT w_slice = -1 );
+    ~CD3D11_RENDER_TARGET_VIEW_DESC() {}
+    explicit CD3D11_RENDER_TARGET_VIEW_DESC(const D3D11_RENDER_TARGET_VIEW_DESC &other)
+        : D3D11_RENDER_TARGET_VIEW_DESC(other) {}
+    operator const D3D11_RENDER_TARGET_VIEW_DESC&() const {
+        return *this;
+    }
+};
+#endif
 typedef struct D3D11_SAMPLER_DESC {
     D3D11_FILTER Filter;
     D3D11_TEXTURE_ADDRESS_MODE AddressU;
@@ -1218,6 +1431,84 @@
         D3D11_BUFFEREX_SRV BufferEx;
     } __C89_NAMELESSUNIONNAME;
 } D3D11_SHADER_RESOURCE_VIEW_DESC;
+#if !defined(D3D11_NO_HELPERS) && defined( __cplusplus )
+struct CD3D11_SHADER_RESOURCE_VIEW_DESC : public D3D11_SHADER_RESOURCE_VIEW_DESC {
+    CD3D11_SHADER_RESOURCE_VIEW_DESC() {}
+    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(D3D11_SRV_DIMENSION dim,
+            DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT most_detailed_mip = 0,
+            UINT mip_levels = -1, UINT first_slice = 0, UINT array_size = -1, UINT flags = 0) {
+        Format = format;
+        ViewDimension = dim;
+        switch(ViewDimension) {
+        case D3D11_SRV_DIMENSION_BUFFER:
+            Buffer.FirstElement = most_detailed_mip;
+            Buffer.NumElements = mip_levels;
+            break;
+        case D3D11_SRV_DIMENSION_TEXTURE1D:
+            Texture1D.MostDetailedMip = most_detailed_mip;
+            Texture1D.MipLevels = mip_levels;
+            break;
+        case D3D11_SRV_DIMENSION_TEXTURE1DARRAY:
+            Texture1DArray.MostDetailedMip = most_detailed_mip;
+            Texture1DArray.MipLevels = mip_levels;
+            Texture1DArray.FirstArraySlice = first_slice;
+            Texture1DArray.ArraySize = array_size;
+            break;
+        case D3D11_SRV_DIMENSION_TEXTURE2D:
+            Texture2D.MostDetailedMip = most_detailed_mip;
+            Texture2D.MipLevels = mip_levels;
+            break;
+        case D3D11_SRV_DIMENSION_TEXTURE2DARRAY:
+            Texture2DArray.MostDetailedMip = most_detailed_mip;
+            Texture2DArray.MipLevels = mip_levels;
+            Texture2DArray.FirstArraySlice = first_slice;
+            Texture2DArray.ArraySize = array_size;
+            break;
+        case D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY:
+            Texture2DMSArray.FirstArraySlice = first_slice;
+            Texture2DMSArray.ArraySize = array_size;
+            break;
+        case D3D11_SRV_DIMENSION_TEXTURE3D:
+            Texture3D.MostDetailedMip = most_detailed_mip;
+            Texture3D.MipLevels = mip_levels;
+            break;
+        case D3D11_SRV_DIMENSION_TEXTURECUBE:
+            TextureCube.MostDetailedMip = most_detailed_mip;
+            TextureCube.MipLevels = mip_levels;
+            break;
+        case D3D11_SRV_DIMENSION_TEXTURECUBEARRAY:
+            TextureCubeArray.MostDetailedMip = most_detailed_mip;
+            TextureCubeArray.MipLevels = mip_levels;
+            TextureCubeArray.First2DArrayFace = first_slice;
+            TextureCubeArray.NumCubes = array_size;
+            break;
+        case D3D11_SRV_DIMENSION_BUFFEREX:
+            BufferEx.FirstElement = most_detailed_mip;
+            BufferEx.NumElements = mip_levels;
+            BufferEx.Flags = flags;
+            break;
+        default:
+            break;
+        }
+    }
+    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(ID3D11Buffer*, DXGI_FORMAT format, UINT first_elem,
+            UINT elem_cnt, UINT flags = 0);
+    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(ID3D11Texture1D *texture, D3D11_SRV_DIMENSION dim,
+            DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT most_detailed_mip = 0, UINT mip_levels = -1,
+            UINT first_slice = 0, UINT array_size = -1 );
+    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(ID3D11Texture2D *texture, D3D11_SRV_DIMENSION dim,
+            DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT most_detailed_mip = 0, UINT mip_levels = -1,
+            UINT first_slice = 0, UINT array_size = -1 );
+    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(ID3D11Texture3D *texture, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,
+            UINT most_detailed_mip = 0, UINT mip_levels = -1 );
+    ~CD3D11_SHADER_RESOURCE_VIEW_DESC() {}
+    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(const D3D11_SHADER_RESOURCE_VIEW_DESC &other)
+        : D3D11_SHADER_RESOURCE_VIEW_DESC(other) {}
+    operator const D3D11_SHADER_RESOURCE_VIEW_DESC&() const {
+        return *this;
+    }
+};
+#endif
 typedef struct D3D11_TEXTURE1D_DESC {
     UINT Width;
     UINT MipLevels;
@@ -1275,16 +1566,234 @@
     UINT CPUAccessFlags;
     UINT MiscFlags;
 } D3D11_TEXTURE3D_DESC;
-#ifndef __ID3D11Device_FWD_DEFINED__
-#define __ID3D11Device_FWD_DEFINED__
-typedef interface ID3D11Device ID3D11Device;
-#endif
-
-#ifndef __ID3D11ClassLinkage_FWD_DEFINED__
-#define __ID3D11ClassLinkage_FWD_DEFINED__
-typedef interface ID3D11ClassLinkage ID3D11ClassLinkage;
-#endif
-
+typedef struct D3D11_VIDEO_DECODER_DESC {
+    GUID Guid;
+    UINT SampleWidth;
+    UINT SampleHeight;
+    DXGI_FORMAT OutputFormat;
+} D3D11_VIDEO_DECODER_DESC;
+typedef struct D3D11_VIDEO_DECODER_CONFIG {
+    GUID guidConfigBitstreamEncryption;
+    GUID guidConfigMBcontrolEncryption;
+    GUID guidConfigResidDiffEncryption;
+    UINT ConfigBitstreamRaw;
+    UINT ConfigMBcontrolRasterOrder;
+    UINT ConfigResidDiffHost;
+    UINT ConfigSpatialResid8;
+    UINT ConfigResid8Subtraction;
+    UINT ConfigSpatialHost8or9Clipping;
+    UINT ConfigSpatialResidInterleaved;
+    UINT ConfigIntraResidUnsigned;
+    UINT ConfigResidDiffAccelerator;
+    UINT ConfigHostInverseScan;
+    UINT ConfigSpecificIDCT;
+    UINT Config4GroupedCoefs;
+    USHORT ConfigMinRenderTargetBuffCount;
+    USHORT ConfigDecoderSpecific;
+} D3D11_VIDEO_DECODER_CONFIG;
+typedef enum D3D11_VIDEO_FRAME_FORMAT {
+    D3D11_VIDEO_FRAME_FORMAT_PROGRESSIVE = 0,
+    D3D11_VIDEO_FRAME_FORMAT_INTERLACED_TOP_FIELD_FIRST = 1,
+    D3D11_VIDEO_FRAME_FORMAT_INTERLACED_BOTTOM_FIELD_FIRST = 2
+} D3D11_VIDEO_FRAME_FORMAT;
+typedef enum D3D11_VIDEO_USAGE {
+    D3D11_VIDEO_USAGE_PLAYBACK_NORMAL = 0,
+    D3D11_VIDEO_USAGE_OPTIMAL_SPEED = 1,
+    D3D11_VIDEO_USAGE_OPTIMAL_QUALITY = 2
+} D3D11_VIDEO_USAGE;
+typedef struct D3D11_VIDEO_PROCESSOR_CONTENT_DESC {
+    D3D11_VIDEO_FRAME_FORMAT InputFrameFormat;
+    DXGI_RATIONAL InputFrameRate;
+    UINT InputWidth;
+    UINT InputHeight;
+    DXGI_RATIONAL OutputFrameRate;
+    UINT OutputWidth;
+    UINT OutputHeight;
+    D3D11_VIDEO_USAGE Usage;
+} D3D11_VIDEO_PROCESSOR_CONTENT_DESC;
+typedef struct D3D11_VIDEO_PROCESSOR_CAPS {
+    UINT DeviceCaps;
+    UINT FeatureCaps;
+    UINT FilterCaps;
+    UINT InputFormatCaps;
+    UINT AutoStreamCaps;
+    UINT StereoCaps;
+    UINT RateConversionCapsCount;
+    UINT MaxInputStreams;
+    UINT MaxStreamStates;
+} D3D11_VIDEO_PROCESSOR_CAPS;
+typedef struct D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS {
+    UINT PastFrames;
+    UINT FutureFrames;
+    UINT ProcessorCaps;
+    UINT ITelecineCaps;
+    UINT CustomRateCount;
+} D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS;
+typedef struct D3D11_VIDEO_PROCESSOR_CUSTOM_RATE {
+    DXGI_RATIONAL CustomRate;
+    UINT OutputFrames;
+    WINBOOL InputInterlaced;
+    UINT InputFramesOrFields;
+} D3D11_VIDEO_PROCESSOR_CUSTOM_RATE;
+typedef enum D3D11_VIDEO_PROCESSOR_FILTER {
+    D3D11_VIDEO_PROCESSOR_FILTER_BRIGHTNESS = 0,
+    D3D11_VIDEO_PROCESSOR_FILTER_CONTRAST = 1,
+    D3D11_VIDEO_PROCESSOR_FILTER_HUE = 2,
+    D3D11_VIDEO_PROCESSOR_FILTER_SATURATION = 3,
+    D3D11_VIDEO_PROCESSOR_FILTER_NOISE_REDUCTION = 4,
+    D3D11_VIDEO_PROCESSOR_FILTER_EDGE_ENHANCEMENT = 5,
+    D3D11_VIDEO_PROCESSOR_FILTER_ANAMORPHIC_SCALING = 6,
+    D3D11_VIDEO_PROCESSOR_FILTER_STEREO_ADJUSTMENT = 7
+} D3D11_VIDEO_PROCESSOR_FILTER;
+typedef struct D3D11_VIDEO_PROCESSOR_FILTER_RANGE {
+    int Minimum;
+    int Maximum;
+    int Default;
+    float Multiplier;
+} D3D11_VIDEO_PROCESSOR_FILTER_RANGE;
+typedef enum D3D11_AUTHENTICATED_CHANNEL_TYPE {
+    D3D11_AUTHENTICATED_CHANNEL_D3D11 = 1,
+    D3D11_AUTHENTICATED_CHANNEL_DRIVER_SOFTWARE = 2,
+    D3D11_AUTHENTICATED_CHANNEL_DRIVER_HARDWARE = 3
+} D3D11_AUTHENTICATED_CHANNEL_TYPE;
+typedef enum D3D11_VDOV_DIMENSION {
+    D3D11_VDOV_DIMENSION_UNKNOWN = 0,
+    D3D11_VDOV_DIMENSION_TEXTURE2D = 1
+} D3D11_VDOV_DIMENSION;
+typedef struct D3D11_TEX2D_VDOV {
+    UINT ArraySlice;
+} D3D11_TEX2D_VDOV;
+typedef struct D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC {
+    GUID DecodeProfile;
+    D3D11_VDOV_DIMENSION ViewDimension;
+    __C89_NAMELESS union {
+        D3D11_TEX2D_VDOV Texture2D;
+    } __C89_NAMELESSUNIONNAME;
+} D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC;
+typedef enum D3D11_VPIV_DIMENSION {
+    D3D11_VPIV_DIMENSION_UNKNOWN = 0,
+    D3D11_VPIV_DIMENSION_TEXTURE2D = 1
+} D3D11_VPIV_DIMENSION;
+typedef struct D3D11_TEX2D_VPIV {
+    UINT MipSlice;
+    UINT ArraySlice;
+} D3D11_TEX2D_VPIV;
+typedef struct D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC {
+    UINT FourCC;
+    D3D11_VPIV_DIMENSION ViewDimension;
+    __C89_NAMELESS union {
+        D3D11_TEX2D_VPIV Texture2D;
+    } __C89_NAMELESSUNIONNAME;
+} D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC;
+typedef enum D3D11_VPOV_DIMENSION {
+    D3D11_VPOV_DIMENSION_UNKNOWN = 0,
+    D3D11_VPOV_DIMENSION_TEXTURE2D = 1,
+    D3D11_VPOV_DIMENSION_TEXTURE2DARRAY = 2
+} D3D11_VPOV_DIMENSION;
+typedef struct D3D11_TEX2D_VPOV {
+    UINT MipSlice;
+} D3D11_TEX2D_VPOV;
+typedef struct D3D11_TEX2D_ARRAY_VPOV {
+    UINT MipSlice;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D11_TEX2D_ARRAY_VPOV;
+typedef struct D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC {
+    D3D11_VPOV_DIMENSION ViewDimension;
+    __C89_NAMELESS union {
+        D3D11_TEX2D_VPOV Texture2D;
+        D3D11_TEX2D_ARRAY_VPOV Texture2DArray;
+    } __C89_NAMELESSUNIONNAME;
+} D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC;
+typedef struct D3D11_VIDEO_CONTENT_PROTECTION_CAPS {
+    UINT Caps;
+    UINT KeyExchangeTypeCount;
+    UINT BlockAlignmentSize;
+    ULONGLONG ProtectedMemorySize;
+} D3D11_VIDEO_CONTENT_PROTECTION_CAPS;
+typedef struct D3D11_ENCRYPTED_BLOCK_INFO {
+    UINT NumEncryptedBytesAtBeginning;
+    UINT NumBytesInSkipPattern;
+    UINT NumBytesInEncryptPattern;
+} D3D11_ENCRYPTED_BLOCK_INFO;
+typedef struct D3D11_VIDEO_DECODER_BUFFER_DESC {
+    D3D11_VIDEO_DECODER_BUFFER_TYPE BufferType;
+    UINT BufferIndex;
+    UINT DataOffset;
+    UINT DataSize;
+    UINT FirstMBaddress;
+    UINT NumMBsInBuffer;
+    UINT Width;
+    UINT Height;
+    UINT Stride;
+    UINT ReservedBits;
+    void *pIV;
+    UINT IVSize;
+    WINBOOL PartialEncryption;
+    D3D11_ENCRYPTED_BLOCK_INFO EncryptedBlockInfo;
+} D3D11_VIDEO_DECODER_BUFFER_DESC;
+typedef struct D3D11_VIDEO_DECODER_EXTENSION {
+    UINT Function;
+    void *pPrivateInputData;
+    UINT PrivateInputDataSize;
+    void *pPrivateOutputData;
+    UINT PrivateOutputDataSize;
+    UINT ResourceCount;
+    ID3D11Resource **ppResourceList;
+} D3D11_VIDEO_DECODER_EXTENSION;
+typedef struct D3D11_VIDEO_COLOR_YCbCrA {
+    float Y;
+    float Cb;
+    float Cr;
+    float A;
+} D3D11_VIDEO_COLOR_YCbCrA;
+typedef struct D3D11_VIDEO_COLOR_RGBA {
+    float R;
+    float G;
+    float B;
+    float A;
+} D3D11_VIDEO_COLOR_RGBA;
+typedef struct D3D11_VIDEO_COLOR {
+    __C89_NAMELESS union {
+        D3D11_VIDEO_COLOR_YCbCrA YCbCr;
+        D3D11_VIDEO_COLOR_RGBA RGBA;
+    } __C89_NAMELESSUNIONNAME;
+} D3D11_VIDEO_COLOR;
+typedef struct D3D11_VIDEO_PROCESSOR_COLOR_SPACE {
+    UINT Usage : 1;
+    UINT RGB_Range : 1;
+    UINT YCbCr_Matrix : 1;
+    UINT YCbCr_xvYCC : 1;
+    UINT Nominal_Range : 2;
+    UINT Reserved : 26;
+} D3D11_VIDEO_PROCESSOR_COLOR_SPACE;
+typedef struct D3D11_VIDEO_PROCESSOR_STREAM {
+    WINBOOL Enable;
+    UINT OutputIndex;
+    UINT InputFrameOrField;
+    UINT PastFrames;
+    UINT FutureFrames;
+    ID3D11VideoProcessorInputView **ppPastSurfaces;
+    ID3D11VideoProcessorInputView *pInputSurface;
+    ID3D11VideoProcessorInputView **ppFutureSurfaces;
+    ID3D11VideoProcessorInputView **ppPastSurfacesRight;
+    ID3D11VideoProcessorInputView *pInputSurfaceRight;
+    ID3D11VideoProcessorInputView **ppFutureSurfacesRight;
+} D3D11_VIDEO_PROCESSOR_STREAM;
+typedef struct D3D11_OMAC {
+    BYTE Omac[16];
+} D3D11_OMAC;
+typedef struct D3D11_AUTHENTICATED_CONFIGURE_OUTPUT {
+    D3D11_OMAC omac;
+    GUID ConfigureType;
+    HANDLE hChannel;
+    UINT SequenceNumber;
+    HRESULT ReturnCode;
+} D3D11_AUTHENTICATED_CONFIGURE_OUTPUT;
+typedef struct D3D11_QUERY_DATA_TIMESTAMP_DISJOINT {
+    UINT64 Frequency;
+    WINBOOL Disjoint;
+} D3D11_QUERY_DATA_TIMESTAMP_DISJOINT;
 /*****************************************************************************
  * ID3D11DeviceChild interface
  */
@@ -7791,6 +8300,3474 @@
 #endif  /* __ID3D11DeviceContext_INTERFACE_DEFINED__ */
 
 /*****************************************************************************
+ * ID3D11AuthenticatedChannel interface
+ */
+#ifndef __ID3D11AuthenticatedChannel_INTERFACE_DEFINED__
+#define __ID3D11AuthenticatedChannel_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D11AuthenticatedChannel, 0x3015a308, 0xdcbd, 0x47aa, 0xa7,0x47, 0x19,0x24,0x86,0xd1,0x4d,0x4a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("3015a308-dcbd-47aa-a747-192486d14d4a")
+ID3D11AuthenticatedChannel : public ID3D11DeviceChild
+{
+    virtual HRESULT STDMETHODCALLTYPE GetCertificateSize(
+        UINT *pCertificateSize) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCertificate(
+        UINT CertificateSize,
+        BYTE *pCertificate) = 0;
+
+    virtual void STDMETHODCALLTYPE GetChannelHandle(
+        HANDLE *pChannelHandle) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D11AuthenticatedChannel, 0x3015a308, 0xdcbd, 0x47aa, 0xa7,0x47, 0x19,0x24,0x86,0xd1,0x4d,0x4a)
+#endif
+#else
+typedef struct ID3D11AuthenticatedChannelVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D11AuthenticatedChannel* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D11AuthenticatedChannel* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D11AuthenticatedChannel* This);
+
+    /*** ID3D11DeviceChild methods ***/
+    void (STDMETHODCALLTYPE *GetDevice)(
+        ID3D11AuthenticatedChannel* This,
+        ID3D11Device **ppDevice);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        ID3D11AuthenticatedChannel* This,
+        REFGUID guid,
+        UINT *pDataSize,
+        void *pData);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        ID3D11AuthenticatedChannel* This,
+        REFGUID guid,
+        UINT DataSize,
+        const void *pData);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
+        ID3D11AuthenticatedChannel* This,
+        REFGUID guid,
+        const IUnknown *pData);
+
+    /*** ID3D11AuthenticatedChannel methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetCertificateSize)(
+        ID3D11AuthenticatedChannel* This,
+        UINT *pCertificateSize);
+
+    HRESULT (STDMETHODCALLTYPE *GetCertificate)(
+        ID3D11AuthenticatedChannel* This,
+        UINT CertificateSize,
+        BYTE *pCertificate);
+
+    void (STDMETHODCALLTYPE *GetChannelHandle)(
+        ID3D11AuthenticatedChannel* This,
+        HANDLE *pChannelHandle);
+
+    END_INTERFACE
+} ID3D11AuthenticatedChannelVtbl;
+interface ID3D11AuthenticatedChannel {
+    CONST_VTBL ID3D11AuthenticatedChannelVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D11AuthenticatedChannel_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D11AuthenticatedChannel_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D11AuthenticatedChannel_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D11DeviceChild methods ***/
+#define ID3D11AuthenticatedChannel_GetDevice(This,ppDevice) (This)->lpVtbl->GetDevice(This,ppDevice)
+#define ID3D11AuthenticatedChannel_GetPrivateData(This,guid,pDataSize,pData) (This)->lpVtbl->GetPrivateData(This,guid,pDataSize,pData)
+#define ID3D11AuthenticatedChannel_SetPrivateData(This,guid,DataSize,pData) (This)->lpVtbl->SetPrivateData(This,guid,DataSize,pData)
+#define ID3D11AuthenticatedChannel_SetPrivateDataInterface(This,guid,pData) (This)->lpVtbl->SetPrivateDataInterface(This,guid,pData)
+/*** ID3D11AuthenticatedChannel methods ***/
+#define ID3D11AuthenticatedChannel_GetCertificateSize(This,pCertificateSize) (This)->lpVtbl->GetCertificateSize(This,pCertificateSize)
+#define ID3D11AuthenticatedChannel_GetCertificate(This,CertificateSize,pCertificate) (This)->lpVtbl->GetCertificate(This,CertificateSize,pCertificate)
+#define ID3D11AuthenticatedChannel_GetChannelHandle(This,pChannelHandle) (This)->lpVtbl->GetChannelHandle(This,pChannelHandle)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ID3D11AuthenticatedChannel_QueryInterface(ID3D11AuthenticatedChannel* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ID3D11AuthenticatedChannel_AddRef(ID3D11AuthenticatedChannel* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ID3D11AuthenticatedChannel_Release(ID3D11AuthenticatedChannel* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D11DeviceChild methods ***/
+static FORCEINLINE void ID3D11AuthenticatedChannel_GetDevice(ID3D11AuthenticatedChannel* This,ID3D11Device **ppDevice) {
+    This->lpVtbl->GetDevice(This,ppDevice);
+}
+static FORCEINLINE HRESULT ID3D11AuthenticatedChannel_GetPrivateData(ID3D11AuthenticatedChannel* This,REFGUID guid,UINT *pDataSize,void *pData) {
+    return This->lpVtbl->GetPrivateData(This,guid,pDataSize,pData);
+}
+static FORCEINLINE HRESULT ID3D11AuthenticatedChannel_SetPrivateData(ID3D11AuthenticatedChannel* This,REFGUID guid,UINT DataSize,const void *pData) {
+    return This->lpVtbl->SetPrivateData(This,guid,DataSize,pData);
+}
+static FORCEINLINE HRESULT ID3D11AuthenticatedChannel_SetPrivateDataInterface(ID3D11AuthenticatedChannel* This,REFGUID guid,const IUnknown *pData) {
+    return This->lpVtbl->SetPrivateDataInterface(This,guid,pData);
+}
+/*** ID3D11AuthenticatedChannel methods ***/
+static FORCEINLINE HRESULT ID3D11AuthenticatedChannel_GetCertificateSize(ID3D11AuthenticatedChannel* This,UINT *pCertificateSize) {
+    return This->lpVtbl->GetCertificateSize(This,pCertificateSize);
+}
+static FORCEINLINE HRESULT ID3D11AuthenticatedChannel_GetCertificate(ID3D11AuthenticatedChannel* This,UINT CertificateSize,BYTE *pCertificate) {
+    return This->lpVtbl->GetCertificate(This,CertificateSize,pCertificate);
+}
+static FORCEINLINE void ID3D11AuthenticatedChannel_GetChannelHandle(ID3D11AuthenticatedChannel* This,HANDLE *pChannelHandle) {
+    This->lpVtbl->GetChannelHandle(This,pChannelHandle);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ID3D11AuthenticatedChannel_GetCertificateSize_Proxy(
+    ID3D11AuthenticatedChannel* This,
+    UINT *pCertificateSize);
+void __RPC_STUB ID3D11AuthenticatedChannel_GetCertificateSize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11AuthenticatedChannel_GetCertificate_Proxy(
+    ID3D11AuthenticatedChannel* This,
+    UINT CertificateSize,
+    BYTE *pCertificate);
+void __RPC_STUB ID3D11AuthenticatedChannel_GetCertificate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11AuthenticatedChannel_GetChannelHandle_Proxy(
+    ID3D11AuthenticatedChannel* This,
+    HANDLE *pChannelHandle);
+void __RPC_STUB ID3D11AuthenticatedChannel_GetChannelHandle_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ID3D11AuthenticatedChannel_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D11CryptoSession interface
+ */
+#ifndef __ID3D11CryptoSession_INTERFACE_DEFINED__
+#define __ID3D11CryptoSession_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D11CryptoSession, 0x9b32f9ad, 0xbdcc, 0x40a6, 0xa3,0x9d, 0xd5,0xc8,0x65,0x84,0x57,0x20);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("9b32f9ad-bdcc-40a6-a39d-d5c865845720")
+ID3D11CryptoSession : public ID3D11DeviceChild
+{
+    virtual void STDMETHODCALLTYPE GetCryptoType(
+        GUID *pCryptoType) = 0;
+
+    virtual void STDMETHODCALLTYPE GetDecoderProfile(
+        GUID *pDecoderProfile) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCertificateSize(
+        UINT *pCertificateSize) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCertificate(
+        UINT CertificateSize,
+        BYTE *pCertificate) = 0;
+
+    virtual void STDMETHODCALLTYPE GetCryptoSessionHandle(
+        HANDLE *pCryptoSessionHandle) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D11CryptoSession, 0x9b32f9ad, 0xbdcc, 0x40a6, 0xa3,0x9d, 0xd5,0xc8,0x65,0x84,0x57,0x20)
+#endif
+#else
+typedef struct ID3D11CryptoSessionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D11CryptoSession* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D11CryptoSession* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D11CryptoSession* This);
+
+    /*** ID3D11DeviceChild methods ***/
+    void (STDMETHODCALLTYPE *GetDevice)(
+        ID3D11CryptoSession* This,
+        ID3D11Device **ppDevice);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        ID3D11CryptoSession* This,
+        REFGUID guid,
+        UINT *pDataSize,
+        void *pData);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        ID3D11CryptoSession* This,
+        REFGUID guid,
+        UINT DataSize,
+        const void *pData);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
+        ID3D11CryptoSession* This,
+        REFGUID guid,
+        const IUnknown *pData);
+
+    /*** ID3D11CryptoSession methods ***/
+    void (STDMETHODCALLTYPE *GetCryptoType)(
+        ID3D11CryptoSession* This,
+        GUID *pCryptoType);
+
+    void (STDMETHODCALLTYPE *GetDecoderProfile)(
+        ID3D11CryptoSession* This,
+        GUID *pDecoderProfile);
+
+    HRESULT (STDMETHODCALLTYPE *GetCertificateSize)(
+        ID3D11CryptoSession* This,
+        UINT *pCertificateSize);
+
+    HRESULT (STDMETHODCALLTYPE *GetCertificate)(
+        ID3D11CryptoSession* This,
+        UINT CertificateSize,
+        BYTE *pCertificate);
+
+    void (STDMETHODCALLTYPE *GetCryptoSessionHandle)(
+        ID3D11CryptoSession* This,
+        HANDLE *pCryptoSessionHandle);
+
+    END_INTERFACE
+} ID3D11CryptoSessionVtbl;
+interface ID3D11CryptoSession {
+    CONST_VTBL ID3D11CryptoSessionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D11CryptoSession_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D11CryptoSession_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D11CryptoSession_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D11DeviceChild methods ***/
+#define ID3D11CryptoSession_GetDevice(This,ppDevice) (This)->lpVtbl->GetDevice(This,ppDevice)
+#define ID3D11CryptoSession_GetPrivateData(This,guid,pDataSize,pData) (This)->lpVtbl->GetPrivateData(This,guid,pDataSize,pData)
+#define ID3D11CryptoSession_SetPrivateData(This,guid,DataSize,pData) (This)->lpVtbl->SetPrivateData(This,guid,DataSize,pData)
+#define ID3D11CryptoSession_SetPrivateDataInterface(This,guid,pData) (This)->lpVtbl->SetPrivateDataInterface(This,guid,pData)
+/*** ID3D11CryptoSession methods ***/
+#define ID3D11CryptoSession_GetCryptoType(This,pCryptoType) (This)->lpVtbl->GetCryptoType(This,pCryptoType)
+#define ID3D11CryptoSession_GetDecoderProfile(This,pDecoderProfile) (This)->lpVtbl->GetDecoderProfile(This,pDecoderProfile)
+#define ID3D11CryptoSession_GetCertificateSize(This,pCertificateSize) (This)->lpVtbl->GetCertificateSize(This,pCertificateSize)
+#define ID3D11CryptoSession_GetCertificate(This,CertificateSize,pCertificate) (This)->lpVtbl->GetCertificate(This,CertificateSize,pCertificate)
+#define ID3D11CryptoSession_GetCryptoSessionHandle(This,pCryptoSessionHandle) (This)->lpVtbl->GetCryptoSessionHandle(This,pCryptoSessionHandle)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ID3D11CryptoSession_QueryInterface(ID3D11CryptoSession* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ID3D11CryptoSession_AddRef(ID3D11CryptoSession* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ID3D11CryptoSession_Release(ID3D11CryptoSession* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D11DeviceChild methods ***/
+static FORCEINLINE void ID3D11CryptoSession_GetDevice(ID3D11CryptoSession* This,ID3D11Device **ppDevice) {
+    This->lpVtbl->GetDevice(This,ppDevice);
+}
+static FORCEINLINE HRESULT ID3D11CryptoSession_GetPrivateData(ID3D11CryptoSession* This,REFGUID guid,UINT *pDataSize,void *pData) {
+    return This->lpVtbl->GetPrivateData(This,guid,pDataSize,pData);
+}
+static FORCEINLINE HRESULT ID3D11CryptoSession_SetPrivateData(ID3D11CryptoSession* This,REFGUID guid,UINT DataSize,const void *pData) {
+    return This->lpVtbl->SetPrivateData(This,guid,DataSize,pData);
+}
+static FORCEINLINE HRESULT ID3D11CryptoSession_SetPrivateDataInterface(ID3D11CryptoSession* This,REFGUID guid,const IUnknown *pData) {
+    return This->lpVtbl->SetPrivateDataInterface(This,guid,pData);
+}
+/*** ID3D11CryptoSession methods ***/
+static FORCEINLINE void ID3D11CryptoSession_GetCryptoType(ID3D11CryptoSession* This,GUID *pCryptoType) {
+    This->lpVtbl->GetCryptoType(This,pCryptoType);
+}
+static FORCEINLINE void ID3D11CryptoSession_GetDecoderProfile(ID3D11CryptoSession* This,GUID *pDecoderProfile) {
+    This->lpVtbl->GetDecoderProfile(This,pDecoderProfile);
+}
+static FORCEINLINE HRESULT ID3D11CryptoSession_GetCertificateSize(ID3D11CryptoSession* This,UINT *pCertificateSize) {
+    return This->lpVtbl->GetCertificateSize(This,pCertificateSize);
+}
+static FORCEINLINE HRESULT ID3D11CryptoSession_GetCertificate(ID3D11CryptoSession* This,UINT CertificateSize,BYTE *pCertificate) {
+    return This->lpVtbl->GetCertificate(This,CertificateSize,pCertificate);
+}
+static FORCEINLINE void ID3D11CryptoSession_GetCryptoSessionHandle(ID3D11CryptoSession* This,HANDLE *pCryptoSessionHandle) {
+    This->lpVtbl->GetCryptoSessionHandle(This,pCryptoSessionHandle);
+}
+#endif
+#endif
+
+#endif
+
+void STDMETHODCALLTYPE ID3D11CryptoSession_GetCryptoType_Proxy(
+    ID3D11CryptoSession* This,
+    GUID *pCryptoType);
+void __RPC_STUB ID3D11CryptoSession_GetCryptoType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11CryptoSession_GetDecoderProfile_Proxy(
+    ID3D11CryptoSession* This,
+    GUID *pDecoderProfile);
+void __RPC_STUB ID3D11CryptoSession_GetDecoderProfile_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11CryptoSession_GetCertificateSize_Proxy(
+    ID3D11CryptoSession* This,
+    UINT *pCertificateSize);
+void __RPC_STUB ID3D11CryptoSession_GetCertificateSize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11CryptoSession_GetCertificate_Proxy(
+    ID3D11CryptoSession* This,
+    UINT CertificateSize,
+    BYTE *pCertificate);
+void __RPC_STUB ID3D11CryptoSession_GetCertificate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11CryptoSession_GetCryptoSessionHandle_Proxy(
+    ID3D11CryptoSession* This,
+    HANDLE *pCryptoSessionHandle);
+void __RPC_STUB ID3D11CryptoSession_GetCryptoSessionHandle_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ID3D11CryptoSession_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D11VideoDecoder interface
+ */
+#ifndef __ID3D11VideoDecoder_INTERFACE_DEFINED__
+#define __ID3D11VideoDecoder_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D11VideoDecoder, 0x3c9c5b51, 0x995d, 0x48d1, 0x9b,0x8d, 0xfa,0x5c,0xae,0xde,0xd6,0x5c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("3c9c5b51-995d-48d1-9b8d-fa5caeded65c")
+ID3D11VideoDecoder : public ID3D11DeviceChild
+{
+    virtual HRESULT STDMETHODCALLTYPE GetCreationParameters(
+        D3D11_VIDEO_DECODER_DESC *pVideoDesc,
+        D3D11_VIDEO_DECODER_CONFIG *pConfig) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDriverHandle(
+        HANDLE *pDriverHandle) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D11VideoDecoder, 0x3c9c5b51, 0x995d, 0x48d1, 0x9b,0x8d, 0xfa,0x5c,0xae,0xde,0xd6,0x5c)
+#endif
+#else
+typedef struct ID3D11VideoDecoderVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D11VideoDecoder* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D11VideoDecoder* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D11VideoDecoder* This);
+
+    /*** ID3D11DeviceChild methods ***/
+    void (STDMETHODCALLTYPE *GetDevice)(
+        ID3D11VideoDecoder* This,
+        ID3D11Device **ppDevice);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        ID3D11VideoDecoder* This,
+        REFGUID guid,
+        UINT *pDataSize,
+        void *pData);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        ID3D11VideoDecoder* This,
+        REFGUID guid,
+        UINT DataSize,
+        const void *pData);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
+        ID3D11VideoDecoder* This,
+        REFGUID guid,
+        const IUnknown *pData);
+
+    /*** ID3D11VideoDecoder methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetCreationParameters)(
+        ID3D11VideoDecoder* This,
+        D3D11_VIDEO_DECODER_DESC *pVideoDesc,
+        D3D11_VIDEO_DECODER_CONFIG *pConfig);
+
+    HRESULT (STDMETHODCALLTYPE *GetDriverHandle)(
+        ID3D11VideoDecoder* This,
+        HANDLE *pDriverHandle);
+
+    END_INTERFACE
+} ID3D11VideoDecoderVtbl;
+interface ID3D11VideoDecoder {
+    CONST_VTBL ID3D11VideoDecoderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D11VideoDecoder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D11VideoDecoder_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D11VideoDecoder_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D11DeviceChild methods ***/
+#define ID3D11VideoDecoder_GetDevice(This,ppDevice) (This)->lpVtbl->GetDevice(This,ppDevice)
+#define ID3D11VideoDecoder_GetPrivateData(This,guid,pDataSize,pData) (This)->lpVtbl->GetPrivateData(This,guid,pDataSize,pData)
+#define ID3D11VideoDecoder_SetPrivateData(This,guid,DataSize,pData) (This)->lpVtbl->SetPrivateData(This,guid,DataSize,pData)
+#define ID3D11VideoDecoder_SetPrivateDataInterface(This,guid,pData) (This)->lpVtbl->SetPrivateDataInterface(This,guid,pData)
+/*** ID3D11VideoDecoder methods ***/
+#define ID3D11VideoDecoder_GetCreationParameters(This,pVideoDesc,pConfig) (This)->lpVtbl->GetCreationParameters(This,pVideoDesc,pConfig)
+#define ID3D11VideoDecoder_GetDriverHandle(This,pDriverHandle) (This)->lpVtbl->GetDriverHandle(This,pDriverHandle)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ID3D11VideoDecoder_QueryInterface(ID3D11VideoDecoder* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ID3D11VideoDecoder_AddRef(ID3D11VideoDecoder* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ID3D11VideoDecoder_Release(ID3D11VideoDecoder* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D11DeviceChild methods ***/
+static FORCEINLINE void ID3D11VideoDecoder_GetDevice(ID3D11VideoDecoder* This,ID3D11Device **ppDevice) {
+    This->lpVtbl->GetDevice(This,ppDevice);
+}
+static FORCEINLINE HRESULT ID3D11VideoDecoder_GetPrivateData(ID3D11VideoDecoder* This,REFGUID guid,UINT *pDataSize,void *pData) {
+    return This->lpVtbl->GetPrivateData(This,guid,pDataSize,pData);
+}
+static FORCEINLINE HRESULT ID3D11VideoDecoder_SetPrivateData(ID3D11VideoDecoder* This,REFGUID guid,UINT DataSize,const void *pData) {
+    return This->lpVtbl->SetPrivateData(This,guid,DataSize,pData);
+}
+static FORCEINLINE HRESULT ID3D11VideoDecoder_SetPrivateDataInterface(ID3D11VideoDecoder* This,REFGUID guid,const IUnknown *pData) {
+    return This->lpVtbl->SetPrivateDataInterface(This,guid,pData);
+}
+/*** ID3D11VideoDecoder methods ***/
+static FORCEINLINE HRESULT ID3D11VideoDecoder_GetCreationParameters(ID3D11VideoDecoder* This,D3D11_VIDEO_DECODER_DESC *pVideoDesc,D3D11_VIDEO_DECODER_CONFIG *pConfig) {
+    return This->lpVtbl->GetCreationParameters(This,pVideoDesc,pConfig);
+}
+static FORCEINLINE HRESULT ID3D11VideoDecoder_GetDriverHandle(ID3D11VideoDecoder* This,HANDLE *pDriverHandle) {
+    return This->lpVtbl->GetDriverHandle(This,pDriverHandle);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ID3D11VideoDecoder_GetCreationParameters_Proxy(
+    ID3D11VideoDecoder* This,
+    D3D11_VIDEO_DECODER_DESC *pVideoDesc,
+    D3D11_VIDEO_DECODER_CONFIG *pConfig);
+void __RPC_STUB ID3D11VideoDecoder_GetCreationParameters_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoDecoder_GetDriverHandle_Proxy(
+    ID3D11VideoDecoder* This,
+    HANDLE *pDriverHandle);
+void __RPC_STUB ID3D11VideoDecoder_GetDriverHandle_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ID3D11VideoDecoder_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D11VideoProcessorEnumerator interface
+ */
+#ifndef __ID3D11VideoProcessorEnumerator_INTERFACE_DEFINED__
+#define __ID3D11VideoProcessorEnumerator_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D11VideoProcessorEnumerator, 0x31627037, 0x53ab, 0x4200, 0x90,0x61, 0x05,0xfa,0xa9,0xab,0x45,0xf9);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("31627037-53ab-4200-9061-05faa9ab45f9")
+ID3D11VideoProcessorEnumerator : public ID3D11DeviceChild
+{
+    virtual HRESULT STDMETHODCALLTYPE GetVideoProcessorContentDesc(
+        D3D11_VIDEO_PROCESSOR_CONTENT_DESC *pContentDesc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CheckVideoProcessorFormat(
+        DXGI_FORMAT Format,
+        UINT *pFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVideoProcessorCaps(
+        D3D11_VIDEO_PROCESSOR_CAPS *pCaps) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVideoProcessorRateConversionCaps(
+        UINT TypeIndex,
+        D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS *pCaps) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVideoProcessorCustomRate(
+        UINT TypeIndex,
+        UINT CustomRateIndex,
+        D3D11_VIDEO_PROCESSOR_CUSTOM_RATE *pRate) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVideoProcessorFilterRange(
+        D3D11_VIDEO_PROCESSOR_FILTER Filter,
+        D3D11_VIDEO_PROCESSOR_FILTER_RANGE *pRange) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D11VideoProcessorEnumerator, 0x31627037, 0x53ab, 0x4200, 0x90,0x61, 0x05,0xfa,0xa9,0xab,0x45,0xf9)
+#endif
+#else
+typedef struct ID3D11VideoProcessorEnumeratorVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D11VideoProcessorEnumerator* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D11VideoProcessorEnumerator* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D11VideoProcessorEnumerator* This);
+
+    /*** ID3D11DeviceChild methods ***/
+    void (STDMETHODCALLTYPE *GetDevice)(
+        ID3D11VideoProcessorEnumerator* This,
+        ID3D11Device **ppDevice);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        ID3D11VideoProcessorEnumerator* This,
+        REFGUID guid,
+        UINT *pDataSize,
+        void *pData);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        ID3D11VideoProcessorEnumerator* This,
+        REFGUID guid,
+        UINT DataSize,
+        const void *pData);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
+        ID3D11VideoProcessorEnumerator* This,
+        REFGUID guid,
+        const IUnknown *pData);
+
+    /*** ID3D11VideoProcessorEnumerator methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetVideoProcessorContentDesc)(
+        ID3D11VideoProcessorEnumerator* This,
+        D3D11_VIDEO_PROCESSOR_CONTENT_DESC *pContentDesc);
+
+    HRESULT (STDMETHODCALLTYPE *CheckVideoProcessorFormat)(
+        ID3D11VideoProcessorEnumerator* This,
+        DXGI_FORMAT Format,
+        UINT *pFlags);
+
+    HRESULT (STDMETHODCALLTYPE *GetVideoProcessorCaps)(
+        ID3D11VideoProcessorEnumerator* This,
+        D3D11_VIDEO_PROCESSOR_CAPS *pCaps);
+
+    HRESULT (STDMETHODCALLTYPE *GetVideoProcessorRateConversionCaps)(
+        ID3D11VideoProcessorEnumerator* This,
+        UINT TypeIndex,
+        D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS *pCaps);
+
+    HRESULT (STDMETHODCALLTYPE *GetVideoProcessorCustomRate)(
+        ID3D11VideoProcessorEnumerator* This,
+        UINT TypeIndex,
+        UINT CustomRateIndex,
+        D3D11_VIDEO_PROCESSOR_CUSTOM_RATE *pRate);
+
+    HRESULT (STDMETHODCALLTYPE *GetVideoProcessorFilterRange)(
+        ID3D11VideoProcessorEnumerator* This,
+        D3D11_VIDEO_PROCESSOR_FILTER Filter,
+        D3D11_VIDEO_PROCESSOR_FILTER_RANGE *pRange);
+
+    END_INTERFACE
+} ID3D11VideoProcessorEnumeratorVtbl;
+interface ID3D11VideoProcessorEnumerator {
+    CONST_VTBL ID3D11VideoProcessorEnumeratorVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D11VideoProcessorEnumerator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D11VideoProcessorEnumerator_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D11VideoProcessorEnumerator_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D11DeviceChild methods ***/
+#define ID3D11VideoProcessorEnumerator_GetDevice(This,ppDevice) (This)->lpVtbl->GetDevice(This,ppDevice)
+#define ID3D11VideoProcessorEnumerator_GetPrivateData(This,guid,pDataSize,pData) (This)->lpVtbl->GetPrivateData(This,guid,pDataSize,pData)
+#define ID3D11VideoProcessorEnumerator_SetPrivateData(This,guid,DataSize,pData) (This)->lpVtbl->SetPrivateData(This,guid,DataSize,pData)
+#define ID3D11VideoProcessorEnumerator_SetPrivateDataInterface(This,guid,pData) (This)->lpVtbl->SetPrivateDataInterface(This,guid,pData)
+/*** ID3D11VideoProcessorEnumerator methods ***/
+#define ID3D11VideoProcessorEnumerator_GetVideoProcessorContentDesc(This,pContentDesc) (This)->lpVtbl->GetVideoProcessorContentDesc(This,pContentDesc)
+#define ID3D11VideoProcessorEnumerator_CheckVideoProcessorFormat(This,Format,pFlags) (This)->lpVtbl->CheckVideoProcessorFormat(This,Format,pFlags)
+#define ID3D11VideoProcessorEnumerator_GetVideoProcessorCaps(This,pCaps) (This)->lpVtbl->GetVideoProcessorCaps(This,pCaps)
+#define ID3D11VideoProcessorEnumerator_GetVideoProcessorRateConversionCaps(This,TypeIndex,pCaps) (This)->lpVtbl->GetVideoProcessorRateConversionCaps(This,TypeIndex,pCaps)
+#define ID3D11VideoProcessorEnumerator_GetVideoProcessorCustomRate(This,TypeIndex,CustomRateIndex,pRate) (This)->lpVtbl->GetVideoProcessorCustomRate(This,TypeIndex,CustomRateIndex,pRate)
+#define ID3D11VideoProcessorEnumerator_GetVideoProcessorFilterRange(This,Filter,pRange) (This)->lpVtbl->GetVideoProcessorFilterRange(This,Filter,pRange)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ID3D11VideoProcessorEnumerator_QueryInterface(ID3D11VideoProcessorEnumerator* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ID3D11VideoProcessorEnumerator_AddRef(ID3D11VideoProcessorEnumerator* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ID3D11VideoProcessorEnumerator_Release(ID3D11VideoProcessorEnumerator* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D11DeviceChild methods ***/
+static FORCEINLINE void ID3D11VideoProcessorEnumerator_GetDevice(ID3D11VideoProcessorEnumerator* This,ID3D11Device **ppDevice) {
+    This->lpVtbl->GetDevice(This,ppDevice);
+}
+static FORCEINLINE HRESULT ID3D11VideoProcessorEnumerator_GetPrivateData(ID3D11VideoProcessorEnumerator* This,REFGUID guid,UINT *pDataSize,void *pData) {
+    return This->lpVtbl->GetPrivateData(This,guid,pDataSize,pData);
+}
+static FORCEINLINE HRESULT ID3D11VideoProcessorEnumerator_SetPrivateData(ID3D11VideoProcessorEnumerator* This,REFGUID guid,UINT DataSize,const void *pData) {
+    return This->lpVtbl->SetPrivateData(This,guid,DataSize,pData);
+}
+static FORCEINLINE HRESULT ID3D11VideoProcessorEnumerator_SetPrivateDataInterface(ID3D11VideoProcessorEnumerator* This,REFGUID guid,const IUnknown *pData) {
+    return This->lpVtbl->SetPrivateDataInterface(This,guid,pData);
+}
+/*** ID3D11VideoProcessorEnumerator methods ***/
+static FORCEINLINE HRESULT ID3D11VideoProcessorEnumerator_GetVideoProcessorContentDesc(ID3D11VideoProcessorEnumerator* This,D3D11_VIDEO_PROCESSOR_CONTENT_DESC *pContentDesc) {
+    return This->lpVtbl->GetVideoProcessorContentDesc(This,pContentDesc);
+}
+static FORCEINLINE HRESULT ID3D11VideoProcessorEnumerator_CheckVideoProcessorFormat(ID3D11VideoProcessorEnumerator* This,DXGI_FORMAT Format,UINT *pFlags) {
+    return This->lpVtbl->CheckVideoProcessorFormat(This,Format,pFlags);
+}
+static FORCEINLINE HRESULT ID3D11VideoProcessorEnumerator_GetVideoProcessorCaps(ID3D11VideoProcessorEnumerator* This,D3D11_VIDEO_PROCESSOR_CAPS *pCaps) {
+    return This->lpVtbl->GetVideoProcessorCaps(This,pCaps);
+}
+static FORCEINLINE HRESULT ID3D11VideoProcessorEnumerator_GetVideoProcessorRateConversionCaps(ID3D11VideoProcessorEnumerator* This,UINT TypeIndex,D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS *pCaps) {
+    return This->lpVtbl->GetVideoProcessorRateConversionCaps(This,TypeIndex,pCaps);
+}
+static FORCEINLINE HRESULT ID3D11VideoProcessorEnumerator_GetVideoProcessorCustomRate(ID3D11VideoProcessorEnumerator* This,UINT TypeIndex,UINT CustomRateIndex,D3D11_VIDEO_PROCESSOR_CUSTOM_RATE *pRate) {
+    return This->lpVtbl->GetVideoProcessorCustomRate(This,TypeIndex,CustomRateIndex,pRate);
+}
+static FORCEINLINE HRESULT ID3D11VideoProcessorEnumerator_GetVideoProcessorFilterRange(ID3D11VideoProcessorEnumerator* This,D3D11_VIDEO_PROCESSOR_FILTER Filter,D3D11_VIDEO_PROCESSOR_FILTER_RANGE *pRange) {
+    return This->lpVtbl->GetVideoProcessorFilterRange(This,Filter,pRange);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ID3D11VideoProcessorEnumerator_GetVideoProcessorContentDesc_Proxy(
+    ID3D11VideoProcessorEnumerator* This,
+    D3D11_VIDEO_PROCESSOR_CONTENT_DESC *pContentDesc);
+void __RPC_STUB ID3D11VideoProcessorEnumerator_GetVideoProcessorContentDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoProcessorEnumerator_CheckVideoProcessorFormat_Proxy(
+    ID3D11VideoProcessorEnumerator* This,
+    DXGI_FORMAT Format,
+    UINT *pFlags);
+void __RPC_STUB ID3D11VideoProcessorEnumerator_CheckVideoProcessorFormat_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoProcessorEnumerator_GetVideoProcessorCaps_Proxy(
+    ID3D11VideoProcessorEnumerator* This,
+    D3D11_VIDEO_PROCESSOR_CAPS *pCaps);
+void __RPC_STUB ID3D11VideoProcessorEnumerator_GetVideoProcessorCaps_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoProcessorEnumerator_GetVideoProcessorRateConversionCaps_Proxy(
+    ID3D11VideoProcessorEnumerator* This,
+    UINT TypeIndex,
+    D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS *pCaps);
+void __RPC_STUB ID3D11VideoProcessorEnumerator_GetVideoProcessorRateConversionCaps_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoProcessorEnumerator_GetVideoProcessorCustomRate_Proxy(
+    ID3D11VideoProcessorEnumerator* This,
+    UINT TypeIndex,
+    UINT CustomRateIndex,
+    D3D11_VIDEO_PROCESSOR_CUSTOM_RATE *pRate);
+void __RPC_STUB ID3D11VideoProcessorEnumerator_GetVideoProcessorCustomRate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoProcessorEnumerator_GetVideoProcessorFilterRange_Proxy(
+    ID3D11VideoProcessorEnumerator* This,
+    D3D11_VIDEO_PROCESSOR_FILTER Filter,
+    D3D11_VIDEO_PROCESSOR_FILTER_RANGE *pRange);
+void __RPC_STUB ID3D11VideoProcessorEnumerator_GetVideoProcessorFilterRange_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ID3D11VideoProcessorEnumerator_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D11VideoProcessor interface
+ */
+#ifndef __ID3D11VideoProcessor_INTERFACE_DEFINED__
+#define __ID3D11VideoProcessor_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D11VideoProcessor, 0x1d7b0652, 0x185f, 0x41c6, 0x85,0xce, 0x0c,0x5b,0xe3,0xd4,0xae,0x6c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("1d7b0652-185f-41c6-85ce-0c5be3d4ae6c")
+ID3D11VideoProcessor : public ID3D11DeviceChild
+{
+    virtual void STDMETHODCALLTYPE GetContentDesc(
+        D3D11_VIDEO_PROCESSOR_CONTENT_DESC *pDesc) = 0;
+
+    virtual void STDMETHODCALLTYPE GetRateConversionCaps(
+        D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS *pCaps) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D11VideoProcessor, 0x1d7b0652, 0x185f, 0x41c6, 0x85,0xce, 0x0c,0x5b,0xe3,0xd4,0xae,0x6c)
+#endif
+#else
+typedef struct ID3D11VideoProcessorVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D11VideoProcessor* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D11VideoProcessor* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D11VideoProcessor* This);
+
+    /*** ID3D11DeviceChild methods ***/
+    void (STDMETHODCALLTYPE *GetDevice)(
+        ID3D11VideoProcessor* This,
+        ID3D11Device **ppDevice);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        ID3D11VideoProcessor* This,
+        REFGUID guid,
+        UINT *pDataSize,
+        void *pData);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        ID3D11VideoProcessor* This,
+        REFGUID guid,
+        UINT DataSize,
+        const void *pData);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
+        ID3D11VideoProcessor* This,
+        REFGUID guid,
+        const IUnknown *pData);
+
+    /*** ID3D11VideoProcessor methods ***/
+    void (STDMETHODCALLTYPE *GetContentDesc)(
+        ID3D11VideoProcessor* This,
+        D3D11_VIDEO_PROCESSOR_CONTENT_DESC *pDesc);
+
+    void (STDMETHODCALLTYPE *GetRateConversionCaps)(
+        ID3D11VideoProcessor* This,
+        D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS *pCaps);
+
+    END_INTERFACE
+} ID3D11VideoProcessorVtbl;
+interface ID3D11VideoProcessor {
+    CONST_VTBL ID3D11VideoProcessorVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D11VideoProcessor_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D11VideoProcessor_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D11VideoProcessor_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D11DeviceChild methods ***/
+#define ID3D11VideoProcessor_GetDevice(This,ppDevice) (This)->lpVtbl->GetDevice(This,ppDevice)
+#define ID3D11VideoProcessor_GetPrivateData(This,guid,pDataSize,pData) (This)->lpVtbl->GetPrivateData(This,guid,pDataSize,pData)
+#define ID3D11VideoProcessor_SetPrivateData(This,guid,DataSize,pData) (This)->lpVtbl->SetPrivateData(This,guid,DataSize,pData)
+#define ID3D11VideoProcessor_SetPrivateDataInterface(This,guid,pData) (This)->lpVtbl->SetPrivateDataInterface(This,guid,pData)
+/*** ID3D11VideoProcessor methods ***/
+#define ID3D11VideoProcessor_GetContentDesc(This,pDesc) (This)->lpVtbl->GetContentDesc(This,pDesc)
+#define ID3D11VideoProcessor_GetRateConversionCaps(This,pCaps) (This)->lpVtbl->GetRateConversionCaps(This,pCaps)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ID3D11VideoProcessor_QueryInterface(ID3D11VideoProcessor* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ID3D11VideoProcessor_AddRef(ID3D11VideoProcessor* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ID3D11VideoProcessor_Release(ID3D11VideoProcessor* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D11DeviceChild methods ***/
+static FORCEINLINE void ID3D11VideoProcessor_GetDevice(ID3D11VideoProcessor* This,ID3D11Device **ppDevice) {
+    This->lpVtbl->GetDevice(This,ppDevice);
+}
+static FORCEINLINE HRESULT ID3D11VideoProcessor_GetPrivateData(ID3D11VideoProcessor* This,REFGUID guid,UINT *pDataSize,void *pData) {
+    return This->lpVtbl->GetPrivateData(This,guid,pDataSize,pData);
+}
+static FORCEINLINE HRESULT ID3D11VideoProcessor_SetPrivateData(ID3D11VideoProcessor* This,REFGUID guid,UINT DataSize,const void *pData) {
+    return This->lpVtbl->SetPrivateData(This,guid,DataSize,pData);
+}
+static FORCEINLINE HRESULT ID3D11VideoProcessor_SetPrivateDataInterface(ID3D11VideoProcessor* This,REFGUID guid,const IUnknown *pData) {
+    return This->lpVtbl->SetPrivateDataInterface(This,guid,pData);
+}
+/*** ID3D11VideoProcessor methods ***/
+static FORCEINLINE void ID3D11VideoProcessor_GetContentDesc(ID3D11VideoProcessor* This,D3D11_VIDEO_PROCESSOR_CONTENT_DESC *pDesc) {
+    This->lpVtbl->GetContentDesc(This,pDesc);
+}
+static FORCEINLINE void ID3D11VideoProcessor_GetRateConversionCaps(ID3D11VideoProcessor* This,D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS *pCaps) {
+    This->lpVtbl->GetRateConversionCaps(This,pCaps);
+}
+#endif
+#endif
+
+#endif
+
+void STDMETHODCALLTYPE ID3D11VideoProcessor_GetContentDesc_Proxy(
+    ID3D11VideoProcessor* This,
+    D3D11_VIDEO_PROCESSOR_CONTENT_DESC *pDesc);
+void __RPC_STUB ID3D11VideoProcessor_GetContentDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoProcessor_GetRateConversionCaps_Proxy(
+    ID3D11VideoProcessor* This,
+    D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS *pCaps);
+void __RPC_STUB ID3D11VideoProcessor_GetRateConversionCaps_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ID3D11VideoProcessor_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D11VideoDecoderOutputView interface
+ */
+#ifndef __ID3D11VideoDecoderOutputView_INTERFACE_DEFINED__
+#define __ID3D11VideoDecoderOutputView_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D11VideoDecoderOutputView, 0xc2931aea, 0x2a85, 0x4f20, 0x86,0x0f, 0xfb,0xa1,0xfd,0x25,0x6e,0x18);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("c2931aea-2a85-4f20-860f-fba1fd256e18")
+ID3D11VideoDecoderOutputView : public ID3D11View
+{
+    virtual void STDMETHODCALLTYPE GetDesc(
+        D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC *pDesc) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D11VideoDecoderOutputView, 0xc2931aea, 0x2a85, 0x4f20, 0x86,0x0f, 0xfb,0xa1,0xfd,0x25,0x6e,0x18)
+#endif
+#else
+typedef struct ID3D11VideoDecoderOutputViewVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D11VideoDecoderOutputView* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D11VideoDecoderOutputView* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D11VideoDecoderOutputView* This);
+
+    /*** ID3D11DeviceChild methods ***/
+    void (STDMETHODCALLTYPE *GetDevice)(
+        ID3D11VideoDecoderOutputView* This,
+        ID3D11Device **ppDevice);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        ID3D11VideoDecoderOutputView* This,
+        REFGUID guid,
+        UINT *pDataSize,
+        void *pData);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        ID3D11VideoDecoderOutputView* This,
+        REFGUID guid,
+        UINT DataSize,
+        const void *pData);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
+        ID3D11VideoDecoderOutputView* This,
+        REFGUID guid,
+        const IUnknown *pData);
+
+    /*** ID3D11View methods ***/
+    void (STDMETHODCALLTYPE *GetResource)(
+        ID3D11VideoDecoderOutputView* This,
+        ID3D11Resource **ppResource);
+
+    /*** ID3D11VideoDecoderOutputView methods ***/
+    void (STDMETHODCALLTYPE *GetDesc)(
+        ID3D11VideoDecoderOutputView* This,
+        D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC *pDesc);
+
+    END_INTERFACE
+} ID3D11VideoDecoderOutputViewVtbl;
+interface ID3D11VideoDecoderOutputView {
+    CONST_VTBL ID3D11VideoDecoderOutputViewVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D11VideoDecoderOutputView_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D11VideoDecoderOutputView_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D11VideoDecoderOutputView_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D11DeviceChild methods ***/
+#define ID3D11VideoDecoderOutputView_GetDevice(This,ppDevice) (This)->lpVtbl->GetDevice(This,ppDevice)
+#define ID3D11VideoDecoderOutputView_GetPrivateData(This,guid,pDataSize,pData) (This)->lpVtbl->GetPrivateData(This,guid,pDataSize,pData)
+#define ID3D11VideoDecoderOutputView_SetPrivateData(This,guid,DataSize,pData) (This)->lpVtbl->SetPrivateData(This,guid,DataSize,pData)
+#define ID3D11VideoDecoderOutputView_SetPrivateDataInterface(This,guid,pData) (This)->lpVtbl->SetPrivateDataInterface(This,guid,pData)
+/*** ID3D11View methods ***/
+#define ID3D11VideoDecoderOutputView_GetResource(This,ppResource) (This)->lpVtbl->GetResource(This,ppResource)
+/*** ID3D11VideoDecoderOutputView methods ***/
+#define ID3D11VideoDecoderOutputView_GetDesc(This,pDesc) (This)->lpVtbl->GetDesc(This,pDesc)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ID3D11VideoDecoderOutputView_QueryInterface(ID3D11VideoDecoderOutputView* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ID3D11VideoDecoderOutputView_AddRef(ID3D11VideoDecoderOutputView* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ID3D11VideoDecoderOutputView_Release(ID3D11VideoDecoderOutputView* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D11DeviceChild methods ***/
+static FORCEINLINE void ID3D11VideoDecoderOutputView_GetDevice(ID3D11VideoDecoderOutputView* This,ID3D11Device **ppDevice) {
+    This->lpVtbl->GetDevice(This,ppDevice);
+}
+static FORCEINLINE HRESULT ID3D11VideoDecoderOutputView_GetPrivateData(ID3D11VideoDecoderOutputView* This,REFGUID guid,UINT *pDataSize,void *pData) {
+    return This->lpVtbl->GetPrivateData(This,guid,pDataSize,pData);
+}
+static FORCEINLINE HRESULT ID3D11VideoDecoderOutputView_SetPrivateData(ID3D11VideoDecoderOutputView* This,REFGUID guid,UINT DataSize,const void *pData) {
+    return This->lpVtbl->SetPrivateData(This,guid,DataSize,pData);
+}
+static FORCEINLINE HRESULT ID3D11VideoDecoderOutputView_SetPrivateDataInterface(ID3D11VideoDecoderOutputView* This,REFGUID guid,const IUnknown *pData) {
+    return This->lpVtbl->SetPrivateDataInterface(This,guid,pData);
+}
+/*** ID3D11View methods ***/
+static FORCEINLINE void ID3D11VideoDecoderOutputView_GetResource(ID3D11VideoDecoderOutputView* This,ID3D11Resource **ppResource) {
+    This->lpVtbl->GetResource(This,ppResource);
+}
+/*** ID3D11VideoDecoderOutputView methods ***/
+static FORCEINLINE void ID3D11VideoDecoderOutputView_GetDesc(ID3D11VideoDecoderOutputView* This,D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC *pDesc) {
+    This->lpVtbl->GetDesc(This,pDesc);
+}
+#endif
+#endif
+
+#endif
+
+void STDMETHODCALLTYPE ID3D11VideoDecoderOutputView_GetDesc_Proxy(
+    ID3D11VideoDecoderOutputView* This,
+    D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC *pDesc);
+void __RPC_STUB ID3D11VideoDecoderOutputView_GetDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ID3D11VideoDecoderOutputView_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D11VideoProcessorInputView interface
+ */
+#ifndef __ID3D11VideoProcessorInputView_INTERFACE_DEFINED__
+#define __ID3D11VideoProcessorInputView_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D11VideoProcessorInputView, 0x11ec5a5f, 0x51dc, 0x4945, 0xab,0x34, 0x6e,0x8c,0x21,0x30,0x0e,0xa5);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("11ec5a5f-51dc-4945-ab34-6e8c21300ea5")
+ID3D11VideoProcessorInputView : public ID3D11View
+{
+    virtual void STDMETHODCALLTYPE GetDesc(
+        D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC *pDesc) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D11VideoProcessorInputView, 0x11ec5a5f, 0x51dc, 0x4945, 0xab,0x34, 0x6e,0x8c,0x21,0x30,0x0e,0xa5)
+#endif
+#else
+typedef struct ID3D11VideoProcessorInputViewVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D11VideoProcessorInputView* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D11VideoProcessorInputView* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D11VideoProcessorInputView* This);
+
+    /*** ID3D11DeviceChild methods ***/
+    void (STDMETHODCALLTYPE *GetDevice)(
+        ID3D11VideoProcessorInputView* This,
+        ID3D11Device **ppDevice);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        ID3D11VideoProcessorInputView* This,
+        REFGUID guid,
+        UINT *pDataSize,
+        void *pData);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        ID3D11VideoProcessorInputView* This,
+        REFGUID guid,
+        UINT DataSize,
+        const void *pData);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
+        ID3D11VideoProcessorInputView* This,
+        REFGUID guid,
+        const IUnknown *pData);
+
+    /*** ID3D11View methods ***/
+    void (STDMETHODCALLTYPE *GetResource)(
+        ID3D11VideoProcessorInputView* This,
+        ID3D11Resource **ppResource);
+
+    /*** ID3D11VideoProcessorInputView methods ***/
+    void (STDMETHODCALLTYPE *GetDesc)(
+        ID3D11VideoProcessorInputView* This,
+        D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC *pDesc);
+
+    END_INTERFACE
+} ID3D11VideoProcessorInputViewVtbl;
+interface ID3D11VideoProcessorInputView {
+    CONST_VTBL ID3D11VideoProcessorInputViewVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D11VideoProcessorInputView_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D11VideoProcessorInputView_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D11VideoProcessorInputView_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D11DeviceChild methods ***/
+#define ID3D11VideoProcessorInputView_GetDevice(This,ppDevice) (This)->lpVtbl->GetDevice(This,ppDevice)
+#define ID3D11VideoProcessorInputView_GetPrivateData(This,guid,pDataSize,pData) (This)->lpVtbl->GetPrivateData(This,guid,pDataSize,pData)
+#define ID3D11VideoProcessorInputView_SetPrivateData(This,guid,DataSize,pData) (This)->lpVtbl->SetPrivateData(This,guid,DataSize,pData)
+#define ID3D11VideoProcessorInputView_SetPrivateDataInterface(This,guid,pData) (This)->lpVtbl->SetPrivateDataInterface(This,guid,pData)
+/*** ID3D11View methods ***/
+#define ID3D11VideoProcessorInputView_GetResource(This,ppResource) (This)->lpVtbl->GetResource(This,ppResource)
+/*** ID3D11VideoProcessorInputView methods ***/
+#define ID3D11VideoProcessorInputView_GetDesc(This,pDesc) (This)->lpVtbl->GetDesc(This,pDesc)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ID3D11VideoProcessorInputView_QueryInterface(ID3D11VideoProcessorInputView* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ID3D11VideoProcessorInputView_AddRef(ID3D11VideoProcessorInputView* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ID3D11VideoProcessorInputView_Release(ID3D11VideoProcessorInputView* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D11DeviceChild methods ***/
+static FORCEINLINE void ID3D11VideoProcessorInputView_GetDevice(ID3D11VideoProcessorInputView* This,ID3D11Device **ppDevice) {
+    This->lpVtbl->GetDevice(This,ppDevice);
+}
+static FORCEINLINE HRESULT ID3D11VideoProcessorInputView_GetPrivateData(ID3D11VideoProcessorInputView* This,REFGUID guid,UINT *pDataSize,void *pData) {
+    return This->lpVtbl->GetPrivateData(This,guid,pDataSize,pData);
+}
+static FORCEINLINE HRESULT ID3D11VideoProcessorInputView_SetPrivateData(ID3D11VideoProcessorInputView* This,REFGUID guid,UINT DataSize,const void *pData) {
+    return This->lpVtbl->SetPrivateData(This,guid,DataSize,pData);
+}
+static FORCEINLINE HRESULT ID3D11VideoProcessorInputView_SetPrivateDataInterface(ID3D11VideoProcessorInputView* This,REFGUID guid,const IUnknown *pData) {
+    return This->lpVtbl->SetPrivateDataInterface(This,guid,pData);
+}
+/*** ID3D11View methods ***/
+static FORCEINLINE void ID3D11VideoProcessorInputView_GetResource(ID3D11VideoProcessorInputView* This,ID3D11Resource **ppResource) {
+    This->lpVtbl->GetResource(This,ppResource);
+}
+/*** ID3D11VideoProcessorInputView methods ***/
+static FORCEINLINE void ID3D11VideoProcessorInputView_GetDesc(ID3D11VideoProcessorInputView* This,D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC *pDesc) {
+    This->lpVtbl->GetDesc(This,pDesc);
+}
+#endif
+#endif
+
+#endif
+
+void STDMETHODCALLTYPE ID3D11VideoProcessorInputView_GetDesc_Proxy(
+    ID3D11VideoProcessorInputView* This,
+    D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC *pDesc);
+void __RPC_STUB ID3D11VideoProcessorInputView_GetDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ID3D11VideoProcessorInputView_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D11VideoProcessorOutputView interface
+ */
+#ifndef __ID3D11VideoProcessorOutputView_INTERFACE_DEFINED__
+#define __ID3D11VideoProcessorOutputView_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D11VideoProcessorOutputView, 0xa048285e, 0x25a9, 0x4527, 0xbd,0x93, 0xd6,0x8b,0x68,0xc4,0x42,0x54);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("a048285e-25a9-4527-bd93-d68b68c44254")
+ID3D11VideoProcessorOutputView : public ID3D11View
+{
+    virtual void STDMETHODCALLTYPE GetDesc(
+        D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC *pDesc) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D11VideoProcessorOutputView, 0xa048285e, 0x25a9, 0x4527, 0xbd,0x93, 0xd6,0x8b,0x68,0xc4,0x42,0x54)
+#endif
+#else
+typedef struct ID3D11VideoProcessorOutputViewVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D11VideoProcessorOutputView* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D11VideoProcessorOutputView* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D11VideoProcessorOutputView* This);
+
+    /*** ID3D11DeviceChild methods ***/
+    void (STDMETHODCALLTYPE *GetDevice)(
+        ID3D11VideoProcessorOutputView* This,
+        ID3D11Device **ppDevice);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        ID3D11VideoProcessorOutputView* This,
+        REFGUID guid,
+        UINT *pDataSize,
+        void *pData);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        ID3D11VideoProcessorOutputView* This,
+        REFGUID guid,
+        UINT DataSize,
+        const void *pData);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
+        ID3D11VideoProcessorOutputView* This,
+        REFGUID guid,
+        const IUnknown *pData);
+
+    /*** ID3D11View methods ***/
+    void (STDMETHODCALLTYPE *GetResource)(
+        ID3D11VideoProcessorOutputView* This,
+        ID3D11Resource **ppResource);
+
+    /*** ID3D11VideoProcessorOutputView methods ***/
+    void (STDMETHODCALLTYPE *GetDesc)(
+        ID3D11VideoProcessorOutputView* This,
+        D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC *pDesc);
+
+    END_INTERFACE
+} ID3D11VideoProcessorOutputViewVtbl;
+interface ID3D11VideoProcessorOutputView {
+    CONST_VTBL ID3D11VideoProcessorOutputViewVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D11VideoProcessorOutputView_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D11VideoProcessorOutputView_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D11VideoProcessorOutputView_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D11DeviceChild methods ***/
+#define ID3D11VideoProcessorOutputView_GetDevice(This,ppDevice) (This)->lpVtbl->GetDevice(This,ppDevice)
+#define ID3D11VideoProcessorOutputView_GetPrivateData(This,guid,pDataSize,pData) (This)->lpVtbl->GetPrivateData(This,guid,pDataSize,pData)
+#define ID3D11VideoProcessorOutputView_SetPrivateData(This,guid,DataSize,pData) (This)->lpVtbl->SetPrivateData(This,guid,DataSize,pData)
+#define ID3D11VideoProcessorOutputView_SetPrivateDataInterface(This,guid,pData) (This)->lpVtbl->SetPrivateDataInterface(This,guid,pData)
+/*** ID3D11View methods ***/
+#define ID3D11VideoProcessorOutputView_GetResource(This,ppResource) (This)->lpVtbl->GetResource(This,ppResource)
+/*** ID3D11VideoProcessorOutputView methods ***/
+#define ID3D11VideoProcessorOutputView_GetDesc(This,pDesc) (This)->lpVtbl->GetDesc(This,pDesc)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ID3D11VideoProcessorOutputView_QueryInterface(ID3D11VideoProcessorOutputView* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ID3D11VideoProcessorOutputView_AddRef(ID3D11VideoProcessorOutputView* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ID3D11VideoProcessorOutputView_Release(ID3D11VideoProcessorOutputView* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D11DeviceChild methods ***/
+static FORCEINLINE void ID3D11VideoProcessorOutputView_GetDevice(ID3D11VideoProcessorOutputView* This,ID3D11Device **ppDevice) {
+    This->lpVtbl->GetDevice(This,ppDevice);
+}
+static FORCEINLINE HRESULT ID3D11VideoProcessorOutputView_GetPrivateData(ID3D11VideoProcessorOutputView* This,REFGUID guid,UINT *pDataSize,void *pData) {
+    return This->lpVtbl->GetPrivateData(This,guid,pDataSize,pData);
+}
+static FORCEINLINE HRESULT ID3D11VideoProcessorOutputView_SetPrivateData(ID3D11VideoProcessorOutputView* This,REFGUID guid,UINT DataSize,const void *pData) {
+    return This->lpVtbl->SetPrivateData(This,guid,DataSize,pData);
+}
+static FORCEINLINE HRESULT ID3D11VideoProcessorOutputView_SetPrivateDataInterface(ID3D11VideoProcessorOutputView* This,REFGUID guid,const IUnknown *pData) {
+    return This->lpVtbl->SetPrivateDataInterface(This,guid,pData);
+}
+/*** ID3D11View methods ***/
+static FORCEINLINE void ID3D11VideoProcessorOutputView_GetResource(ID3D11VideoProcessorOutputView* This,ID3D11Resource **ppResource) {
+    This->lpVtbl->GetResource(This,ppResource);
+}
+/*** ID3D11VideoProcessorOutputView methods ***/
+static FORCEINLINE void ID3D11VideoProcessorOutputView_GetDesc(ID3D11VideoProcessorOutputView* This,D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC *pDesc) {
+    This->lpVtbl->GetDesc(This,pDesc);
+}
+#endif
+#endif
+
+#endif
+
+void STDMETHODCALLTYPE ID3D11VideoProcessorOutputView_GetDesc_Proxy(
+    ID3D11VideoProcessorOutputView* This,
+    D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC *pDesc);
+void __RPC_STUB ID3D11VideoProcessorOutputView_GetDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ID3D11VideoProcessorOutputView_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D11VideoDevice interface
+ */
+#ifndef __ID3D11VideoDevice_INTERFACE_DEFINED__
+#define __ID3D11VideoDevice_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D11VideoDevice, 0x10ec4d5b, 0x975a, 0x4689, 0xb9,0xe4, 0xd0,0xaa,0xc3,0x0f,0xe3,0x33);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("10ec4d5b-975a-4689-b9e4-d0aac30fe333")
+ID3D11VideoDevice : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateVideoDecoder(
+        const D3D11_VIDEO_DECODER_DESC *pVideoDesc,
+        const D3D11_VIDEO_DECODER_CONFIG *pConfig,
+        ID3D11VideoDecoder **ppDecoder) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateVideoProcessor(
+        ID3D11VideoProcessorEnumerator *pEnum,
+        UINT RateConversionIndex,
+        ID3D11VideoProcessor **ppVideoProcessor) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateAuthenticatedChannel(
+        D3D11_AUTHENTICATED_CHANNEL_TYPE ChannelType,
+        ID3D11AuthenticatedChannel **ppAuthenticatedChannel) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateCryptoSession(
+        const GUID *pCryptoType,
+        const GUID *pDecoderProfile,
+        const GUID *pKeyExchangeType,
+        ID3D11CryptoSession **ppCryptoSession) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateVideoDecoderOutputView(
+        ID3D11Resource *pResource,
+        const D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC *pDesc,
+        ID3D11VideoDecoderOutputView **ppVDOVView) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateVideoProcessorInputView(
+        ID3D11Resource *pResource,
+        ID3D11VideoProcessorEnumerator *pEnum,
+        const D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC *pDesc,
+        ID3D11VideoProcessorInputView **ppVPIView) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateVideoProcessorOutputView(
+        ID3D11Resource *pResource,
+        ID3D11VideoProcessorEnumerator *pEnum,
+        const D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC *pDesc,
+        ID3D11VideoProcessorOutputView **ppVPOView) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateVideoProcessorEnumerator(
+        const D3D11_VIDEO_PROCESSOR_CONTENT_DESC *pDesc,
+        ID3D11VideoProcessorEnumerator **ppEnum) = 0;
+
+    virtual UINT STDMETHODCALLTYPE GetVideoDecoderProfileCount(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVideoDecoderProfile(
+        UINT Index,
+        GUID *pDecoderProfile) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CheckVideoDecoderFormat(
+        const GUID *pDecoderProfile,
+        DXGI_FORMAT Format,
+        WINBOOL *pSupported) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVideoDecoderConfigCount(
+        const D3D11_VIDEO_DECODER_DESC *pDesc,
+        UINT *pCount) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVideoDecoderConfig(
+        const D3D11_VIDEO_DECODER_DESC *pDesc,
+        UINT Index,
+        D3D11_VIDEO_DECODER_CONFIG *pConfig) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetContentProtectionCaps(
+        const GUID *pCryptoType,
+        const GUID *pDecoderProfile,
+        D3D11_VIDEO_CONTENT_PROTECTION_CAPS *pCaps) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CheckCryptoKeyExchange(
+        const GUID *pCryptoType,
+        const GUID *pDecoderProfile,
+        UINT Index,
+        GUID *pKeyExchangeType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPrivateData(
+        REFGUID guid,
+        UINT DataSize,
+        const void *pData) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPrivateDataInterface(
+        REFGUID guid,
+        const IUnknown *pData) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D11VideoDevice, 0x10ec4d5b, 0x975a, 0x4689, 0xb9,0xe4, 0xd0,0xaa,0xc3,0x0f,0xe3,0x33)
+#endif
+#else
+typedef struct ID3D11VideoDeviceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D11VideoDevice* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D11VideoDevice* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D11VideoDevice* This);
+
+    /*** ID3D11VideoDevice methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateVideoDecoder)(
+        ID3D11VideoDevice* This,
+        const D3D11_VIDEO_DECODER_DESC *pVideoDesc,
+        const D3D11_VIDEO_DECODER_CONFIG *pConfig,
+        ID3D11VideoDecoder **ppDecoder);
+
+    HRESULT (STDMETHODCALLTYPE *CreateVideoProcessor)(
+        ID3D11VideoDevice* This,
+        ID3D11VideoProcessorEnumerator *pEnum,
+        UINT RateConversionIndex,
+        ID3D11VideoProcessor **ppVideoProcessor);
+
+    HRESULT (STDMETHODCALLTYPE *CreateAuthenticatedChannel)(
+        ID3D11VideoDevice* This,
+        D3D11_AUTHENTICATED_CHANNEL_TYPE ChannelType,
+        ID3D11AuthenticatedChannel **ppAuthenticatedChannel);
+
+    HRESULT (STDMETHODCALLTYPE *CreateCryptoSession)(
+        ID3D11VideoDevice* This,
+        const GUID *pCryptoType,
+        const GUID *pDecoderProfile,
+        const GUID *pKeyExchangeType,
+        ID3D11CryptoSession **ppCryptoSession);
+
+    HRESULT (STDMETHODCALLTYPE *CreateVideoDecoderOutputView)(
+        ID3D11VideoDevice* This,
+        ID3D11Resource *pResource,
+        const D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC *pDesc,
+        ID3D11VideoDecoderOutputView **ppVDOVView);
+
+    HRESULT (STDMETHODCALLTYPE *CreateVideoProcessorInputView)(
+        ID3D11VideoDevice* This,
+        ID3D11Resource *pResource,
+        ID3D11VideoProcessorEnumerator *pEnum,
+        const D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC *pDesc,
+        ID3D11VideoProcessorInputView **ppVPIView);
+
+    HRESULT (STDMETHODCALLTYPE *CreateVideoProcessorOutputView)(
+        ID3D11VideoDevice* This,
+        ID3D11Resource *pResource,
+        ID3D11VideoProcessorEnumerator *pEnum,
+        const D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC *pDesc,
+        ID3D11VideoProcessorOutputView **ppVPOView);
+
+    HRESULT (STDMETHODCALLTYPE *CreateVideoProcessorEnumerator)(
+        ID3D11VideoDevice* This,
+        const D3D11_VIDEO_PROCESSOR_CONTENT_DESC *pDesc,
+        ID3D11VideoProcessorEnumerator **ppEnum);
+
+    UINT (STDMETHODCALLTYPE *GetVideoDecoderProfileCount)(
+        ID3D11VideoDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetVideoDecoderProfile)(
+        ID3D11VideoDevice* This,
+        UINT Index,
+        GUID *pDecoderProfile);
+
+    HRESULT (STDMETHODCALLTYPE *CheckVideoDecoderFormat)(
+        ID3D11VideoDevice* This,
+        const GUID *pDecoderProfile,
+        DXGI_FORMAT Format,
+        WINBOOL *pSupported);
+
+    HRESULT (STDMETHODCALLTYPE *GetVideoDecoderConfigCount)(
+        ID3D11VideoDevice* This,
+        const D3D11_VIDEO_DECODER_DESC *pDesc,
+        UINT *pCount);
+
+    HRESULT (STDMETHODCALLTYPE *GetVideoDecoderConfig)(
+        ID3D11VideoDevice* This,
+        const D3D11_VIDEO_DECODER_DESC *pDesc,
+        UINT Index,
+        D3D11_VIDEO_DECODER_CONFIG *pConfig);
+
+    HRESULT (STDMETHODCALLTYPE *GetContentProtectionCaps)(
+        ID3D11VideoDevice* This,
+        const GUID *pCryptoType,
+        const GUID *pDecoderProfile,
+        D3D11_VIDEO_CONTENT_PROTECTION_CAPS *pCaps);
+
+    HRESULT (STDMETHODCALLTYPE *CheckCryptoKeyExchange)(
+        ID3D11VideoDevice* This,
+        const GUID *pCryptoType,
+        const GUID *pDecoderProfile,
+        UINT Index,
+        GUID *pKeyExchangeType);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        ID3D11VideoDevice* This,
+        REFGUID guid,
+        UINT DataSize,
+        const void *pData);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
+        ID3D11VideoDevice* This,
+        REFGUID guid,
+        const IUnknown *pData);
+
+    END_INTERFACE
+} ID3D11VideoDeviceVtbl;
+interface ID3D11VideoDevice {
+    CONST_VTBL ID3D11VideoDeviceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D11VideoDevice_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D11VideoDevice_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D11VideoDevice_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D11VideoDevice methods ***/
+#define ID3D11VideoDevice_CreateVideoDecoder(This,pVideoDesc,pConfig,ppDecoder) (This)->lpVtbl->CreateVideoDecoder(This,pVideoDesc,pConfig,ppDecoder)
+#define ID3D11VideoDevice_CreateVideoProcessor(This,pEnum,RateConversionIndex,ppVideoProcessor) (This)->lpVtbl->CreateVideoProcessor(This,pEnum,RateConversionIndex,ppVideoProcessor)
+#define ID3D11VideoDevice_CreateAuthenticatedChannel(This,ChannelType,ppAuthenticatedChannel) (This)->lpVtbl->CreateAuthenticatedChannel(This,ChannelType,ppAuthenticatedChannel)
+#define ID3D11VideoDevice_CreateCryptoSession(This,pCryptoType,pDecoderProfile,pKeyExchangeType,ppCryptoSession) (This)->lpVtbl->CreateCryptoSession(This,pCryptoType,pDecoderProfile,pKeyExchangeType,ppCryptoSession)
+#define ID3D11VideoDevice_CreateVideoDecoderOutputView(This,pResource,pDesc,ppVDOVView) (This)->lpVtbl->CreateVideoDecoderOutputView(This,pResource,pDesc,ppVDOVView)
+#define ID3D11VideoDevice_CreateVideoProcessorInputView(This,pResource,pEnum,pDesc,ppVPIView) (This)->lpVtbl->CreateVideoProcessorInputView(This,pResource,pEnum,pDesc,ppVPIView)
+#define ID3D11VideoDevice_CreateVideoProcessorOutputView(This,pResource,pEnum,pDesc,ppVPOView) (This)->lpVtbl->CreateVideoProcessorOutputView(This,pResource,pEnum,pDesc,ppVPOView)
+#define ID3D11VideoDevice_CreateVideoProcessorEnumerator(This,pDesc,ppEnum) (This)->lpVtbl->CreateVideoProcessorEnumerator(This,pDesc,ppEnum)
+#define ID3D11VideoDevice_GetVideoDecoderProfileCount(This) (This)->lpVtbl->GetVideoDecoderProfileCount(This)
+#define ID3D11VideoDevice_GetVideoDecoderProfile(This,Index,pDecoderProfile) (This)->lpVtbl->GetVideoDecoderProfile(This,Index,pDecoderProfile)
+#define ID3D11VideoDevice_CheckVideoDecoderFormat(This,pDecoderProfile,Format,pSupported) (This)->lpVtbl->CheckVideoDecoderFormat(This,pDecoderProfile,Format,pSupported)
+#define ID3D11VideoDevice_GetVideoDecoderConfigCount(This,pDesc,pCount) (This)->lpVtbl->GetVideoDecoderConfigCount(This,pDesc,pCount)
+#define ID3D11VideoDevice_GetVideoDecoderConfig(This,pDesc,Index,pConfig) (This)->lpVtbl->GetVideoDecoderConfig(This,pDesc,Index,pConfig)
+#define ID3D11VideoDevice_GetContentProtectionCaps(This,pCryptoType,pDecoderProfile,pCaps) (This)->lpVtbl->GetContentProtectionCaps(This,pCryptoType,pDecoderProfile,pCaps)
+#define ID3D11VideoDevice_CheckCryptoKeyExchange(This,pCryptoType,pDecoderProfile,Index,pKeyExchangeType) (This)->lpVtbl->CheckCryptoKeyExchange(This,pCryptoType,pDecoderProfile,Index,pKeyExchangeType)
+#define ID3D11VideoDevice_SetPrivateData(This,guid,DataSize,pData) (This)->lpVtbl->SetPrivateData(This,guid,DataSize,pData)
+#define ID3D11VideoDevice_SetPrivateDataInterface(This,guid,pData) (This)->lpVtbl->SetPrivateDataInterface(This,guid,pData)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ID3D11VideoDevice_QueryInterface(ID3D11VideoDevice* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ID3D11VideoDevice_AddRef(ID3D11VideoDevice* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ID3D11VideoDevice_Release(ID3D11VideoDevice* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D11VideoDevice methods ***/
+static FORCEINLINE HRESULT ID3D11VideoDevice_CreateVideoDecoder(ID3D11VideoDevice* This,const D3D11_VIDEO_DECODER_DESC *pVideoDesc,const D3D11_VIDEO_DECODER_CONFIG *pConfig,ID3D11VideoDecoder **ppDecoder) {
+    return This->lpVtbl->CreateVideoDecoder(This,pVideoDesc,pConfig,ppDecoder);
+}
+static FORCEINLINE HRESULT ID3D11VideoDevice_CreateVideoProcessor(ID3D11VideoDevice* This,ID3D11VideoProcessorEnumerator *pEnum,UINT RateConversionIndex,ID3D11VideoProcessor **ppVideoProcessor) {
+    return This->lpVtbl->CreateVideoProcessor(This,pEnum,RateConversionIndex,ppVideoProcessor);
+}
+static FORCEINLINE HRESULT ID3D11VideoDevice_CreateAuthenticatedChannel(ID3D11VideoDevice* This,D3D11_AUTHENTICATED_CHANNEL_TYPE ChannelType,ID3D11AuthenticatedChannel **ppAuthenticatedChannel) {
+    return This->lpVtbl->CreateAuthenticatedChannel(This,ChannelType,ppAuthenticatedChannel);
+}
+static FORCEINLINE HRESULT ID3D11VideoDevice_CreateCryptoSession(ID3D11VideoDevice* This,const GUID *pCryptoType,const GUID *pDecoderProfile,const GUID *pKeyExchangeType,ID3D11CryptoSession **ppCryptoSession) {
+    return This->lpVtbl->CreateCryptoSession(This,pCryptoType,pDecoderProfile,pKeyExchangeType,ppCryptoSession);
+}
+static FORCEINLINE HRESULT ID3D11VideoDevice_CreateVideoDecoderOutputView(ID3D11VideoDevice* This,ID3D11Resource *pResource,const D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC *pDesc,ID3D11VideoDecoderOutputView **ppVDOVView) {
+    return This->lpVtbl->CreateVideoDecoderOutputView(This,pResource,pDesc,ppVDOVView);
+}
+static FORCEINLINE HRESULT ID3D11VideoDevice_CreateVideoProcessorInputView(ID3D11VideoDevice* This,ID3D11Resource *pResource,ID3D11VideoProcessorEnumerator *pEnum,const D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC *pDesc,ID3D11VideoProcessorInputView **ppVPIView) {
+    return This->lpVtbl->CreateVideoProcessorInputView(This,pResource,pEnum,pDesc,ppVPIView);
+}
+static FORCEINLINE HRESULT ID3D11VideoDevice_CreateVideoProcessorOutputView(ID3D11VideoDevice* This,ID3D11Resource *pResource,ID3D11VideoProcessorEnumerator *pEnum,const D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC *pDesc,ID3D11VideoProcessorOutputView **ppVPOView) {
+    return This->lpVtbl->CreateVideoProcessorOutputView(This,pResource,pEnum,pDesc,ppVPOView);
+}
+static FORCEINLINE HRESULT ID3D11VideoDevice_CreateVideoProcessorEnumerator(ID3D11VideoDevice* This,const D3D11_VIDEO_PROCESSOR_CONTENT_DESC *pDesc,ID3D11VideoProcessorEnumerator **ppEnum) {
+    return This->lpVtbl->CreateVideoProcessorEnumerator(This,pDesc,ppEnum);
+}
+static FORCEINLINE UINT ID3D11VideoDevice_GetVideoDecoderProfileCount(ID3D11VideoDevice* This) {
+    return This->lpVtbl->GetVideoDecoderProfileCount(This);
+}
+static FORCEINLINE HRESULT ID3D11VideoDevice_GetVideoDecoderProfile(ID3D11VideoDevice* This,UINT Index,GUID *pDecoderProfile) {
+    return This->lpVtbl->GetVideoDecoderProfile(This,Index,pDecoderProfile);
+}
+static FORCEINLINE HRESULT ID3D11VideoDevice_CheckVideoDecoderFormat(ID3D11VideoDevice* This,const GUID *pDecoderProfile,DXGI_FORMAT Format,WINBOOL *pSupported) {
+    return This->lpVtbl->CheckVideoDecoderFormat(This,pDecoderProfile,Format,pSupported);
+}
+static FORCEINLINE HRESULT ID3D11VideoDevice_GetVideoDecoderConfigCount(ID3D11VideoDevice* This,const D3D11_VIDEO_DECODER_DESC *pDesc,UINT *pCount) {
+    return This->lpVtbl->GetVideoDecoderConfigCount(This,pDesc,pCount);
+}
+static FORCEINLINE HRESULT ID3D11VideoDevice_GetVideoDecoderConfig(ID3D11VideoDevice* This,const D3D11_VIDEO_DECODER_DESC *pDesc,UINT Index,D3D11_VIDEO_DECODER_CONFIG *pConfig) {
+    return This->lpVtbl->GetVideoDecoderConfig(This,pDesc,Index,pConfig);
+}
+static FORCEINLINE HRESULT ID3D11VideoDevice_GetContentProtectionCaps(ID3D11VideoDevice* This,const GUID *pCryptoType,const GUID *pDecoderProfile,D3D11_VIDEO_CONTENT_PROTECTION_CAPS *pCaps) {
+    return This->lpVtbl->GetContentProtectionCaps(This,pCryptoType,pDecoderProfile,pCaps);
+}
+static FORCEINLINE HRESULT ID3D11VideoDevice_CheckCryptoKeyExchange(ID3D11VideoDevice* This,const GUID *pCryptoType,const GUID *pDecoderProfile,UINT Index,GUID *pKeyExchangeType) {
+    return This->lpVtbl->CheckCryptoKeyExchange(This,pCryptoType,pDecoderProfile,Index,pKeyExchangeType);
+}
+static FORCEINLINE HRESULT ID3D11VideoDevice_SetPrivateData(ID3D11VideoDevice* This,REFGUID guid,UINT DataSize,const void *pData) {
+    return This->lpVtbl->SetPrivateData(This,guid,DataSize,pData);
+}
+static FORCEINLINE HRESULT ID3D11VideoDevice_SetPrivateDataInterface(ID3D11VideoDevice* This,REFGUID guid,const IUnknown *pData) {
+    return This->lpVtbl->SetPrivateDataInterface(This,guid,pData);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ID3D11VideoDevice_CreateVideoDecoder_Proxy(
+    ID3D11VideoDevice* This,
+    const D3D11_VIDEO_DECODER_DESC *pVideoDesc,
+    const D3D11_VIDEO_DECODER_CONFIG *pConfig,
+    ID3D11VideoDecoder **ppDecoder);
+void __RPC_STUB ID3D11VideoDevice_CreateVideoDecoder_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoDevice_CreateVideoProcessor_Proxy(
+    ID3D11VideoDevice* This,
+    ID3D11VideoProcessorEnumerator *pEnum,
+    UINT RateConversionIndex,
+    ID3D11VideoProcessor **ppVideoProcessor);
+void __RPC_STUB ID3D11VideoDevice_CreateVideoProcessor_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoDevice_CreateAuthenticatedChannel_Proxy(
+    ID3D11VideoDevice* This,
+    D3D11_AUTHENTICATED_CHANNEL_TYPE ChannelType,
+    ID3D11AuthenticatedChannel **ppAuthenticatedChannel);
+void __RPC_STUB ID3D11VideoDevice_CreateAuthenticatedChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoDevice_CreateCryptoSession_Proxy(
+    ID3D11VideoDevice* This,
+    const GUID *pCryptoType,
+    const GUID *pDecoderProfile,
+    const GUID *pKeyExchangeType,
+    ID3D11CryptoSession **ppCryptoSession);
+void __RPC_STUB ID3D11VideoDevice_CreateCryptoSession_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoDevice_CreateVideoDecoderOutputView_Proxy(
+    ID3D11VideoDevice* This,
+    ID3D11Resource *pResource,
+    const D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC *pDesc,
+    ID3D11VideoDecoderOutputView **ppVDOVView);
+void __RPC_STUB ID3D11VideoDevice_CreateVideoDecoderOutputView_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoDevice_CreateVideoProcessorInputView_Proxy(
+    ID3D11VideoDevice* This,
+    ID3D11Resource *pResource,
+    ID3D11VideoProcessorEnumerator *pEnum,
+    const D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC *pDesc,
+    ID3D11VideoProcessorInputView **ppVPIView);
+void __RPC_STUB ID3D11VideoDevice_CreateVideoProcessorInputView_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoDevice_CreateVideoProcessorOutputView_Proxy(
+    ID3D11VideoDevice* This,
+    ID3D11Resource *pResource,
+    ID3D11VideoProcessorEnumerator *pEnum,
+    const D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC *pDesc,
+    ID3D11VideoProcessorOutputView **ppVPOView);
+void __RPC_STUB ID3D11VideoDevice_CreateVideoProcessorOutputView_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoDevice_CreateVideoProcessorEnumerator_Proxy(
+    ID3D11VideoDevice* This,
+    const D3D11_VIDEO_PROCESSOR_CONTENT_DESC *pDesc,
+    ID3D11VideoProcessorEnumerator **ppEnum);
+void __RPC_STUB ID3D11VideoDevice_CreateVideoProcessorEnumerator_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+UINT STDMETHODCALLTYPE ID3D11VideoDevice_GetVideoDecoderProfileCount_Proxy(
+    ID3D11VideoDevice* This);
+void __RPC_STUB ID3D11VideoDevice_GetVideoDecoderProfileCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoDevice_GetVideoDecoderProfile_Proxy(
+    ID3D11VideoDevice* This,
+    UINT Index,
+    GUID *pDecoderProfile);
+void __RPC_STUB ID3D11VideoDevice_GetVideoDecoderProfile_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoDevice_CheckVideoDecoderFormat_Proxy(
+    ID3D11VideoDevice* This,
+    const GUID *pDecoderProfile,
+    DXGI_FORMAT Format,
+    WINBOOL *pSupported);
+void __RPC_STUB ID3D11VideoDevice_CheckVideoDecoderFormat_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoDevice_GetVideoDecoderConfigCount_Proxy(
+    ID3D11VideoDevice* This,
+    const D3D11_VIDEO_DECODER_DESC *pDesc,
+    UINT *pCount);
+void __RPC_STUB ID3D11VideoDevice_GetVideoDecoderConfigCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoDevice_GetVideoDecoderConfig_Proxy(
+    ID3D11VideoDevice* This,
+    const D3D11_VIDEO_DECODER_DESC *pDesc,
+    UINT Index,
+    D3D11_VIDEO_DECODER_CONFIG *pConfig);
+void __RPC_STUB ID3D11VideoDevice_GetVideoDecoderConfig_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoDevice_GetContentProtectionCaps_Proxy(
+    ID3D11VideoDevice* This,
+    const GUID *pCryptoType,
+    const GUID *pDecoderProfile,
+    D3D11_VIDEO_CONTENT_PROTECTION_CAPS *pCaps);
+void __RPC_STUB ID3D11VideoDevice_GetContentProtectionCaps_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoDevice_CheckCryptoKeyExchange_Proxy(
+    ID3D11VideoDevice* This,
+    const GUID *pCryptoType,
+    const GUID *pDecoderProfile,
+    UINT Index,
+    GUID *pKeyExchangeType);
+void __RPC_STUB ID3D11VideoDevice_CheckCryptoKeyExchange_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoDevice_SetPrivateData_Proxy(
+    ID3D11VideoDevice* This,
+    REFGUID guid,
+    UINT DataSize,
+    const void *pData);
+void __RPC_STUB ID3D11VideoDevice_SetPrivateData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoDevice_SetPrivateDataInterface_Proxy(
+    ID3D11VideoDevice* This,
+    REFGUID guid,
+    const IUnknown *pData);
+void __RPC_STUB ID3D11VideoDevice_SetPrivateDataInterface_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ID3D11VideoDevice_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D11VideoContext interface
+ */
+#ifndef __ID3D11VideoContext_INTERFACE_DEFINED__
+#define __ID3D11VideoContext_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D11VideoContext, 0x61f21c45, 0x3c0e, 0x4a74, 0x9c,0xea, 0x67,0x10,0x0d,0x9a,0xd5,0xe4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("61f21c45-3c0e-4a74-9cea-67100d9ad5e4")
+ID3D11VideoContext : public ID3D11DeviceChild
+{
+    virtual HRESULT STDMETHODCALLTYPE GetDecoderBuffer(
+        ID3D11VideoDecoder *decoder,
+        D3D11_VIDEO_DECODER_BUFFER_TYPE type,
+        UINT *buffer_size,
+        void **buffer) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ReleaseDecoderBuffer(
+        ID3D11VideoDecoder *decoder,
+        D3D11_VIDEO_DECODER_BUFFER_TYPE type) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DecoderBeginFrame(
+        ID3D11VideoDecoder *decoder,
+        ID3D11VideoDecoderOutputView *view,
+        UINT key_size,
+        const void *key) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DecoderEndFrame(
+        ID3D11VideoDecoder *decoder) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SubmitDecoderBuffers(
+        ID3D11VideoDecoder *decoder,
+        UINT buffers_count,
+        const D3D11_VIDEO_DECODER_BUFFER_DESC *buffer_desc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DecoderExtension(
+        ID3D11VideoDecoder *decoder,
+        const D3D11_VIDEO_DECODER_EXTENSION *extension) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorSetOutputTargetRect(
+        ID3D11VideoProcessor *processor,
+        WINBOOL enable,
+        const RECT *rect) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorSetOutputBackgroundColor(
+        ID3D11VideoProcessor *processor,
+        WINBOOL y_cb_cr,
+        const D3D11_VIDEO_COLOR *color) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorSetOutputColorSpace(
+        ID3D11VideoProcessor *processor,
+        const D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorSetOutputAlphaFillMode(
+        ID3D11VideoProcessor *processor,
+        D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE alpha_fill_mode,
+        UINT stream_idx) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorSetOutputConstriction(
+        ID3D11VideoProcessor *processor,
+        WINBOOL enable,
+        SIZE size) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorSetOutputStereoMode(
+        ID3D11VideoProcessor *processor,
+        WINBOOL enable) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE VideoProcessorSetOutputExtension(
+        ID3D11VideoProcessor *processor,
+        const GUID *guid,
+        UINT data_size,
+        void *data) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorGetOutputTargetRect(
+        ID3D11VideoProcessor *processor,
+        WINBOOL *enabled,
+        RECT *rect) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorGetOutputBackgroundColor(
+        ID3D11VideoProcessor *processor,
+        WINBOOL *y_cb_cr,
+        D3D11_VIDEO_COLOR *color) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorGetOutputColorSpace(
+        ID3D11VideoProcessor *processor,
+        D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorGetOutputAlphaFillMode(
+        ID3D11VideoProcessor *processor,
+        D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE *alpha_fill_mode,
+        UINT *stream_idx) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorGetOutputConstriction(
+        ID3D11VideoProcessor *processor,
+        WINBOOL *enabled,
+        SIZE *size) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorGetOutputStereoMode(
+        ID3D11VideoProcessor *processor,
+        WINBOOL *enabled) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE VideoProcessorGetOutputExtension(
+        ID3D11VideoProcessor *processor,
+        const GUID *guid,
+        UINT data_size,
+        void *data) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorSetStreamFrameFormat(
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        D3D11_VIDEO_FRAME_FORMAT format) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorSetStreamColorSpace(
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        const D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorSetStreamOutputRate(
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        D3D11_VIDEO_PROCESSOR_OUTPUT_RATE rate,
+        WINBOOL repeat,
+        const DXGI_RATIONAL *custom_rate) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorSetStreamSourceRect(
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL enable,
+        const RECT *rect) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorSetStreamDestRect(
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL enable,
+        const RECT *rect) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorSetStreamAlpha(
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL enable,
+        float alpha) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorSetStreamPalette(
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        UINT entry_count,
+        const UINT *entries) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorSetStreamPixelAspectRatio(
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL enable,
+        const DXGI_RATIONAL *src_aspect_ratio,
+        const DXGI_RATIONAL *dst_aspect_ratio) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorSetStreamLumaKey(
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL enable,
+        float lower,
+        float upper) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorSetStreamStereoFormat(
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL enable,
+        D3D11_VIDEO_PROCESSOR_STEREO_FORMAT format,
+        WINBOOL left_view_frame0,
+        WINBOOL base_view_frame0,
+        D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE flip_mode,
+        int mono_offset) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorSetStreamAutoProcessingMode(
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL enable) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorSetStreamFilter(
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        D3D11_VIDEO_PROCESSOR_FILTER filter,
+        WINBOOL enable,
+        int level) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE VideoProcessorSetStreamExtension(
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        const GUID *guid,
+        UINT data_size,
+        void *data) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorGetStreamFrameFormat(
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        D3D11_VIDEO_FRAME_FORMAT *format) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorGetStreamColorSpace(
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorGetStreamOutputRate(
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        D3D11_VIDEO_PROCESSOR_OUTPUT_RATE *rate,
+        WINBOOL *repeat,
+        DXGI_RATIONAL *custom_rate) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorGetStreamSourceRect(
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL *enabled,
+        RECT *rect) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorGetStreamDestRect(
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL *enabled,
+        RECT *rect) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorGetStreamAlpha(
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL *enabled,
+        float *alpha) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorGetStreamPalette(
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        UINT entry_count,
+        UINT *entries) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorGetStreamPixelAspectRatio(
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL *enabled,
+        DXGI_RATIONAL *src_aspect_ratio,
+        DXGI_RATIONAL *dst_aspect_ratio) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorGetStreamLumaKey(
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL *enabled,
+        float *lower,
+        float *upper) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorGetStreamStereoFormat(
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL *enabled,
+        D3D11_VIDEO_PROCESSOR_STEREO_FORMAT *format,
+        WINBOOL *left_view_frame0,
+        WINBOOL *base_view_frame0,
+        D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE *flip_mode,
+        int *mono_offset) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorGetStreamAutoProcessingMode(
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL *enabled) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorGetStreamFilter(
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        D3D11_VIDEO_PROCESSOR_FILTER filter,
+        WINBOOL *enabled,
+        int *level) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE VideoProcessorGetStreamExtension(
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        const GUID *guid,
+        UINT data_size,
+        void *data) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE VideoProcessorBlt(
+        ID3D11VideoProcessor *processor,
+        ID3D11VideoProcessorOutputView *view,
+        UINT frame_idx,
+        UINT stream_count,
+        const D3D11_VIDEO_PROCESSOR_STREAM *streams) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE NegotiateCryptoSessionKeyExchange(
+        ID3D11CryptoSession *session,
+        UINT data_size,
+        void *data) = 0;
+
+    virtual void STDMETHODCALLTYPE EncryptionBlt(
+        ID3D11CryptoSession *session,
+        ID3D11Texture2D *src_surface,
+        ID3D11Texture2D *dst_surface,
+        UINT iv_size,
+        void *iv) = 0;
+
+    virtual void STDMETHODCALLTYPE DecryptionBlt(
+        ID3D11CryptoSession *session,
+        ID3D11Texture2D *src_surface,
+        ID3D11Texture2D *dst_surface,
+        D3D11_ENCRYPTED_BLOCK_INFO *block_info,
+        UINT key_size,
+        const void *key,
+        UINT iv_size,
+        void *iv) = 0;
+
+    virtual void STDMETHODCALLTYPE StartSessionKeyRefresh(
+        ID3D11CryptoSession *session,
+        UINT random_number_size,
+        void *random_number) = 0;
+
+    virtual void STDMETHODCALLTYPE FinishSessionKeyRefresh(
+        ID3D11CryptoSession *session) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetEncryptionBltKey(
+        ID3D11CryptoSession *session,
+        UINT key_size,
+        void *key) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE NegotiateAuthenticatedChannelKeyExchange(
+        ID3D11AuthenticatedChannel *channel,
+        UINT data_size,
+        void *data) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE QueryAuthenticatedChannel(
+        ID3D11AuthenticatedChannel *channel,
+        UINT input_size,
+        const void *input,
+        UINT output_size,
+        void *output) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ConfigureAuthenticatedChannel(
+        ID3D11AuthenticatedChannel *channel,
+        UINT input_size,
+        const void *input,
+        D3D11_AUTHENTICATED_CONFIGURE_OUTPUT *output) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorSetStreamRotation(
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL enable,
+        D3D11_VIDEO_PROCESSOR_ROTATION rotation) = 0;
+
+    virtual void STDMETHODCALLTYPE VideoProcessorGetStreamRotation(
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL *enable,
+        D3D11_VIDEO_PROCESSOR_ROTATION *rotation) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D11VideoContext, 0x61f21c45, 0x3c0e, 0x4a74, 0x9c,0xea, 0x67,0x10,0x0d,0x9a,0xd5,0xe4)
+#endif
+#else
+typedef struct ID3D11VideoContextVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D11VideoContext* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D11VideoContext* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D11VideoContext* This);
+
+    /*** ID3D11DeviceChild methods ***/
+    void (STDMETHODCALLTYPE *GetDevice)(
+        ID3D11VideoContext* This,
+        ID3D11Device **ppDevice);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        ID3D11VideoContext* This,
+        REFGUID guid,
+        UINT *pDataSize,
+        void *pData);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        ID3D11VideoContext* This,
+        REFGUID guid,
+        UINT DataSize,
+        const void *pData);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
+        ID3D11VideoContext* This,
+        REFGUID guid,
+        const IUnknown *pData);
+
+    /*** ID3D11VideoContext methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDecoderBuffer)(
+        ID3D11VideoContext* This,
+        ID3D11VideoDecoder *decoder,
+        D3D11_VIDEO_DECODER_BUFFER_TYPE type,
+        UINT *buffer_size,
+        void **buffer);
+
+    HRESULT (STDMETHODCALLTYPE *ReleaseDecoderBuffer)(
+        ID3D11VideoContext* This,
+        ID3D11VideoDecoder *decoder,
+        D3D11_VIDEO_DECODER_BUFFER_TYPE type);
+
+    HRESULT (STDMETHODCALLTYPE *DecoderBeginFrame)(
+        ID3D11VideoContext* This,
+        ID3D11VideoDecoder *decoder,
+        ID3D11VideoDecoderOutputView *view,
+        UINT key_size,
+        const void *key);
+
+    HRESULT (STDMETHODCALLTYPE *DecoderEndFrame)(
+        ID3D11VideoContext* This,
+        ID3D11VideoDecoder *decoder);
+
+    HRESULT (STDMETHODCALLTYPE *SubmitDecoderBuffers)(
+        ID3D11VideoContext* This,
+        ID3D11VideoDecoder *decoder,
+        UINT buffers_count,
+        const D3D11_VIDEO_DECODER_BUFFER_DESC *buffer_desc);
+
+    HRESULT (STDMETHODCALLTYPE *DecoderExtension)(
+        ID3D11VideoContext* This,
+        ID3D11VideoDecoder *decoder,
+        const D3D11_VIDEO_DECODER_EXTENSION *extension);
+
+    void (STDMETHODCALLTYPE *VideoProcessorSetOutputTargetRect)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        WINBOOL enable,
+        const RECT *rect);
+
+    void (STDMETHODCALLTYPE *VideoProcessorSetOutputBackgroundColor)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        WINBOOL y_cb_cr,
+        const D3D11_VIDEO_COLOR *color);
+
+    void (STDMETHODCALLTYPE *VideoProcessorSetOutputColorSpace)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        const D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space);
+
+    void (STDMETHODCALLTYPE *VideoProcessorSetOutputAlphaFillMode)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE alpha_fill_mode,
+        UINT stream_idx);
+
+    void (STDMETHODCALLTYPE *VideoProcessorSetOutputConstriction)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        WINBOOL enable,
+        SIZE size);
+
+    void (STDMETHODCALLTYPE *VideoProcessorSetOutputStereoMode)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        WINBOOL enable);
+
+    HRESULT (STDMETHODCALLTYPE *VideoProcessorSetOutputExtension)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        const GUID *guid,
+        UINT data_size,
+        void *data);
+
+    void (STDMETHODCALLTYPE *VideoProcessorGetOutputTargetRect)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        WINBOOL *enabled,
+        RECT *rect);
+
+    void (STDMETHODCALLTYPE *VideoProcessorGetOutputBackgroundColor)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        WINBOOL *y_cb_cr,
+        D3D11_VIDEO_COLOR *color);
+
+    void (STDMETHODCALLTYPE *VideoProcessorGetOutputColorSpace)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space);
+
+    void (STDMETHODCALLTYPE *VideoProcessorGetOutputAlphaFillMode)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE *alpha_fill_mode,
+        UINT *stream_idx);
+
+    void (STDMETHODCALLTYPE *VideoProcessorGetOutputConstriction)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        WINBOOL *enabled,
+        SIZE *size);
+
+    void (STDMETHODCALLTYPE *VideoProcessorGetOutputStereoMode)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        WINBOOL *enabled);
+
+    HRESULT (STDMETHODCALLTYPE *VideoProcessorGetOutputExtension)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        const GUID *guid,
+        UINT data_size,
+        void *data);
+
+    void (STDMETHODCALLTYPE *VideoProcessorSetStreamFrameFormat)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        D3D11_VIDEO_FRAME_FORMAT format);
+
+    void (STDMETHODCALLTYPE *VideoProcessorSetStreamColorSpace)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        const D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space);
+
+    void (STDMETHODCALLTYPE *VideoProcessorSetStreamOutputRate)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        D3D11_VIDEO_PROCESSOR_OUTPUT_RATE rate,
+        WINBOOL repeat,
+        const DXGI_RATIONAL *custom_rate);
+
+    void (STDMETHODCALLTYPE *VideoProcessorSetStreamSourceRect)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL enable,
+        const RECT *rect);
+
+    void (STDMETHODCALLTYPE *VideoProcessorSetStreamDestRect)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL enable,
+        const RECT *rect);
+
+    void (STDMETHODCALLTYPE *VideoProcessorSetStreamAlpha)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL enable,
+        float alpha);
+
+    void (STDMETHODCALLTYPE *VideoProcessorSetStreamPalette)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        UINT entry_count,
+        const UINT *entries);
+
+    void (STDMETHODCALLTYPE *VideoProcessorSetStreamPixelAspectRatio)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL enable,
+        const DXGI_RATIONAL *src_aspect_ratio,
+        const DXGI_RATIONAL *dst_aspect_ratio);
+
+    void (STDMETHODCALLTYPE *VideoProcessorSetStreamLumaKey)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL enable,
+        float lower,
+        float upper);
+
+    void (STDMETHODCALLTYPE *VideoProcessorSetStreamStereoFormat)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL enable,
+        D3D11_VIDEO_PROCESSOR_STEREO_FORMAT format,
+        WINBOOL left_view_frame0,
+        WINBOOL base_view_frame0,
+        D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE flip_mode,
+        int mono_offset);
+
+    void (STDMETHODCALLTYPE *VideoProcessorSetStreamAutoProcessingMode)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL enable);
+
+    void (STDMETHODCALLTYPE *VideoProcessorSetStreamFilter)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        D3D11_VIDEO_PROCESSOR_FILTER filter,
+        WINBOOL enable,
+        int level);
+
+    HRESULT (STDMETHODCALLTYPE *VideoProcessorSetStreamExtension)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        const GUID *guid,
+        UINT data_size,
+        void *data);
+
+    void (STDMETHODCALLTYPE *VideoProcessorGetStreamFrameFormat)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        D3D11_VIDEO_FRAME_FORMAT *format);
+
+    void (STDMETHODCALLTYPE *VideoProcessorGetStreamColorSpace)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space);
+
+    void (STDMETHODCALLTYPE *VideoProcessorGetStreamOutputRate)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        D3D11_VIDEO_PROCESSOR_OUTPUT_RATE *rate,
+        WINBOOL *repeat,
+        DXGI_RATIONAL *custom_rate);
+
+    void (STDMETHODCALLTYPE *VideoProcessorGetStreamSourceRect)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL *enabled,
+        RECT *rect);
+
+    void (STDMETHODCALLTYPE *VideoProcessorGetStreamDestRect)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL *enabled,
+        RECT *rect);
+
+    void (STDMETHODCALLTYPE *VideoProcessorGetStreamAlpha)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL *enabled,
+        float *alpha);
+
+    void (STDMETHODCALLTYPE *VideoProcessorGetStreamPalette)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        UINT entry_count,
+        UINT *entries);
+
+    void (STDMETHODCALLTYPE *VideoProcessorGetStreamPixelAspectRatio)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL *enabled,
+        DXGI_RATIONAL *src_aspect_ratio,
+        DXGI_RATIONAL *dst_aspect_ratio);
+
+    void (STDMETHODCALLTYPE *VideoProcessorGetStreamLumaKey)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL *enabled,
+        float *lower,
+        float *upper);
+
+    void (STDMETHODCALLTYPE *VideoProcessorGetStreamStereoFormat)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL *enabled,
+        D3D11_VIDEO_PROCESSOR_STEREO_FORMAT *format,
+        WINBOOL *left_view_frame0,
+        WINBOOL *base_view_frame0,
+        D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE *flip_mode,
+        int *mono_offset);
+
+    void (STDMETHODCALLTYPE *VideoProcessorGetStreamAutoProcessingMode)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL *enabled);
+
+    void (STDMETHODCALLTYPE *VideoProcessorGetStreamFilter)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        D3D11_VIDEO_PROCESSOR_FILTER filter,
+        WINBOOL *enabled,
+        int *level);
+
+    HRESULT (STDMETHODCALLTYPE *VideoProcessorGetStreamExtension)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        const GUID *guid,
+        UINT data_size,
+        void *data);
+
+    HRESULT (STDMETHODCALLTYPE *VideoProcessorBlt)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        ID3D11VideoProcessorOutputView *view,
+        UINT frame_idx,
+        UINT stream_count,
+        const D3D11_VIDEO_PROCESSOR_STREAM *streams);
+
+    HRESULT (STDMETHODCALLTYPE *NegotiateCryptoSessionKeyExchange)(
+        ID3D11VideoContext* This,
+        ID3D11CryptoSession *session,
+        UINT data_size,
+        void *data);
+
+    void (STDMETHODCALLTYPE *EncryptionBlt)(
+        ID3D11VideoContext* This,
+        ID3D11CryptoSession *session,
+        ID3D11Texture2D *src_surface,
+        ID3D11Texture2D *dst_surface,
+        UINT iv_size,
+        void *iv);
+
+    void (STDMETHODCALLTYPE *DecryptionBlt)(
+        ID3D11VideoContext* This,
+        ID3D11CryptoSession *session,
+        ID3D11Texture2D *src_surface,
+        ID3D11Texture2D *dst_surface,
+        D3D11_ENCRYPTED_BLOCK_INFO *block_info,
+        UINT key_size,
+        const void *key,
+        UINT iv_size,
+        void *iv);
+
+    void (STDMETHODCALLTYPE *StartSessionKeyRefresh)(
+        ID3D11VideoContext* This,
+        ID3D11CryptoSession *session,
+        UINT random_number_size,
+        void *random_number);
+
+    void (STDMETHODCALLTYPE *FinishSessionKeyRefresh)(
+        ID3D11VideoContext* This,
+        ID3D11CryptoSession *session);
+
+    HRESULT (STDMETHODCALLTYPE *GetEncryptionBltKey)(
+        ID3D11VideoContext* This,
+        ID3D11CryptoSession *session,
+        UINT key_size,
+        void *key);
+
+    HRESULT (STDMETHODCALLTYPE *NegotiateAuthenticatedChannelKeyExchange)(
+        ID3D11VideoContext* This,
+        ID3D11AuthenticatedChannel *channel,
+        UINT data_size,
+        void *data);
+
+    HRESULT (STDMETHODCALLTYPE *QueryAuthenticatedChannel)(
+        ID3D11VideoContext* This,
+        ID3D11AuthenticatedChannel *channel,
+        UINT input_size,
+        const void *input,
+        UINT output_size,
+        void *output);
+
+    HRESULT (STDMETHODCALLTYPE *ConfigureAuthenticatedChannel)(
+        ID3D11VideoContext* This,
+        ID3D11AuthenticatedChannel *channel,
+        UINT input_size,
+        const void *input,
+        D3D11_AUTHENTICATED_CONFIGURE_OUTPUT *output);
+
+    void (STDMETHODCALLTYPE *VideoProcessorSetStreamRotation)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL enable,
+        D3D11_VIDEO_PROCESSOR_ROTATION rotation);
+
+    void (STDMETHODCALLTYPE *VideoProcessorGetStreamRotation)(
+        ID3D11VideoContext* This,
+        ID3D11VideoProcessor *processor,
+        UINT stream_idx,
+        WINBOOL *enable,
+        D3D11_VIDEO_PROCESSOR_ROTATION *rotation);
+
+    END_INTERFACE
+} ID3D11VideoContextVtbl;
+interface ID3D11VideoContext {
+    CONST_VTBL ID3D11VideoContextVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D11VideoContext_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D11VideoContext_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D11VideoContext_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D11DeviceChild methods ***/
+#define ID3D11VideoContext_GetDevice(This,ppDevice) (This)->lpVtbl->GetDevice(This,ppDevice)
+#define ID3D11VideoContext_GetPrivateData(This,guid,pDataSize,pData) (This)->lpVtbl->GetPrivateData(This,guid,pDataSize,pData)
+#define ID3D11VideoContext_SetPrivateData(This,guid,DataSize,pData) (This)->lpVtbl->SetPrivateData(This,guid,DataSize,pData)
+#define ID3D11VideoContext_SetPrivateDataInterface(This,guid,pData) (This)->lpVtbl->SetPrivateDataInterface(This,guid,pData)
+/*** ID3D11VideoContext methods ***/
+#define ID3D11VideoContext_GetDecoderBuffer(This,decoder,type,buffer_size,buffer) (This)->lpVtbl->GetDecoderBuffer(This,decoder,type,buffer_size,buffer)
+#define ID3D11VideoContext_ReleaseDecoderBuffer(This,decoder,type) (This)->lpVtbl->ReleaseDecoderBuffer(This,decoder,type)
+#define ID3D11VideoContext_DecoderBeginFrame(This,decoder,view,key_size,key) (This)->lpVtbl->DecoderBeginFrame(This,decoder,view,key_size,key)
+#define ID3D11VideoContext_DecoderEndFrame(This,decoder) (This)->lpVtbl->DecoderEndFrame(This,decoder)
+#define ID3D11VideoContext_SubmitDecoderBuffers(This,decoder,buffers_count,buffer_desc) (This)->lpVtbl->SubmitDecoderBuffers(This,decoder,buffers_count,buffer_desc)
+#define ID3D11VideoContext_DecoderExtension(This,decoder,extension) (This)->lpVtbl->DecoderExtension(This,decoder,extension)
+#define ID3D11VideoContext_VideoProcessorSetOutputTargetRect(This,processor,enable,rect) (This)->lpVtbl->VideoProcessorSetOutputTargetRect(This,processor,enable,rect)
+#define ID3D11VideoContext_VideoProcessorSetOutputBackgroundColor(This,processor,y_cb_cr,color) (This)->lpVtbl->VideoProcessorSetOutputBackgroundColor(This,processor,y_cb_cr,color)
+#define ID3D11VideoContext_VideoProcessorSetOutputColorSpace(This,processor,color_space) (This)->lpVtbl->VideoProcessorSetOutputColorSpace(This,processor,color_space)
+#define ID3D11VideoContext_VideoProcessorSetOutputAlphaFillMode(This,processor,alpha_fill_mode,stream_idx) (This)->lpVtbl->VideoProcessorSetOutputAlphaFillMode(This,processor,alpha_fill_mode,stream_idx)
+#define ID3D11VideoContext_VideoProcessorSetOutputConstriction(This,processor,enable,size) (This)->lpVtbl->VideoProcessorSetOutputConstriction(This,processor,enable,size)
+#define ID3D11VideoContext_VideoProcessorSetOutputStereoMode(This,processor,enable) (This)->lpVtbl->VideoProcessorSetOutputStereoMode(This,processor,enable)
+#define ID3D11VideoContext_VideoProcessorSetOutputExtension(This,processor,guid,data_size,data) (This)->lpVtbl->VideoProcessorSetOutputExtension(This,processor,guid,data_size,data)
+#define ID3D11VideoContext_VideoProcessorGetOutputTargetRect(This,processor,enabled,rect) (This)->lpVtbl->VideoProcessorGetOutputTargetRect(This,processor,enabled,rect)
+#define ID3D11VideoContext_VideoProcessorGetOutputBackgroundColor(This,processor,y_cb_cr,color) (This)->lpVtbl->VideoProcessorGetOutputBackgroundColor(This,processor,y_cb_cr,color)
+#define ID3D11VideoContext_VideoProcessorGetOutputColorSpace(This,processor,color_space) (This)->lpVtbl->VideoProcessorGetOutputColorSpace(This,processor,color_space)
+#define ID3D11VideoContext_VideoProcessorGetOutputAlphaFillMode(This,processor,alpha_fill_mode,stream_idx) (This)->lpVtbl->VideoProcessorGetOutputAlphaFillMode(This,processor,alpha_fill_mode,stream_idx)
+#define ID3D11VideoContext_VideoProcessorGetOutputConstriction(This,processor,enabled,size) (This)->lpVtbl->VideoProcessorGetOutputConstriction(This,processor,enabled,size)
+#define ID3D11VideoContext_VideoProcessorGetOutputStereoMode(This,processor,enabled) (This)->lpVtbl->VideoProcessorGetOutputStereoMode(This,processor,enabled)
+#define ID3D11VideoContext_VideoProcessorGetOutputExtension(This,processor,guid,data_size,data) (This)->lpVtbl->VideoProcessorGetOutputExtension(This,processor,guid,data_size,data)
+#define ID3D11VideoContext_VideoProcessorSetStreamFrameFormat(This,processor,stream_idx,format) (This)->lpVtbl->VideoProcessorSetStreamFrameFormat(This,processor,stream_idx,format)
+#define ID3D11VideoContext_VideoProcessorSetStreamColorSpace(This,processor,stream_idx,color_space) (This)->lpVtbl->VideoProcessorSetStreamColorSpace(This,processor,stream_idx,color_space)
+#define ID3D11VideoContext_VideoProcessorSetStreamOutputRate(This,processor,stream_idx,rate,repeat,custom_rate) (This)->lpVtbl->VideoProcessorSetStreamOutputRate(This,processor,stream_idx,rate,repeat,custom_rate)
+#define ID3D11VideoContext_VideoProcessorSetStreamSourceRect(This,processor,stream_idx,enable,rect) (This)->lpVtbl->VideoProcessorSetStreamSourceRect(This,processor,stream_idx,enable,rect)
+#define ID3D11VideoContext_VideoProcessorSetStreamDestRect(This,processor,stream_idx,enable,rect) (This)->lpVtbl->VideoProcessorSetStreamDestRect(This,processor,stream_idx,enable,rect)
+#define ID3D11VideoContext_VideoProcessorSetStreamAlpha(This,processor,stream_idx,enable,alpha) (This)->lpVtbl->VideoProcessorSetStreamAlpha(This,processor,stream_idx,enable,alpha)
+#define ID3D11VideoContext_VideoProcessorSetStreamPalette(This,processor,stream_idx,entry_count,entries) (This)->lpVtbl->VideoProcessorSetStreamPalette(This,processor,stream_idx,entry_count,entries)
+#define ID3D11VideoContext_VideoProcessorSetStreamPixelAspectRatio(This,processor,stream_idx,enable,src_aspect_ratio,dst_aspect_ratio) (This)->lpVtbl->VideoProcessorSetStreamPixelAspectRatio(This,processor,stream_idx,enable,src_aspect_ratio,dst_aspect_ratio)
+#define ID3D11VideoContext_VideoProcessorSetStreamLumaKey(This,processor,stream_idx,enable,lower,upper) (This)->lpVtbl->VideoProcessorSetStreamLumaKey(This,processor,stream_idx,enable,lower,upper)
+#define ID3D11VideoContext_VideoProcessorSetStreamStereoFormat(This,processor,stream_idx,enable,format,left_view_frame0,base_view_frame0,flip_mode,mono_offset) (This)->lpVtbl->VideoProcessorSetStreamStereoFormat(This,processor,stream_idx,enable,format,left_view_frame0,base_view_frame0,flip_mode,mono_offset)
+#define ID3D11VideoContext_VideoProcessorSetStreamAutoProcessingMode(This,processor,stream_idx,enable) (This)->lpVtbl->VideoProcessorSetStreamAutoProcessingMode(This,processor,stream_idx,enable)
+#define ID3D11VideoContext_VideoProcessorSetStreamFilter(This,processor,stream_idx,filter,enable,level) (This)->lpVtbl->VideoProcessorSetStreamFilter(This,processor,stream_idx,filter,enable,level)
+#define ID3D11VideoContext_VideoProcessorSetStreamExtension(This,processor,stream_idx,guid,data_size,data) (This)->lpVtbl->VideoProcessorSetStreamExtension(This,processor,stream_idx,guid,data_size,data)
+#define ID3D11VideoContext_VideoProcessorGetStreamFrameFormat(This,processor,stream_idx,format) (This)->lpVtbl->VideoProcessorGetStreamFrameFormat(This,processor,stream_idx,format)
+#define ID3D11VideoContext_VideoProcessorGetStreamColorSpace(This,processor,stream_idx,color_space) (This)->lpVtbl->VideoProcessorGetStreamColorSpace(This,processor,stream_idx,color_space)
+#define ID3D11VideoContext_VideoProcessorGetStreamOutputRate(This,processor,stream_idx,rate,repeat,custom_rate) (This)->lpVtbl->VideoProcessorGetStreamOutputRate(This,processor,stream_idx,rate,repeat,custom_rate)
+#define ID3D11VideoContext_VideoProcessorGetStreamSourceRect(This,processor,stream_idx,enabled,rect) (This)->lpVtbl->VideoProcessorGetStreamSourceRect(This,processor,stream_idx,enabled,rect)
+#define ID3D11VideoContext_VideoProcessorGetStreamDestRect(This,processor,stream_idx,enabled,rect) (This)->lpVtbl->VideoProcessorGetStreamDestRect(This,processor,stream_idx,enabled,rect)
+#define ID3D11VideoContext_VideoProcessorGetStreamAlpha(This,processor,stream_idx,enabled,alpha) (This)->lpVtbl->VideoProcessorGetStreamAlpha(This,processor,stream_idx,enabled,alpha)
+#define ID3D11VideoContext_VideoProcessorGetStreamPalette(This,processor,stream_idx,entry_count,entries) (This)->lpVtbl->VideoProcessorGetStreamPalette(This,processor,stream_idx,entry_count,entries)
+#define ID3D11VideoContext_VideoProcessorGetStreamPixelAspectRatio(This,processor,stream_idx,enabled,src_aspect_ratio,dst_aspect_ratio) (This)->lpVtbl->VideoProcessorGetStreamPixelAspectRatio(This,processor,stream_idx,enabled,src_aspect_ratio,dst_aspect_ratio)
+#define ID3D11VideoContext_VideoProcessorGetStreamLumaKey(This,processor,stream_idx,enabled,lower,upper) (This)->lpVtbl->VideoProcessorGetStreamLumaKey(This,processor,stream_idx,enabled,lower,upper)
+#define ID3D11VideoContext_VideoProcessorGetStreamStereoFormat(This,processor,stream_idx,enabled,format,left_view_frame0,base_view_frame0,flip_mode,mono_offset) (This)->lpVtbl->VideoProcessorGetStreamStereoFormat(This,processor,stream_idx,enabled,format,left_view_frame0,base_view_frame0,flip_mode,mono_offset)
+#define ID3D11VideoContext_VideoProcessorGetStreamAutoProcessingMode(This,processor,stream_idx,enabled) (This)->lpVtbl->VideoProcessorGetStreamAutoProcessingMode(This,processor,stream_idx,enabled)
+#define ID3D11VideoContext_VideoProcessorGetStreamFilter(This,processor,stream_idx,filter,enabled,level) (This)->lpVtbl->VideoProcessorGetStreamFilter(This,processor,stream_idx,filter,enabled,level)
+#define ID3D11VideoContext_VideoProcessorGetStreamExtension(This,processor,stream_idx,guid,data_size,data) (This)->lpVtbl->VideoProcessorGetStreamExtension(This,processor,stream_idx,guid,data_size,data)
+#define ID3D11VideoContext_VideoProcessorBlt(This,processor,view,frame_idx,stream_count,streams) (This)->lpVtbl->VideoProcessorBlt(This,processor,view,frame_idx,stream_count,streams)
+#define ID3D11VideoContext_NegotiateCryptoSessionKeyExchange(This,session,data_size,data) (This)->lpVtbl->NegotiateCryptoSessionKeyExchange(This,session,data_size,data)
+#define ID3D11VideoContext_EncryptionBlt(This,session,src_surface,dst_surface,iv_size,iv) (This)->lpVtbl->EncryptionBlt(This,session,src_surface,dst_surface,iv_size,iv)
+#define ID3D11VideoContext_DecryptionBlt(This,session,src_surface,dst_surface,block_info,key_size,key,iv_size,iv) (This)->lpVtbl->DecryptionBlt(This,session,src_surface,dst_surface,block_info,key_size,key,iv_size,iv)
+#define ID3D11VideoContext_StartSessionKeyRefresh(This,session,random_number_size,random_number) (This)->lpVtbl->StartSessionKeyRefresh(This,session,random_number_size,random_number)
+#define ID3D11VideoContext_FinishSessionKeyRefresh(This,session) (This)->lpVtbl->FinishSessionKeyRefresh(This,session)
+#define ID3D11VideoContext_GetEncryptionBltKey(This,session,key_size,key) (This)->lpVtbl->GetEncryptionBltKey(This,session,key_size,key)
+#define ID3D11VideoContext_NegotiateAuthenticatedChannelKeyExchange(This,channel,data_size,data) (This)->lpVtbl->NegotiateAuthenticatedChannelKeyExchange(This,channel,data_size,data)
+#define ID3D11VideoContext_QueryAuthenticatedChannel(This,channel,input_size,input,output_size,output) (This)->lpVtbl->QueryAuthenticatedChannel(This,channel,input_size,input,output_size,output)
+#define ID3D11VideoContext_ConfigureAuthenticatedChannel(This,channel,input_size,input,output) (This)->lpVtbl->ConfigureAuthenticatedChannel(This,channel,input_size,input,output)
+#define ID3D11VideoContext_VideoProcessorSetStreamRotation(This,processor,stream_idx,enable,rotation) (This)->lpVtbl->VideoProcessorSetStreamRotation(This,processor,stream_idx,enable,rotation)
+#define ID3D11VideoContext_VideoProcessorGetStreamRotation(This,processor,stream_idx,enable,rotation) (This)->lpVtbl->VideoProcessorGetStreamRotation(This,processor,stream_idx,enable,rotation)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ID3D11VideoContext_QueryInterface(ID3D11VideoContext* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ID3D11VideoContext_AddRef(ID3D11VideoContext* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ID3D11VideoContext_Release(ID3D11VideoContext* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D11DeviceChild methods ***/
+static FORCEINLINE void ID3D11VideoContext_GetDevice(ID3D11VideoContext* This,ID3D11Device **ppDevice) {
+    This->lpVtbl->GetDevice(This,ppDevice);
+}
+static FORCEINLINE HRESULT ID3D11VideoContext_GetPrivateData(ID3D11VideoContext* This,REFGUID guid,UINT *pDataSize,void *pData) {
+    return This->lpVtbl->GetPrivateData(This,guid,pDataSize,pData);
+}
+static FORCEINLINE HRESULT ID3D11VideoContext_SetPrivateData(ID3D11VideoContext* This,REFGUID guid,UINT DataSize,const void *pData) {
+    return This->lpVtbl->SetPrivateData(This,guid,DataSize,pData);
+}
+static FORCEINLINE HRESULT ID3D11VideoContext_SetPrivateDataInterface(ID3D11VideoContext* This,REFGUID guid,const IUnknown *pData) {
+    return This->lpVtbl->SetPrivateDataInterface(This,guid,pData);
+}
+/*** ID3D11VideoContext methods ***/
+static FORCEINLINE HRESULT ID3D11VideoContext_GetDecoderBuffer(ID3D11VideoContext* This,ID3D11VideoDecoder *decoder,D3D11_VIDEO_DECODER_BUFFER_TYPE type,UINT *buffer_size,void **buffer) {
+    return This->lpVtbl->GetDecoderBuffer(This,decoder,type,buffer_size,buffer);
+}
+static FORCEINLINE HRESULT ID3D11VideoContext_ReleaseDecoderBuffer(ID3D11VideoContext* This,ID3D11VideoDecoder *decoder,D3D11_VIDEO_DECODER_BUFFER_TYPE type) {
+    return This->lpVtbl->ReleaseDecoderBuffer(This,decoder,type);
+}
+static FORCEINLINE HRESULT ID3D11VideoContext_DecoderBeginFrame(ID3D11VideoContext* This,ID3D11VideoDecoder *decoder,ID3D11VideoDecoderOutputView *view,UINT key_size,const void *key) {
+    return This->lpVtbl->DecoderBeginFrame(This,decoder,view,key_size,key);
+}
+static FORCEINLINE HRESULT ID3D11VideoContext_DecoderEndFrame(ID3D11VideoContext* This,ID3D11VideoDecoder *decoder) {
+    return This->lpVtbl->DecoderEndFrame(This,decoder);
+}
+static FORCEINLINE HRESULT ID3D11VideoContext_SubmitDecoderBuffers(ID3D11VideoContext* This,ID3D11VideoDecoder *decoder,UINT buffers_count,const D3D11_VIDEO_DECODER_BUFFER_DESC *buffer_desc) {
+    return This->lpVtbl->SubmitDecoderBuffers(This,decoder,buffers_count,buffer_desc);
+}
+static FORCEINLINE HRESULT ID3D11VideoContext_DecoderExtension(ID3D11VideoContext* This,ID3D11VideoDecoder *decoder,const D3D11_VIDEO_DECODER_EXTENSION *extension) {
+    return This->lpVtbl->DecoderExtension(This,decoder,extension);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorSetOutputTargetRect(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,WINBOOL enable,const RECT *rect) {
+    This->lpVtbl->VideoProcessorSetOutputTargetRect(This,processor,enable,rect);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorSetOutputBackgroundColor(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,WINBOOL y_cb_cr,const D3D11_VIDEO_COLOR *color) {
+    This->lpVtbl->VideoProcessorSetOutputBackgroundColor(This,processor,y_cb_cr,color);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorSetOutputColorSpace(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,const D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space) {
+    This->lpVtbl->VideoProcessorSetOutputColorSpace(This,processor,color_space);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorSetOutputAlphaFillMode(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE alpha_fill_mode,UINT stream_idx) {
+    This->lpVtbl->VideoProcessorSetOutputAlphaFillMode(This,processor,alpha_fill_mode,stream_idx);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorSetOutputConstriction(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,WINBOOL enable,SIZE size) {
+    This->lpVtbl->VideoProcessorSetOutputConstriction(This,processor,enable,size);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorSetOutputStereoMode(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,WINBOOL enable) {
+    This->lpVtbl->VideoProcessorSetOutputStereoMode(This,processor,enable);
+}
+static FORCEINLINE HRESULT ID3D11VideoContext_VideoProcessorSetOutputExtension(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,const GUID *guid,UINT data_size,void *data) {
+    return This->lpVtbl->VideoProcessorSetOutputExtension(This,processor,guid,data_size,data);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorGetOutputTargetRect(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,WINBOOL *enabled,RECT *rect) {
+    This->lpVtbl->VideoProcessorGetOutputTargetRect(This,processor,enabled,rect);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorGetOutputBackgroundColor(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,WINBOOL *y_cb_cr,D3D11_VIDEO_COLOR *color) {
+    This->lpVtbl->VideoProcessorGetOutputBackgroundColor(This,processor,y_cb_cr,color);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorGetOutputColorSpace(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space) {
+    This->lpVtbl->VideoProcessorGetOutputColorSpace(This,processor,color_space);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorGetOutputAlphaFillMode(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE *alpha_fill_mode,UINT *stream_idx) {
+    This->lpVtbl->VideoProcessorGetOutputAlphaFillMode(This,processor,alpha_fill_mode,stream_idx);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorGetOutputConstriction(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,WINBOOL *enabled,SIZE *size) {
+    This->lpVtbl->VideoProcessorGetOutputConstriction(This,processor,enabled,size);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorGetOutputStereoMode(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,WINBOOL *enabled) {
+    This->lpVtbl->VideoProcessorGetOutputStereoMode(This,processor,enabled);
+}
+static FORCEINLINE HRESULT ID3D11VideoContext_VideoProcessorGetOutputExtension(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,const GUID *guid,UINT data_size,void *data) {
+    return This->lpVtbl->VideoProcessorGetOutputExtension(This,processor,guid,data_size,data);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorSetStreamFrameFormat(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,UINT stream_idx,D3D11_VIDEO_FRAME_FORMAT format) {
+    This->lpVtbl->VideoProcessorSetStreamFrameFormat(This,processor,stream_idx,format);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorSetStreamColorSpace(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,UINT stream_idx,const D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space) {
+    This->lpVtbl->VideoProcessorSetStreamColorSpace(This,processor,stream_idx,color_space);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorSetStreamOutputRate(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,UINT stream_idx,D3D11_VIDEO_PROCESSOR_OUTPUT_RATE rate,WINBOOL repeat,const DXGI_RATIONAL *custom_rate) {
+    This->lpVtbl->VideoProcessorSetStreamOutputRate(This,processor,stream_idx,rate,repeat,custom_rate);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorSetStreamSourceRect(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,UINT stream_idx,WINBOOL enable,const RECT *rect) {
+    This->lpVtbl->VideoProcessorSetStreamSourceRect(This,processor,stream_idx,enable,rect);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorSetStreamDestRect(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,UINT stream_idx,WINBOOL enable,const RECT *rect) {
+    This->lpVtbl->VideoProcessorSetStreamDestRect(This,processor,stream_idx,enable,rect);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorSetStreamAlpha(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,UINT stream_idx,WINBOOL enable,float alpha) {
+    This->lpVtbl->VideoProcessorSetStreamAlpha(This,processor,stream_idx,enable,alpha);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorSetStreamPalette(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,UINT stream_idx,UINT entry_count,const UINT *entries) {
+    This->lpVtbl->VideoProcessorSetStreamPalette(This,processor,stream_idx,entry_count,entries);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorSetStreamPixelAspectRatio(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,UINT stream_idx,WINBOOL enable,const DXGI_RATIONAL *src_aspect_ratio,const DXGI_RATIONAL *dst_aspect_ratio) {
+    This->lpVtbl->VideoProcessorSetStreamPixelAspectRatio(This,processor,stream_idx,enable,src_aspect_ratio,dst_aspect_ratio);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorSetStreamLumaKey(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,UINT stream_idx,WINBOOL enable,float lower,float upper) {
+    This->lpVtbl->VideoProcessorSetStreamLumaKey(This,processor,stream_idx,enable,lower,upper);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorSetStreamStereoFormat(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,UINT stream_idx,WINBOOL enable,D3D11_VIDEO_PROCESSOR_STEREO_FORMAT format,WINBOOL left_view_frame0,WINBOOL base_view_frame0,D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE flip_mode,int mono_offset) {
+    This->lpVtbl->VideoProcessorSetStreamStereoFormat(This,processor,stream_idx,enable,format,left_view_frame0,base_view_frame0,flip_mode,mono_offset);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorSetStreamAutoProcessingMode(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,UINT stream_idx,WINBOOL enable) {
+    This->lpVtbl->VideoProcessorSetStreamAutoProcessingMode(This,processor,stream_idx,enable);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorSetStreamFilter(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,UINT stream_idx,D3D11_VIDEO_PROCESSOR_FILTER filter,WINBOOL enable,int level) {
+    This->lpVtbl->VideoProcessorSetStreamFilter(This,processor,stream_idx,filter,enable,level);
+}
+static FORCEINLINE HRESULT ID3D11VideoContext_VideoProcessorSetStreamExtension(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,UINT stream_idx,const GUID *guid,UINT data_size,void *data) {
+    return This->lpVtbl->VideoProcessorSetStreamExtension(This,processor,stream_idx,guid,data_size,data);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorGetStreamFrameFormat(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,UINT stream_idx,D3D11_VIDEO_FRAME_FORMAT *format) {
+    This->lpVtbl->VideoProcessorGetStreamFrameFormat(This,processor,stream_idx,format);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorGetStreamColorSpace(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,UINT stream_idx,D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space) {
+    This->lpVtbl->VideoProcessorGetStreamColorSpace(This,processor,stream_idx,color_space);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorGetStreamOutputRate(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,UINT stream_idx,D3D11_VIDEO_PROCESSOR_OUTPUT_RATE *rate,WINBOOL *repeat,DXGI_RATIONAL *custom_rate) {
+    This->lpVtbl->VideoProcessorGetStreamOutputRate(This,processor,stream_idx,rate,repeat,custom_rate);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorGetStreamSourceRect(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,UINT stream_idx,WINBOOL *enabled,RECT *rect) {
+    This->lpVtbl->VideoProcessorGetStreamSourceRect(This,processor,stream_idx,enabled,rect);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorGetStreamDestRect(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,UINT stream_idx,WINBOOL *enabled,RECT *rect) {
+    This->lpVtbl->VideoProcessorGetStreamDestRect(This,processor,stream_idx,enabled,rect);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorGetStreamAlpha(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,UINT stream_idx,WINBOOL *enabled,float *alpha) {
+    This->lpVtbl->VideoProcessorGetStreamAlpha(This,processor,stream_idx,enabled,alpha);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorGetStreamPalette(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,UINT stream_idx,UINT entry_count,UINT *entries) {
+    This->lpVtbl->VideoProcessorGetStreamPalette(This,processor,stream_idx,entry_count,entries);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorGetStreamPixelAspectRatio(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,UINT stream_idx,WINBOOL *enabled,DXGI_RATIONAL *src_aspect_ratio,DXGI_RATIONAL *dst_aspect_ratio) {
+    This->lpVtbl->VideoProcessorGetStreamPixelAspectRatio(This,processor,stream_idx,enabled,src_aspect_ratio,dst_aspect_ratio);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorGetStreamLumaKey(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,UINT stream_idx,WINBOOL *enabled,float *lower,float *upper) {
+    This->lpVtbl->VideoProcessorGetStreamLumaKey(This,processor,stream_idx,enabled,lower,upper);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorGetStreamStereoFormat(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,UINT stream_idx,WINBOOL *enabled,D3D11_VIDEO_PROCESSOR_STEREO_FORMAT *format,WINBOOL *left_view_frame0,WINBOOL *base_view_frame0,D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE *flip_mode,int *mono_offset) {
+    This->lpVtbl->VideoProcessorGetStreamStereoFormat(This,processor,stream_idx,enabled,format,left_view_frame0,base_view_frame0,flip_mode,mono_offset);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorGetStreamAutoProcessingMode(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,UINT stream_idx,WINBOOL *enabled) {
+    This->lpVtbl->VideoProcessorGetStreamAutoProcessingMode(This,processor,stream_idx,enabled);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorGetStreamFilter(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,UINT stream_idx,D3D11_VIDEO_PROCESSOR_FILTER filter,WINBOOL *enabled,int *level) {
+    This->lpVtbl->VideoProcessorGetStreamFilter(This,processor,stream_idx,filter,enabled,level);
+}
+static FORCEINLINE HRESULT ID3D11VideoContext_VideoProcessorGetStreamExtension(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,UINT stream_idx,const GUID *guid,UINT data_size,void *data) {
+    return This->lpVtbl->VideoProcessorGetStreamExtension(This,processor,stream_idx,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D11VideoContext_VideoProcessorBlt(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,ID3D11VideoProcessorOutputView *view,UINT frame_idx,UINT stream_count,const D3D11_VIDEO_PROCESSOR_STREAM *streams) {
+    return This->lpVtbl->VideoProcessorBlt(This,processor,view,frame_idx,stream_count,streams);
+}
+static FORCEINLINE HRESULT ID3D11VideoContext_NegotiateCryptoSessionKeyExchange(ID3D11VideoContext* This,ID3D11CryptoSession *session,UINT data_size,void *data) {
+    return This->lpVtbl->NegotiateCryptoSessionKeyExchange(This,session,data_size,data);
+}
+static FORCEINLINE void ID3D11VideoContext_EncryptionBlt(ID3D11VideoContext* This,ID3D11CryptoSession *session,ID3D11Texture2D *src_surface,ID3D11Texture2D *dst_surface,UINT iv_size,void *iv) {
+    This->lpVtbl->EncryptionBlt(This,session,src_surface,dst_surface,iv_size,iv);
+}
+static FORCEINLINE void ID3D11VideoContext_DecryptionBlt(ID3D11VideoContext* This,ID3D11CryptoSession *session,ID3D11Texture2D *src_surface,ID3D11Texture2D *dst_surface,D3D11_ENCRYPTED_BLOCK_INFO *block_info,UINT key_size,const void *key,UINT iv_size,void *iv) {
+    This->lpVtbl->DecryptionBlt(This,session,src_surface,dst_surface,block_info,key_size,key,iv_size,iv);
+}
+static FORCEINLINE void ID3D11VideoContext_StartSessionKeyRefresh(ID3D11VideoContext* This,ID3D11CryptoSession *session,UINT random_number_size,void *random_number) {
+    This->lpVtbl->StartSessionKeyRefresh(This,session,random_number_size,random_number);
+}
+static FORCEINLINE void ID3D11VideoContext_FinishSessionKeyRefresh(ID3D11VideoContext* This,ID3D11CryptoSession *session) {
+    This->lpVtbl->FinishSessionKeyRefresh(This,session);
+}
+static FORCEINLINE HRESULT ID3D11VideoContext_GetEncryptionBltKey(ID3D11VideoContext* This,ID3D11CryptoSession *session,UINT key_size,void *key) {
+    return This->lpVtbl->GetEncryptionBltKey(This,session,key_size,key);
+}
+static FORCEINLINE HRESULT ID3D11VideoContext_NegotiateAuthenticatedChannelKeyExchange(ID3D11VideoContext* This,ID3D11AuthenticatedChannel *channel,UINT data_size,void *data) {
+    return This->lpVtbl->NegotiateAuthenticatedChannelKeyExchange(This,channel,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D11VideoContext_QueryAuthenticatedChannel(ID3D11VideoContext* This,ID3D11AuthenticatedChannel *channel,UINT input_size,const void *input,UINT output_size,void *output) {
+    return This->lpVtbl->QueryAuthenticatedChannel(This,channel,input_size,input,output_size,output);
+}
+static FORCEINLINE HRESULT ID3D11VideoContext_ConfigureAuthenticatedChannel(ID3D11VideoContext* This,ID3D11AuthenticatedChannel *channel,UINT input_size,const void *input,D3D11_AUTHENTICATED_CONFIGURE_OUTPUT *output) {
+    return This->lpVtbl->ConfigureAuthenticatedChannel(This,channel,input_size,input,output);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorSetStreamRotation(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,UINT stream_idx,WINBOOL enable,D3D11_VIDEO_PROCESSOR_ROTATION rotation) {
+    This->lpVtbl->VideoProcessorSetStreamRotation(This,processor,stream_idx,enable,rotation);
+}
+static FORCEINLINE void ID3D11VideoContext_VideoProcessorGetStreamRotation(ID3D11VideoContext* This,ID3D11VideoProcessor *processor,UINT stream_idx,WINBOOL *enable,D3D11_VIDEO_PROCESSOR_ROTATION *rotation) {
+    This->lpVtbl->VideoProcessorGetStreamRotation(This,processor,stream_idx,enable,rotation);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ID3D11VideoContext_GetDecoderBuffer_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoDecoder *decoder,
+    D3D11_VIDEO_DECODER_BUFFER_TYPE type,
+    UINT *buffer_size,
+    void **buffer);
+void __RPC_STUB ID3D11VideoContext_GetDecoderBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoContext_ReleaseDecoderBuffer_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoDecoder *decoder,
+    D3D11_VIDEO_DECODER_BUFFER_TYPE type);
+void __RPC_STUB ID3D11VideoContext_ReleaseDecoderBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoContext_DecoderBeginFrame_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoDecoder *decoder,
+    ID3D11VideoDecoderOutputView *view,
+    UINT key_size,
+    const void *key);
+void __RPC_STUB ID3D11VideoContext_DecoderBeginFrame_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoContext_DecoderEndFrame_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoDecoder *decoder);
+void __RPC_STUB ID3D11VideoContext_DecoderEndFrame_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoContext_SubmitDecoderBuffers_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoDecoder *decoder,
+    UINT buffers_count,
+    const D3D11_VIDEO_DECODER_BUFFER_DESC *buffer_desc);
+void __RPC_STUB ID3D11VideoContext_SubmitDecoderBuffers_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoContext_DecoderExtension_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoDecoder *decoder,
+    const D3D11_VIDEO_DECODER_EXTENSION *extension);
+void __RPC_STUB ID3D11VideoContext_DecoderExtension_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorSetOutputTargetRect_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    WINBOOL enable,
+    const RECT *rect);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorSetOutputTargetRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorSetOutputBackgroundColor_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    WINBOOL y_cb_cr,
+    const D3D11_VIDEO_COLOR *color);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorSetOutputBackgroundColor_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorSetOutputColorSpace_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    const D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorSetOutputColorSpace_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorSetOutputAlphaFillMode_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE alpha_fill_mode,
+    UINT stream_idx);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorSetOutputAlphaFillMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorSetOutputConstriction_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    WINBOOL enable,
+    SIZE size);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorSetOutputConstriction_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorSetOutputStereoMode_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    WINBOOL enable);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorSetOutputStereoMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorSetOutputExtension_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    const GUID *guid,
+    UINT data_size,
+    void *data);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorSetOutputExtension_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorGetOutputTargetRect_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    WINBOOL *enabled,
+    RECT *rect);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorGetOutputTargetRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorGetOutputBackgroundColor_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    WINBOOL *y_cb_cr,
+    D3D11_VIDEO_COLOR *color);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorGetOutputBackgroundColor_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorGetOutputColorSpace_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorGetOutputColorSpace_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorGetOutputAlphaFillMode_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE *alpha_fill_mode,
+    UINT *stream_idx);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorGetOutputAlphaFillMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorGetOutputConstriction_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    WINBOOL *enabled,
+    SIZE *size);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorGetOutputConstriction_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorGetOutputStereoMode_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    WINBOOL *enabled);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorGetOutputStereoMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorGetOutputExtension_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    const GUID *guid,
+    UINT data_size,
+    void *data);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorGetOutputExtension_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorSetStreamFrameFormat_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    UINT stream_idx,
+    D3D11_VIDEO_FRAME_FORMAT format);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorSetStreamFrameFormat_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorSetStreamColorSpace_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    UINT stream_idx,
+    const D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorSetStreamColorSpace_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorSetStreamOutputRate_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    UINT stream_idx,
+    D3D11_VIDEO_PROCESSOR_OUTPUT_RATE rate,
+    WINBOOL repeat,
+    const DXGI_RATIONAL *custom_rate);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorSetStreamOutputRate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorSetStreamSourceRect_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    UINT stream_idx,
+    WINBOOL enable,
+    const RECT *rect);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorSetStreamSourceRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorSetStreamDestRect_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    UINT stream_idx,
+    WINBOOL enable,
+    const RECT *rect);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorSetStreamDestRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorSetStreamAlpha_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    UINT stream_idx,
+    WINBOOL enable,
+    float alpha);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorSetStreamAlpha_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorSetStreamPalette_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    UINT stream_idx,
+    UINT entry_count,
+    const UINT *entries);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorSetStreamPalette_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorSetStreamPixelAspectRatio_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    UINT stream_idx,
+    WINBOOL enable,
+    const DXGI_RATIONAL *src_aspect_ratio,
+    const DXGI_RATIONAL *dst_aspect_ratio);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorSetStreamPixelAspectRatio_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorSetStreamLumaKey_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    UINT stream_idx,
+    WINBOOL enable,
+    float lower,
+    float upper);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorSetStreamLumaKey_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorSetStreamStereoFormat_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    UINT stream_idx,
+    WINBOOL enable,
+    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT format,
+    WINBOOL left_view_frame0,
+    WINBOOL base_view_frame0,
+    D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE flip_mode,
+    int mono_offset);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorSetStreamStereoFormat_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorSetStreamAutoProcessingMode_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    UINT stream_idx,
+    WINBOOL enable);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorSetStreamAutoProcessingMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorSetStreamFilter_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    UINT stream_idx,
+    D3D11_VIDEO_PROCESSOR_FILTER filter,
+    WINBOOL enable,
+    int level);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorSetStreamFilter_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorSetStreamExtension_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    UINT stream_idx,
+    const GUID *guid,
+    UINT data_size,
+    void *data);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorSetStreamExtension_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorGetStreamFrameFormat_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    UINT stream_idx,
+    D3D11_VIDEO_FRAME_FORMAT *format);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorGetStreamFrameFormat_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorGetStreamColorSpace_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    UINT stream_idx,
+    D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorGetStreamColorSpace_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorGetStreamOutputRate_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    UINT stream_idx,
+    D3D11_VIDEO_PROCESSOR_OUTPUT_RATE *rate,
+    WINBOOL *repeat,
+    DXGI_RATIONAL *custom_rate);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorGetStreamOutputRate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorGetStreamSourceRect_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    UINT stream_idx,
+    WINBOOL *enabled,
+    RECT *rect);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorGetStreamSourceRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorGetStreamDestRect_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    UINT stream_idx,
+    WINBOOL *enabled,
+    RECT *rect);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorGetStreamDestRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorGetStreamAlpha_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    UINT stream_idx,
+    WINBOOL *enabled,
+    float *alpha);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorGetStreamAlpha_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorGetStreamPalette_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    UINT stream_idx,
+    UINT entry_count,
+    UINT *entries);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorGetStreamPalette_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorGetStreamPixelAspectRatio_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    UINT stream_idx,
+    WINBOOL *enabled,
+    DXGI_RATIONAL *src_aspect_ratio,
+    DXGI_RATIONAL *dst_aspect_ratio);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorGetStreamPixelAspectRatio_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorGetStreamLumaKey_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    UINT stream_idx,
+    WINBOOL *enabled,
+    float *lower,
+    float *upper);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorGetStreamLumaKey_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorGetStreamStereoFormat_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    UINT stream_idx,
+    WINBOOL *enabled,
+    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT *format,
+    WINBOOL *left_view_frame0,
+    WINBOOL *base_view_frame0,
+    D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE *flip_mode,
+    int *mono_offset);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorGetStreamStereoFormat_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorGetStreamAutoProcessingMode_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    UINT stream_idx,
+    WINBOOL *enabled);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorGetStreamAutoProcessingMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorGetStreamFilter_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    UINT stream_idx,
+    D3D11_VIDEO_PROCESSOR_FILTER filter,
+    WINBOOL *enabled,
+    int *level);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorGetStreamFilter_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorGetStreamExtension_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    UINT stream_idx,
+    const GUID *guid,
+    UINT data_size,
+    void *data);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorGetStreamExtension_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorBlt_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    ID3D11VideoProcessorOutputView *view,
+    UINT frame_idx,
+    UINT stream_count,
+    const D3D11_VIDEO_PROCESSOR_STREAM *streams);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorBlt_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoContext_NegotiateCryptoSessionKeyExchange_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11CryptoSession *session,
+    UINT data_size,
+    void *data);
+void __RPC_STUB ID3D11VideoContext_NegotiateCryptoSessionKeyExchange_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_EncryptionBlt_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11CryptoSession *session,
+    ID3D11Texture2D *src_surface,
+    ID3D11Texture2D *dst_surface,
+    UINT iv_size,
+    void *iv);
+void __RPC_STUB ID3D11VideoContext_EncryptionBlt_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_DecryptionBlt_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11CryptoSession *session,
+    ID3D11Texture2D *src_surface,
+    ID3D11Texture2D *dst_surface,
+    D3D11_ENCRYPTED_BLOCK_INFO *block_info,
+    UINT key_size,
+    const void *key,
+    UINT iv_size,
+    void *iv);
+void __RPC_STUB ID3D11VideoContext_DecryptionBlt_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_StartSessionKeyRefresh_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11CryptoSession *session,
+    UINT random_number_size,
+    void *random_number);
+void __RPC_STUB ID3D11VideoContext_StartSessionKeyRefresh_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_FinishSessionKeyRefresh_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11CryptoSession *session);
+void __RPC_STUB ID3D11VideoContext_FinishSessionKeyRefresh_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoContext_GetEncryptionBltKey_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11CryptoSession *session,
+    UINT key_size,
+    void *key);
+void __RPC_STUB ID3D11VideoContext_GetEncryptionBltKey_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoContext_NegotiateAuthenticatedChannelKeyExchange_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11AuthenticatedChannel *channel,
+    UINT data_size,
+    void *data);
+void __RPC_STUB ID3D11VideoContext_NegotiateAuthenticatedChannelKeyExchange_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoContext_QueryAuthenticatedChannel_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11AuthenticatedChannel *channel,
+    UINT input_size,
+    const void *input,
+    UINT output_size,
+    void *output);
+void __RPC_STUB ID3D11VideoContext_QueryAuthenticatedChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11VideoContext_ConfigureAuthenticatedChannel_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11AuthenticatedChannel *channel,
+    UINT input_size,
+    const void *input,
+    D3D11_AUTHENTICATED_CONFIGURE_OUTPUT *output);
+void __RPC_STUB ID3D11VideoContext_ConfigureAuthenticatedChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorSetStreamRotation_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    UINT stream_idx,
+    WINBOOL enable,
+    D3D11_VIDEO_PROCESSOR_ROTATION rotation);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorSetStreamRotation_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE ID3D11VideoContext_VideoProcessorGetStreamRotation_Proxy(
+    ID3D11VideoContext* This,
+    ID3D11VideoProcessor *processor,
+    UINT stream_idx,
+    WINBOOL *enable,
+    D3D11_VIDEO_PROCESSOR_ROTATION *rotation);
+void __RPC_STUB ID3D11VideoContext_VideoProcessorGetStreamRotation_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ID3D11VideoContext_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
  * ID3D11Device interface
  */
 #ifndef __ID3D11Device_INTERFACE_DEFINED__
@@ -8857,6 +12834,8 @@
 typedef HRESULT (WINAPI *PFN_D3D11_CREATE_DEVICE_AND_SWAP_CHAIN)(IDXGIAdapter*,D3D_DRIVER_TYPE,HMODULE,UINT,
     const D3D_FEATURE_LEVEL*,UINT,UINT,const DXGI_SWAP_CHAIN_DESC*,IDXGISwapChain**,ID3D11Device**,
     D3D_FEATURE_LEVEL*,ID3D11DeviceContext**);
+HRESULT __stdcall  D3D11CreateDeviceAndSwapChain(IDXGIAdapter *adapter,D3D_DRIVER_TYPE driver_type,HMODULE swrast,UINT flags,const D3D_FEATURE_LEVEL *feature_levels,UINT levels,UINT sdk_version,const DXGI_SWAP_CHAIN_DESC *swapchain_desc,IDXGISwapChain **swapchain,ID3D11Device **device,D3D_FEATURE_LEVEL *obtained_feature_level,ID3D11DeviceContext **immediate_context);
+
 /* Begin additional prototypes for all interfaces */
 
 
diff --git a/x86_64-w64-mingw32/include/d3d11.idl b/x86_64-w64-mingw32/include/d3d11.idl
index d5732c9..57d2ceb 100644
--- a/x86_64-w64-mingw32/include/d3d11.idl
+++ b/x86_64-w64-mingw32/include/d3d11.idl
@@ -27,6 +27,11 @@
 typedef D3D_SRV_DIMENSION D3D11_SRV_DIMENSION;
 typedef RECT D3D11_RECT;
 
+interface ID3D11Device;
+interface ID3D11ClassLinkage;
+interface ID3D11Resource;
+interface ID3D11VideoProcessorInputView;
+
 const UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT      = 14;
 const UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_COMPONENTS          = 4;
 const UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_COMPONENT_BIT_COUNT = 32;
@@ -87,12 +92,17 @@
 
 cpp_quote("#define D3D11_FLOAT32_MAX         (3.402823466e+38f)")
 
+const UINT D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT = 32;
+
 const unsigned int D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT = 8;
 
 const UINT D3D11_MAX_MAXANISOTROPY           = 16;
 const UINT D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT = 32;
 const UINT D3D11_VIEWPORT_BOUNDS_MAX         = 32767;
 const INT D3D11_VIEWPORT_BOUNDS_MIN          = -32768;
+const UINT D3D11_VIEWPORT_AND_SCISSORRECT_MAX_INDEX = 15;
+const UINT D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE = 16;
+
 const UINT D3D11_SHADER_MAJOR_VERSION        = 5;
 const UINT D3D11_SHADER_MAX_INSTANCES        = 65535;
 const UINT D3D11_SHADER_MAX_INTERFACES       = 253;
@@ -101,6 +111,8 @@
 const UINT D3D11_SHADER_MINOR_VERSION        = 0;
 const UINT D3D11_VS_OUTPUT_REGISTER_COUNT    = 32;
 
+const UINT D3D11_OMAC_SIZE = 16;
+
 const UINT D3D11_PS_CS_UAV_REGISTER_COMPONENTS         = 1;
 const UINT D3D11_PS_CS_UAV_REGISTER_COUNT              = 8;
 const UINT D3D11_PS_CS_UAV_REGISTER_READS_PER_INST     = 1;
@@ -223,6 +235,61 @@
     D3D11_BLEND_OP_MAX
 } D3D11_BLEND_OP;
 
+typedef enum D3D11_VIDEO_DECODER_BUFFER_TYPE
+{
+    D3D11_VIDEO_DECODER_BUFFER_PICTURE_PARAMETERS = 0,
+    D3D11_VIDEO_DECODER_BUFFER_MACROBLOCK_CONTROL = 1,
+    D3D11_VIDEO_DECODER_BUFFER_RESIDUAL_DIFFERENCE = 2,
+    D3D11_VIDEO_DECODER_BUFFER_DEBLOCKING_CONTROL = 3,
+    D3D11_VIDEO_DECODER_BUFFER_INVERSE_QUANTIZATION_MATRIX = 4,
+    D3D11_VIDEO_DECODER_BUFFER_SLICE_CONTROL = 5,
+    D3D11_VIDEO_DECODER_BUFFER_BITSTREAM = 6,
+    D3D11_VIDEO_DECODER_BUFFER_MOTION_VECTOR = 7,
+    D3D11_VIDEO_DECODER_BUFFER_FILM_GRAIN = 8,
+} D3D11_VIDEO_DECODER_BUFFER_TYPE;
+
+typedef enum D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE
+{
+    D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_OPAQUE = 0,
+    D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_BACKGROUND = 1,
+    D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_DESTINATION = 2,
+    D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_SOURCE_STREAM = 3,
+} D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE;
+
+typedef enum D3D11_VIDEO_PROCESSOR_OUTPUT_RATE
+{
+    D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_NORMAL = 0,
+    D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_HALF = 1,
+    D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_CUSTOM = 2,
+} D3D11_VIDEO_PROCESSOR_OUTPUT_RATE;
+
+typedef enum D3D11_VIDEO_PROCESSOR_STEREO_FORMAT
+{
+    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO = 0,
+    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_HORIZONTAL = 1,
+    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_VERTICAL = 2,
+    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_SEPARATE = 3,
+    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET = 4,
+    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_ROW_INTERLEAVED = 5,
+    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_COLUMN_INTERLEAVED = 6,
+    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_CHECKERBOARD = 7,
+} D3D11_VIDEO_PROCESSOR_STEREO_FORMAT;
+
+typedef enum D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE
+{
+    D3D11_VIDEO_PROCESSOR_STEREO_FLIP_NONE = 0,
+    D3D11_VIDEO_PROCESSOR_STEREO_FLIP_FRAME0 = 1,
+    D3D11_VIDEO_PROCESSOR_STEREO_FLIP_FRAME1 = 2,
+} D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE;
+
+typedef enum D3D11_VIDEO_PROCESSOR_ROTATION
+{
+    D3D11_VIDEO_PROCESSOR_ROTATION_IDENTITY = 0,
+    D3D11_VIDEO_PROCESSOR_ROTATION_90 = 1,
+    D3D11_VIDEO_PROCESSOR_ROTATION_180 = 2,
+    D3D11_VIDEO_PROCESSOR_ROTATION_270 = 3,
+} D3D11_VIDEO_PROCESSOR_ROTATION;
+
 typedef struct D3D11_BOX
 {
     UINT left;
@@ -362,8 +429,31 @@
     D3D11_FEATURE_FORMAT_SUPPORT,
     D3D11_FEATURE_FORMAT_SUPPORT2,
     D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS,
+    D3D11_FEATURE_D3D11_OPTIONS,
+    D3D11_FEATURE_ARCHITECTURE_INFO,
+    D3D11_FEATURE_D3D9_OPTIONS,
+    D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT,
+    D3D11_FEATURE_D3D9_SHADOW_SUPPORT
 } D3D11_FEATURE;
 
+typedef struct D3D11_FEATURE_DATA_D3D11_OPTIONS
+{
+    BOOL OutputMergerLogicOp;
+    BOOL UAVOnlyRenderingForcedSampleCount;
+    BOOL DiscardAPIsSeenByDriver;
+    BOOL FlagsForUpdateAndCopySeenByDriver;
+    BOOL ClearView;
+    BOOL CopyWithOverlap;
+    BOOL ConstantBufferPartialUpdate;
+    BOOL ConstantBufferOffsetting;
+    BOOL MapNoOverwriteOnDynamicConstantBuffer;
+    BOOL MapNoOverwriteOnDynamicBufferSRV;
+    BOOL MultisampleRTVWithForcedSampleCountOne;
+    BOOL SAD4ShaderInstructions;
+    BOOL ExtendedDoublesShaderInstructions;
+    BOOL ExtendedResourceSharing;
+} D3D11_FEATURE_DATA_D3D11_OPTIONS;
+
 typedef enum D3D11_FILL_MODE
 {
     D3D11_FILL_WIREFRAME = 2,
@@ -505,6 +595,11 @@
     D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM3,
 } D3D11_QUERY;
 
+typedef enum D3D11_QUERY_MISC_FLAG
+{
+    D3D11_QUERY_MISC_PREDICATEHINT = 0x1,
+} D3D11_QUERY_MISC_FLAG;
+
 typedef enum D3D11_ASYNC_GETDATA_FLAG
 {
     D3D11_ASYNC_GETDATA_DONOTFLUSH = 0x0001,
@@ -921,7 +1016,11 @@
     D3D11_FORMAT_SUPPORT_SHADER_GATHER                = 0x00800000,
     D3D11_FORMAT_SUPPORT_BACK_BUFFER_CAST             = 0x01000000,
     D3D11_FORMAT_SUPPORT_TYPED_UNORDERED_ACCESS_VIEW  = 0x02000000,
-    D3D11_FORMAT_SUPPORT_SHADER_GATHER_COMPARISON     = 0x04000000
+    D3D11_FORMAT_SUPPORT_SHADER_GATHER_COMPARISON     = 0x04000000,
+    D3D11_FORMAT_SUPPORT_DECODER_OUTPUT               = 0x08000000,
+    D3D11_FORMAT_SUPPORT_VIDEO_PROCESSOR_OUTPUT       = 0x10000000,
+    D3D11_FORMAT_SUPPORT_VIDEO_PROCESSOR_INPUT        = 0x20000000,
+    D3D11_FORMAT_SUPPORT_VIDEO_ENCODER                = 0x40000000,
 } D3D11_FORMAT_SUPPORT;
 
 typedef enum D3D11_CLEAR_FLAG
@@ -1053,6 +1152,72 @@
     };
 } D3D11_RENDER_TARGET_VIEW_DESC;
 
+cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)")
+cpp_quote("struct CD3D11_RENDER_TARGET_VIEW_DESC : public D3D11_RENDER_TARGET_VIEW_DESC {")
+cpp_quote("    CD3D11_RENDER_TARGET_VIEW_DESC() {}")
+cpp_quote("    explicit CD3D11_RENDER_TARGET_VIEW_DESC(D3D11_RTV_DIMENSION dim, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,")
+cpp_quote("            UINT mip_slice = 0, UINT first_slice = 0, UINT array_size = -1) {")
+cpp_quote("        Format = format;")
+cpp_quote("        ViewDimension = dim;")
+cpp_quote("        switch(dim) {")
+cpp_quote("        case D3D11_RTV_DIMENSION_BUFFER:")
+cpp_quote("            Buffer.FirstElement = mip_slice;")
+cpp_quote("            Buffer.NumElements = first_slice;")
+cpp_quote("            break;")
+cpp_quote("        case D3D11_RTV_DIMENSION_TEXTURE1D:")
+cpp_quote("            Texture1D.MipSlice = mip_slice;")
+cpp_quote("            break;")
+cpp_quote("        case D3D11_RTV_DIMENSION_TEXTURE1DARRAY:")
+cpp_quote("            Texture1DArray.MipSlice = mip_slice;")
+cpp_quote("            Texture1DArray.FirstArraySlice = first_slice;")
+cpp_quote("            Texture1DArray.ArraySize = array_size;")
+cpp_quote("            break;")
+cpp_quote("        case D3D11_RTV_DIMENSION_TEXTURE2D:")
+cpp_quote("            Texture2D.MipSlice = mip_slice;")
+cpp_quote("            break;")
+cpp_quote("        case D3D11_RTV_DIMENSION_TEXTURE2DARRAY:")
+cpp_quote("            Texture2DArray.MipSlice = mip_slice;")
+cpp_quote("            Texture2DArray.FirstArraySlice = first_slice;")
+cpp_quote("            Texture2DArray.ArraySize = array_size;")
+cpp_quote("            break;")
+cpp_quote("        case D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY:")
+cpp_quote("            Texture2DMSArray.FirstArraySlice = first_slice;")
+cpp_quote("            Texture2DMSArray.ArraySize = array_size;")
+cpp_quote("            break;")
+cpp_quote("        case D3D11_RTV_DIMENSION_TEXTURE3D:")
+cpp_quote("            Texture3D.MipSlice = mip_slice;")
+cpp_quote("            Texture3D.FirstWSlice = first_slice;")
+cpp_quote("            Texture3D.WSize = array_size;")
+cpp_quote("            break;")
+cpp_quote("        default:")
+cpp_quote("            break;")
+cpp_quote("        }")
+cpp_quote("    }")
+cpp_quote("    explicit CD3D11_RENDER_TARGET_VIEW_DESC(ID3D11Buffer*, DXGI_FORMAT format, UINT first_elem,")
+cpp_quote("            UINT elem_cnt) {")
+cpp_quote("        Format = format;")
+cpp_quote("        ViewDimension = D3D11_RTV_DIMENSION_BUFFER;")
+cpp_quote("        Buffer.FirstElement = first_elem;")
+cpp_quote("        Buffer.NumElements = elem_cnt;")
+cpp_quote("    }")
+cpp_quote("    explicit CD3D11_RENDER_TARGET_VIEW_DESC(ID3D11Texture1D *texture, D3D11_RTV_DIMENSION dim,")
+cpp_quote("            DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT mip_slice = 0, UINT first_slice = 0,")
+cpp_quote("            UINT array_size = -1);") /* FIXME: implement */
+cpp_quote("    explicit CD3D11_RENDER_TARGET_VIEW_DESC(ID3D11Texture2D *texture, D3D11_RTV_DIMENSION dim,")
+cpp_quote("            DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT mip_slice = 0, UINT first_slice = 0,")
+cpp_quote("            UINT array_size = -1);") /* FIXME: implement */
+cpp_quote("    explicit CD3D11_RENDER_TARGET_VIEW_DESC(ID3D11Texture3D *texture, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,")
+cpp_quote("            UINT mip_slice = 0, UINT first_w_slice = 0, UINT w_slice = -1 );") /* FIXME: implement */
+cpp_quote("    ~CD3D11_RENDER_TARGET_VIEW_DESC() {}")
+cpp_quote("    explicit CD3D11_RENDER_TARGET_VIEW_DESC(const D3D11_RENDER_TARGET_VIEW_DESC &other)")
+cpp_quote("        : D3D11_RENDER_TARGET_VIEW_DESC(other) {}")
+cpp_quote("    operator const D3D11_RENDER_TARGET_VIEW_DESC&() const {")
+cpp_quote("        return *this;")
+cpp_quote("    }")
+cpp_quote("};")
+cpp_quote("#endif")
+
+
 typedef struct D3D11_SAMPLER_DESC
 {
     D3D11_FILTER Filter;
@@ -1131,6 +1296,85 @@
     };
 } D3D11_SHADER_RESOURCE_VIEW_DESC;
 
+cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined( __cplusplus )")
+cpp_quote("struct CD3D11_SHADER_RESOURCE_VIEW_DESC : public D3D11_SHADER_RESOURCE_VIEW_DESC {")
+cpp_quote("    CD3D11_SHADER_RESOURCE_VIEW_DESC() {}")
+cpp_quote("    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(D3D11_SRV_DIMENSION dim,")
+cpp_quote("            DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT most_detailed_mip = 0,")
+cpp_quote("            UINT mip_levels = -1, UINT first_slice = 0, UINT array_size = -1, UINT flags = 0) {")
+cpp_quote("        Format = format;")
+cpp_quote("        ViewDimension = dim;")
+cpp_quote("        switch(ViewDimension) {")
+cpp_quote("        case D3D11_SRV_DIMENSION_BUFFER:")
+cpp_quote("            Buffer.FirstElement = most_detailed_mip;")
+cpp_quote("            Buffer.NumElements = mip_levels;")
+cpp_quote("            break;")
+cpp_quote("        case D3D11_SRV_DIMENSION_TEXTURE1D:")
+cpp_quote("            Texture1D.MostDetailedMip = most_detailed_mip;")
+cpp_quote("            Texture1D.MipLevels = mip_levels;")
+cpp_quote("            break;")
+cpp_quote("        case D3D11_SRV_DIMENSION_TEXTURE1DARRAY:")
+cpp_quote("            Texture1DArray.MostDetailedMip = most_detailed_mip;")
+cpp_quote("            Texture1DArray.MipLevels = mip_levels;")
+cpp_quote("            Texture1DArray.FirstArraySlice = first_slice;")
+cpp_quote("            Texture1DArray.ArraySize = array_size;")
+cpp_quote("            break;")
+cpp_quote("        case D3D11_SRV_DIMENSION_TEXTURE2D:")
+cpp_quote("            Texture2D.MostDetailedMip = most_detailed_mip;")
+cpp_quote("            Texture2D.MipLevels = mip_levels;")
+cpp_quote("            break;")
+cpp_quote("        case D3D11_SRV_DIMENSION_TEXTURE2DARRAY:")
+cpp_quote("            Texture2DArray.MostDetailedMip = most_detailed_mip;")
+cpp_quote("            Texture2DArray.MipLevels = mip_levels;")
+cpp_quote("            Texture2DArray.FirstArraySlice = first_slice;")
+cpp_quote("            Texture2DArray.ArraySize = array_size;")
+cpp_quote("            break;")
+cpp_quote("        case D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY:")
+cpp_quote("            Texture2DMSArray.FirstArraySlice = first_slice;")
+cpp_quote("            Texture2DMSArray.ArraySize = array_size;")
+cpp_quote("            break;")
+cpp_quote("        case D3D11_SRV_DIMENSION_TEXTURE3D:")
+cpp_quote("            Texture3D.MostDetailedMip = most_detailed_mip;")
+cpp_quote("            Texture3D.MipLevels = mip_levels;")
+cpp_quote("            break;")
+cpp_quote("        case D3D11_SRV_DIMENSION_TEXTURECUBE:")
+cpp_quote("            TextureCube.MostDetailedMip = most_detailed_mip;")
+cpp_quote("            TextureCube.MipLevels = mip_levels;")
+cpp_quote("            break;")
+cpp_quote("        case D3D11_SRV_DIMENSION_TEXTURECUBEARRAY:")
+cpp_quote("            TextureCubeArray.MostDetailedMip = most_detailed_mip;")
+cpp_quote("            TextureCubeArray.MipLevels = mip_levels;")
+cpp_quote("            TextureCubeArray.First2DArrayFace = first_slice;")
+cpp_quote("            TextureCubeArray.NumCubes = array_size;")
+cpp_quote("            break;")
+cpp_quote("        case D3D11_SRV_DIMENSION_BUFFEREX:")
+cpp_quote("            BufferEx.FirstElement = most_detailed_mip;")
+cpp_quote("            BufferEx.NumElements = mip_levels;")
+cpp_quote("            BufferEx.Flags = flags;")
+cpp_quote("            break;")
+cpp_quote("        default:")
+cpp_quote("            break;")
+cpp_quote("        }")
+cpp_quote("    }")
+cpp_quote("    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(ID3D11Buffer*, DXGI_FORMAT format, UINT first_elem,")
+cpp_quote("            UINT elem_cnt, UINT flags = 0);") /* FIXME: implement */
+cpp_quote("    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(ID3D11Texture1D *texture, D3D11_SRV_DIMENSION dim,")
+cpp_quote("            DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT most_detailed_mip = 0, UINT mip_levels = -1,")
+cpp_quote("            UINT first_slice = 0, UINT array_size = -1 );") /* FIXME: implement */
+cpp_quote("    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(ID3D11Texture2D *texture, D3D11_SRV_DIMENSION dim,")
+cpp_quote("            DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT most_detailed_mip = 0, UINT mip_levels = -1,")
+cpp_quote("            UINT first_slice = 0, UINT array_size = -1 );") /* FIXME: implement */
+cpp_quote("    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(ID3D11Texture3D *texture, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,")
+cpp_quote("            UINT most_detailed_mip = 0, UINT mip_levels = -1 );")
+cpp_quote("    ~CD3D11_SHADER_RESOURCE_VIEW_DESC() {}")
+cpp_quote("    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(const D3D11_SHADER_RESOURCE_VIEW_DESC &other)")
+cpp_quote("        : D3D11_SHADER_RESOURCE_VIEW_DESC(other) {}")
+cpp_quote("    operator const D3D11_SHADER_RESOURCE_VIEW_DESC&() const {")
+cpp_quote("        return *this;")
+cpp_quote("    }")
+cpp_quote("};")
+cpp_quote("#endif")
+
 typedef struct D3D11_TEXTURE1D_DESC
 {
     UINT Width;
@@ -1195,9 +1439,300 @@
     UINT MiscFlags;
 } D3D11_TEXTURE3D_DESC;
 
-/* A couple forward declarations are needed */
-interface ID3D11Device;
-interface ID3D11ClassLinkage;
+typedef struct D3D11_VIDEO_DECODER_DESC
+{
+    GUID Guid;
+    UINT SampleWidth;
+    UINT SampleHeight;
+    DXGI_FORMAT OutputFormat;
+} D3D11_VIDEO_DECODER_DESC;
+
+typedef struct D3D11_VIDEO_DECODER_CONFIG
+{
+    GUID guidConfigBitstreamEncryption;
+    GUID guidConfigMBcontrolEncryption;
+    GUID guidConfigResidDiffEncryption;
+    UINT ConfigBitstreamRaw;
+    UINT ConfigMBcontrolRasterOrder;
+    UINT ConfigResidDiffHost;
+    UINT ConfigSpatialResid8;
+    UINT ConfigResid8Subtraction;
+    UINT ConfigSpatialHost8or9Clipping;
+    UINT ConfigSpatialResidInterleaved;
+    UINT ConfigIntraResidUnsigned;
+    UINT ConfigResidDiffAccelerator;
+    UINT ConfigHostInverseScan;
+    UINT ConfigSpecificIDCT;
+    UINT Config4GroupedCoefs;
+    USHORT ConfigMinRenderTargetBuffCount;
+    USHORT ConfigDecoderSpecific;
+} D3D11_VIDEO_DECODER_CONFIG;
+
+typedef enum D3D11_VIDEO_FRAME_FORMAT
+{
+    D3D11_VIDEO_FRAME_FORMAT_PROGRESSIVE                   = 0,
+    D3D11_VIDEO_FRAME_FORMAT_INTERLACED_TOP_FIELD_FIRST    = 1,
+    D3D11_VIDEO_FRAME_FORMAT_INTERLACED_BOTTOM_FIELD_FIRST = 2
+} D3D11_VIDEO_FRAME_FORMAT;
+
+typedef enum D3D11_VIDEO_USAGE
+{
+    D3D11_VIDEO_USAGE_PLAYBACK_NORMAL = 0,
+    D3D11_VIDEO_USAGE_OPTIMAL_SPEED   = 1,
+    D3D11_VIDEO_USAGE_OPTIMAL_QUALITY = 2
+} D3D11_VIDEO_USAGE;
+
+typedef struct D3D11_VIDEO_PROCESSOR_CONTENT_DESC
+{
+    D3D11_VIDEO_FRAME_FORMAT InputFrameFormat;
+    DXGI_RATIONAL InputFrameRate;
+    UINT InputWidth;
+    UINT InputHeight;
+    DXGI_RATIONAL OutputFrameRate;
+    UINT OutputWidth;
+    UINT OutputHeight;
+    D3D11_VIDEO_USAGE Usage;
+} D3D11_VIDEO_PROCESSOR_CONTENT_DESC;
+
+typedef struct D3D11_VIDEO_PROCESSOR_CAPS
+{
+    UINT DeviceCaps;
+    UINT FeatureCaps;
+    UINT FilterCaps;
+    UINT InputFormatCaps;
+    UINT AutoStreamCaps;
+    UINT StereoCaps;
+    UINT RateConversionCapsCount;
+    UINT MaxInputStreams;
+    UINT MaxStreamStates;
+} D3D11_VIDEO_PROCESSOR_CAPS;
+
+typedef struct D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS
+{
+    UINT PastFrames;
+    UINT FutureFrames;
+    UINT ProcessorCaps;
+    UINT ITelecineCaps;
+    UINT CustomRateCount;
+} D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS;
+
+typedef struct D3D11_VIDEO_PROCESSOR_CUSTOM_RATE
+{
+    DXGI_RATIONAL CustomRate;
+    UINT OutputFrames;
+    BOOL InputInterlaced;
+    UINT InputFramesOrFields;
+} D3D11_VIDEO_PROCESSOR_CUSTOM_RATE;
+
+typedef enum D3D11_VIDEO_PROCESSOR_FILTER
+{
+    D3D11_VIDEO_PROCESSOR_FILTER_BRIGHTNESS         = 0,
+    D3D11_VIDEO_PROCESSOR_FILTER_CONTRAST           = 1,
+    D3D11_VIDEO_PROCESSOR_FILTER_HUE                = 2,
+    D3D11_VIDEO_PROCESSOR_FILTER_SATURATION         = 3,
+    D3D11_VIDEO_PROCESSOR_FILTER_NOISE_REDUCTION    = 4,
+    D3D11_VIDEO_PROCESSOR_FILTER_EDGE_ENHANCEMENT   = 5,
+    D3D11_VIDEO_PROCESSOR_FILTER_ANAMORPHIC_SCALING = 6,
+    D3D11_VIDEO_PROCESSOR_FILTER_STEREO_ADJUSTMENT  = 7
+} D3D11_VIDEO_PROCESSOR_FILTER;
+
+typedef struct D3D11_VIDEO_PROCESSOR_FILTER_RANGE
+{
+    int Minimum;
+    int Maximum;
+    int Default;
+    float Multiplier;
+} D3D11_VIDEO_PROCESSOR_FILTER_RANGE;
+
+typedef enum D3D11_AUTHENTICATED_CHANNEL_TYPE
+{
+    D3D11_AUTHENTICATED_CHANNEL_D3D11           = 1,
+    D3D11_AUTHENTICATED_CHANNEL_DRIVER_SOFTWARE = 2,
+    D3D11_AUTHENTICATED_CHANNEL_DRIVER_HARDWARE = 3
+} D3D11_AUTHENTICATED_CHANNEL_TYPE;
+
+typedef enum D3D11_VDOV_DIMENSION
+{
+    D3D11_VDOV_DIMENSION_UNKNOWN   = 0,
+    D3D11_VDOV_DIMENSION_TEXTURE2D = 1
+} D3D11_VDOV_DIMENSION;
+
+typedef struct D3D11_TEX2D_VDOV
+{
+    UINT ArraySlice;
+} D3D11_TEX2D_VDOV;
+
+typedef struct D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC
+{
+    GUID DecodeProfile;
+    D3D11_VDOV_DIMENSION ViewDimension;
+    union {
+        D3D11_TEX2D_VDOV Texture2D;
+    };
+} D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC;
+
+typedef enum D3D11_VPIV_DIMENSION
+{
+    D3D11_VPIV_DIMENSION_UNKNOWN   = 0,
+    D3D11_VPIV_DIMENSION_TEXTURE2D = 1
+} D3D11_VPIV_DIMENSION;
+
+typedef struct D3D11_TEX2D_VPIV
+{
+    UINT MipSlice;
+    UINT ArraySlice;
+} D3D11_TEX2D_VPIV;
+
+typedef struct D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC
+{
+    UINT FourCC;
+    D3D11_VPIV_DIMENSION ViewDimension;
+    union {
+        D3D11_TEX2D_VPIV Texture2D;
+    };
+} D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC;
+
+typedef enum D3D11_VPOV_DIMENSION
+{
+    D3D11_VPOV_DIMENSION_UNKNOWN        = 0,
+    D3D11_VPOV_DIMENSION_TEXTURE2D      = 1,
+    D3D11_VPOV_DIMENSION_TEXTURE2DARRAY = 2
+} D3D11_VPOV_DIMENSION;
+
+typedef struct D3D11_TEX2D_VPOV
+{
+    UINT MipSlice;
+} D3D11_TEX2D_VPOV;
+
+typedef struct D3D11_TEX2D_ARRAY_VPOV
+{
+    UINT MipSlice;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D11_TEX2D_ARRAY_VPOV;
+
+typedef struct D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC
+{
+    D3D11_VPOV_DIMENSION ViewDimension;
+    union {
+        D3D11_TEX2D_VPOV Texture2D;
+        D3D11_TEX2D_ARRAY_VPOV Texture2DArray;
+    };
+} D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC;
+
+typedef struct D3D11_VIDEO_CONTENT_PROTECTION_CAPS
+{
+    UINT Caps;
+    UINT KeyExchangeTypeCount;
+    UINT BlockAlignmentSize;
+    ULONGLONG ProtectedMemorySize;
+} D3D11_VIDEO_CONTENT_PROTECTION_CAPS;
+
+typedef struct D3D11_ENCRYPTED_BLOCK_INFO
+{
+    UINT NumEncryptedBytesAtBeginning;
+    UINT NumBytesInSkipPattern;
+    UINT NumBytesInEncryptPattern;
+} D3D11_ENCRYPTED_BLOCK_INFO;
+
+typedef struct D3D11_VIDEO_DECODER_BUFFER_DESC
+{
+    D3D11_VIDEO_DECODER_BUFFER_TYPE BufferType;
+    UINT BufferIndex;
+    UINT DataOffset;
+    UINT DataSize;
+    UINT FirstMBaddress;
+    UINT NumMBsInBuffer;
+    UINT Width;
+    UINT Height;
+    UINT Stride;
+    UINT ReservedBits;
+    void *pIV;
+    UINT IVSize;
+    BOOL PartialEncryption;
+    D3D11_ENCRYPTED_BLOCK_INFO EncryptedBlockInfo;
+} D3D11_VIDEO_DECODER_BUFFER_DESC;
+
+typedef struct D3D11_VIDEO_DECODER_EXTENSION
+{
+    UINT Function;
+    void *pPrivateInputData;
+    UINT PrivateInputDataSize;
+    void *pPrivateOutputData;
+    UINT PrivateOutputDataSize;
+    UINT ResourceCount;
+    ID3D11Resource **ppResourceList;
+} D3D11_VIDEO_DECODER_EXTENSION;
+
+typedef struct D3D11_VIDEO_COLOR_YCbCrA
+{
+    float Y;
+    float Cb;
+    float Cr;
+    float A;
+} D3D11_VIDEO_COLOR_YCbCrA;
+
+typedef struct D3D11_VIDEO_COLOR_RGBA
+{
+    float R;
+    float G;
+    float B;
+    float A;
+} D3D11_VIDEO_COLOR_RGBA;
+
+typedef struct D3D11_VIDEO_COLOR
+{
+    union
+    {
+        D3D11_VIDEO_COLOR_YCbCrA YCbCr;
+        D3D11_VIDEO_COLOR_RGBA RGBA;
+    };
+} D3D11_VIDEO_COLOR;
+
+typedef struct D3D11_VIDEO_PROCESSOR_COLOR_SPACE
+{
+    UINT Usage : 1;
+    UINT RGB_Range : 1;
+    UINT YCbCr_Matrix : 1;
+    UINT YCbCr_xvYCC : 1;
+    UINT Nominal_Range : 2;
+    UINT Reserved : 26;
+} D3D11_VIDEO_PROCESSOR_COLOR_SPACE;
+
+typedef struct D3D11_VIDEO_PROCESSOR_STREAM
+{
+    BOOL Enable;
+    UINT OutputIndex;
+    UINT InputFrameOrField;
+    UINT PastFrames;
+    UINT FutureFrames;
+    ID3D11VideoProcessorInputView **ppPastSurfaces;
+    ID3D11VideoProcessorInputView *pInputSurface;
+    ID3D11VideoProcessorInputView **ppFutureSurfaces;
+    ID3D11VideoProcessorInputView **ppPastSurfacesRight;
+    ID3D11VideoProcessorInputView *pInputSurfaceRight;
+    ID3D11VideoProcessorInputView **ppFutureSurfacesRight;
+} D3D11_VIDEO_PROCESSOR_STREAM;
+
+typedef struct D3D11_OMAC
+{
+      BYTE Omac[D3D11_OMAC_SIZE];
+} D3D11_OMAC;
+
+typedef struct D3D11_AUTHENTICATED_CONFIGURE_OUTPUT
+{
+    D3D11_OMAC omac;
+    GUID ConfigureType;
+    HANDLE hChannel;
+    UINT SequenceNumber;
+    HRESULT ReturnCode;
+} D3D11_AUTHENTICATED_CONFIGURE_OUTPUT;
+
+typedef struct D3D11_QUERY_DATA_TIMESTAMP_DISJOINT
+{
+    UINT64 Frequency;
+    BOOL Disjoint;
+} D3D11_QUERY_DATA_TIMESTAMP_DISJOINT;
 
 [
     object,
@@ -1946,6 +2481,556 @@
 
 [
     object,
+    uuid(3015a308-dcbd-47aa-a747-192486d14d4a),
+    local,
+    pointer_default(unique)
+]
+interface ID3D11AuthenticatedChannel : ID3D11DeviceChild
+{
+    HRESULT GetCertificateSize(
+        UINT *pCertificateSize);
+    HRESULT GetCertificate(
+        UINT CertificateSize,
+        BYTE *pCertificate);
+    void GetChannelHandle(
+        HANDLE *pChannelHandle);
+}
+
+[
+    object,
+    uuid(9b32f9ad-bdcc-40a6-a39d-d5c865845720),
+    local,
+    pointer_default(unique)
+]
+interface ID3D11CryptoSession : ID3D11DeviceChild
+{
+    void GetCryptoType(
+        GUID *pCryptoType);
+    void GetDecoderProfile(
+        GUID *pDecoderProfile);
+    HRESULT GetCertificateSize(
+        UINT *pCertificateSize);
+    HRESULT GetCertificate(
+        UINT CertificateSize,
+        BYTE *pCertificate);
+    void GetCryptoSessionHandle(
+        HANDLE *pCryptoSessionHandle);
+}
+
+[
+    object,
+    uuid(3c9c5b51-995d-48d1-9b8d-fa5caeded65c),
+    local,
+    pointer_default(unique)
+]
+interface ID3D11VideoDecoder : ID3D11DeviceChild
+{
+    HRESULT GetCreationParameters(
+        D3D11_VIDEO_DECODER_DESC *pVideoDesc,
+        D3D11_VIDEO_DECODER_CONFIG *pConfig);
+    HRESULT GetDriverHandle(
+        HANDLE *pDriverHandle);
+}
+
+[
+    object,
+    uuid(31627037-53ab-4200-9061-05faa9ab45f9),
+    local,
+    pointer_default(unique)
+]
+interface ID3D11VideoProcessorEnumerator : ID3D11DeviceChild
+{
+    HRESULT GetVideoProcessorContentDesc(
+        D3D11_VIDEO_PROCESSOR_CONTENT_DESC *pContentDesc);
+    HRESULT CheckVideoProcessorFormat(
+        DXGI_FORMAT Format,
+        UINT *pFlags);
+    HRESULT GetVideoProcessorCaps(
+        D3D11_VIDEO_PROCESSOR_CAPS *pCaps);
+    HRESULT GetVideoProcessorRateConversionCaps(
+        UINT TypeIndex,
+        D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS *pCaps);
+    HRESULT GetVideoProcessorCustomRate(
+        UINT TypeIndex,
+        UINT CustomRateIndex,
+        D3D11_VIDEO_PROCESSOR_CUSTOM_RATE *pRate);
+    HRESULT GetVideoProcessorFilterRange(
+        D3D11_VIDEO_PROCESSOR_FILTER Filter,
+        D3D11_VIDEO_PROCESSOR_FILTER_RANGE *pRange);
+}
+
+[
+    object,
+    uuid(1d7b0652-185f-41c6-85ce-0c5be3d4ae6c),
+    local,
+    pointer_default(unique)
+]
+interface ID3D11VideoProcessor : ID3D11DeviceChild
+{
+    void GetContentDesc(
+        D3D11_VIDEO_PROCESSOR_CONTENT_DESC *pDesc);
+    void GetRateConversionCaps(
+        D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS *pCaps);
+}
+
+[
+    object,
+    uuid(c2931aea-2a85-4f20-860f-fba1fd256e18),
+    local,
+    pointer_default(unique)
+]
+interface ID3D11VideoDecoderOutputView : ID3D11View
+{
+    void GetDesc(
+        D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC *pDesc);
+}
+
+[
+    object,
+    uuid(11ec5a5f-51dc-4945-ab34-6e8c21300ea5),
+    local,
+    pointer_default(unique)
+]
+interface ID3D11VideoProcessorInputView : ID3D11View
+{
+    void GetDesc(
+        D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC *pDesc);
+}
+
+[
+    object,
+    uuid(a048285e-25a9-4527-bd93-d68b68c44254),
+    local,
+    pointer_default(unique)
+]
+interface ID3D11VideoProcessorOutputView : ID3D11View
+{
+    void GetDesc(
+        D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC *pDesc);
+}
+
+[
+    object,
+    uuid(10ec4d5b-975a-4689-b9e4-d0aac30fe333),
+    local,
+    pointer_default(unique)
+]
+interface ID3D11VideoDevice : IUnknown
+{
+    HRESULT CreateVideoDecoder(
+        const D3D11_VIDEO_DECODER_DESC *pVideoDesc,
+        const D3D11_VIDEO_DECODER_CONFIG *pConfig,
+        ID3D11VideoDecoder **ppDecoder);
+    HRESULT CreateVideoProcessor(
+        ID3D11VideoProcessorEnumerator *pEnum,
+        UINT RateConversionIndex,
+        ID3D11VideoProcessor **ppVideoProcessor);
+    HRESULT CreateAuthenticatedChannel(
+        D3D11_AUTHENTICATED_CHANNEL_TYPE ChannelType,
+        ID3D11AuthenticatedChannel **ppAuthenticatedChannel);
+    HRESULT CreateCryptoSession(
+        const GUID *pCryptoType,
+        const GUID *pDecoderProfile,
+        const GUID *pKeyExchangeType,
+        ID3D11CryptoSession **ppCryptoSession);
+    HRESULT CreateVideoDecoderOutputView(
+        ID3D11Resource *pResource,
+        const D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC *pDesc,
+        ID3D11VideoDecoderOutputView **ppVDOVView);
+    HRESULT CreateVideoProcessorInputView(
+        ID3D11Resource *pResource,
+        ID3D11VideoProcessorEnumerator *pEnum,
+        const D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC *pDesc,
+        ID3D11VideoProcessorInputView **ppVPIView);
+    HRESULT CreateVideoProcessorOutputView(
+        ID3D11Resource *pResource,
+        ID3D11VideoProcessorEnumerator *pEnum,
+        const D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC *pDesc,
+        ID3D11VideoProcessorOutputView **ppVPOView);
+    HRESULT CreateVideoProcessorEnumerator(
+        const D3D11_VIDEO_PROCESSOR_CONTENT_DESC *pDesc,
+        ID3D11VideoProcessorEnumerator **ppEnum);
+    UINT GetVideoDecoderProfileCount();
+    HRESULT GetVideoDecoderProfile(
+        UINT Index,
+        GUID *pDecoderProfile);
+    HRESULT CheckVideoDecoderFormat(
+        const GUID *pDecoderProfile,
+        DXGI_FORMAT Format,
+        BOOL *pSupported);
+    HRESULT GetVideoDecoderConfigCount(
+        const D3D11_VIDEO_DECODER_DESC *pDesc,
+        UINT *pCount);
+    HRESULT GetVideoDecoderConfig(
+        const D3D11_VIDEO_DECODER_DESC *pDesc,
+        UINT Index,
+        D3D11_VIDEO_DECODER_CONFIG *pConfig);
+    HRESULT GetContentProtectionCaps(
+        const GUID *pCryptoType,
+        const GUID *pDecoderProfile,
+        D3D11_VIDEO_CONTENT_PROTECTION_CAPS *pCaps);
+    HRESULT CheckCryptoKeyExchange(
+        const GUID *pCryptoType,
+        const GUID *pDecoderProfile,
+        UINT Index,
+        GUID *pKeyExchangeType);
+    HRESULT SetPrivateData(
+        REFGUID guid,
+        UINT DataSize,
+        const void *pData);
+    HRESULT SetPrivateDataInterface(
+        REFGUID guid,
+        const IUnknown *pData);
+}
+
+[
+    object,
+    uuid(61f21c45-3c0e-4a74-9cea-67100d9ad5e4),
+    local,
+    pointer_default(unique)
+]
+interface ID3D11VideoContext : ID3D11DeviceChild
+{
+    HRESULT GetDecoderBuffer(
+        [in] ID3D11VideoDecoder *decoder,
+        [in] D3D11_VIDEO_DECODER_BUFFER_TYPE type,
+        [out] UINT *buffer_size,
+        [out] void **buffer
+    );
+    HRESULT ReleaseDecoderBuffer(
+        [in] ID3D11VideoDecoder *decoder,
+        [in] D3D11_VIDEO_DECODER_BUFFER_TYPE type
+    );
+    HRESULT DecoderBeginFrame(
+        [in] ID3D11VideoDecoder *decoder,
+        [in] ID3D11VideoDecoderOutputView *view,
+        [in] UINT key_size,
+        [in] const void *key
+    );
+    HRESULT DecoderEndFrame(
+        [in] ID3D11VideoDecoder *decoder
+    );
+    HRESULT SubmitDecoderBuffers(
+        [in] ID3D11VideoDecoder *decoder,
+        [in] UINT buffers_count,
+        [in] const D3D11_VIDEO_DECODER_BUFFER_DESC *buffer_desc
+    );
+    HRESULT DecoderExtension(
+        [in] ID3D11VideoDecoder *decoder,
+        [in] const D3D11_VIDEO_DECODER_EXTENSION *extension
+    );
+    void VideoProcessorSetOutputTargetRect(
+        [in] ID3D11VideoProcessor *processor,
+        [in] BOOL enable,
+        [in] const RECT *rect
+    );
+    void VideoProcessorSetOutputBackgroundColor(
+        [in] ID3D11VideoProcessor *processor,
+        [in] BOOL y_cb_cr,
+        [in] const D3D11_VIDEO_COLOR *color
+    );
+    void VideoProcessorSetOutputColorSpace(
+        [in] ID3D11VideoProcessor *processor,
+        [in] const D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space
+    );
+    void VideoProcessorSetOutputAlphaFillMode(
+        [in] ID3D11VideoProcessor *processor,
+        [in] D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE alpha_fill_mode,
+        [in] UINT stream_idx
+    );
+    void VideoProcessorSetOutputConstriction(
+        [in] ID3D11VideoProcessor *processor,
+        [in] BOOL enable,
+        [in] SIZE size
+    );
+    void VideoProcessorSetOutputStereoMode(
+        [in] ID3D11VideoProcessor *processor,
+        [in] BOOL enable
+    );
+    HRESULT VideoProcessorSetOutputExtension(
+        [in] ID3D11VideoProcessor *processor,
+        [in] const GUID *guid,
+        [in] UINT data_size,
+        [in] void *data
+    );
+    void VideoProcessorGetOutputTargetRect(
+        [in] ID3D11VideoProcessor *processor,
+        [out] BOOL *enabled,
+        [out] RECT *rect
+    );
+    void VideoProcessorGetOutputBackgroundColor(
+        [in] ID3D11VideoProcessor *processor,
+        [out] BOOL *y_cb_cr,
+        [out] D3D11_VIDEO_COLOR *color
+    );
+    void VideoProcessorGetOutputColorSpace(
+        [in] ID3D11VideoProcessor *processor,
+        [out] D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space
+    );
+    void VideoProcessorGetOutputAlphaFillMode(
+        [in] ID3D11VideoProcessor *processor,
+        [out] D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE *alpha_fill_mode,
+        [out] UINT *stream_idx
+    );
+    void VideoProcessorGetOutputConstriction(
+        [in] ID3D11VideoProcessor *processor,
+        [out] BOOL *enabled,
+        [out] SIZE *size
+    );
+    void VideoProcessorGetOutputStereoMode(
+        [in] ID3D11VideoProcessor *processor,
+        [out] BOOL *enabled
+    );
+    HRESULT VideoProcessorGetOutputExtension(
+        [in] ID3D11VideoProcessor *processor,
+        [in] const GUID *guid,
+        [in] UINT data_size,
+        [out] void *data
+    );
+    void VideoProcessorSetStreamFrameFormat(
+        [in] ID3D11VideoProcessor *processor,
+        [in] UINT stream_idx,
+        [in] D3D11_VIDEO_FRAME_FORMAT format
+    );
+    void VideoProcessorSetStreamColorSpace(
+        [in] ID3D11VideoProcessor *processor,
+        [in] UINT stream_idx,
+        [in] const D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space
+    );
+    void VideoProcessorSetStreamOutputRate(
+        [in] ID3D11VideoProcessor *processor,
+        [in] UINT stream_idx,
+        [in] D3D11_VIDEO_PROCESSOR_OUTPUT_RATE rate,
+        [in] BOOL repeat,
+        [in] const DXGI_RATIONAL *custom_rate
+    );
+    void VideoProcessorSetStreamSourceRect(
+        [in] ID3D11VideoProcessor *processor,
+        [in] UINT stream_idx,
+        [in] BOOL enable,
+        [in] const RECT *rect
+    );
+    void VideoProcessorSetStreamDestRect(
+        [in] ID3D11VideoProcessor *processor,
+        [in] UINT stream_idx,
+        [in] BOOL enable,
+        [in] const RECT *rect
+    );
+    void VideoProcessorSetStreamAlpha(
+        [in] ID3D11VideoProcessor *processor,
+        [in] UINT stream_idx,
+        [in] BOOL enable,
+        [in] float alpha
+    );
+    void VideoProcessorSetStreamPalette(
+        [in] ID3D11VideoProcessor *processor,
+        [in] UINT stream_idx,
+        [in] UINT entry_count,
+        [in] const UINT *entries
+    );
+    void VideoProcessorSetStreamPixelAspectRatio(
+        [in] ID3D11VideoProcessor *processor,
+        [in] UINT stream_idx,
+        [in] BOOL enable,
+        [in] const DXGI_RATIONAL *src_aspect_ratio,
+        [in] const DXGI_RATIONAL *dst_aspect_ratio
+    );
+    void VideoProcessorSetStreamLumaKey(
+        [in] ID3D11VideoProcessor *processor,
+        [in] UINT stream_idx,
+        [in] BOOL enable,
+        [in] float lower,
+        [in] float upper
+    );
+    void VideoProcessorSetStreamStereoFormat(
+        [in] ID3D11VideoProcessor *processor,
+        [in] UINT stream_idx,
+        [in] BOOL enable,
+        [in] D3D11_VIDEO_PROCESSOR_STEREO_FORMAT format,
+        [in] BOOL left_view_frame0,
+        [in] BOOL base_view_frame0,
+        [in] D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE flip_mode,
+        [in] int mono_offset
+    );
+    void VideoProcessorSetStreamAutoProcessingMode(
+        [in] ID3D11VideoProcessor *processor,
+        [in] UINT stream_idx,
+        [in] BOOL enable
+    );
+    void VideoProcessorSetStreamFilter(
+        [in] ID3D11VideoProcessor *processor,
+        [in] UINT stream_idx,
+        [in] D3D11_VIDEO_PROCESSOR_FILTER filter,
+        [in] BOOL enable,
+        [in] int level
+    );
+    HRESULT VideoProcessorSetStreamExtension(
+        [in] ID3D11VideoProcessor *processor,
+        [in] UINT stream_idx,
+        [in] const GUID *guid,
+        [in] UINT data_size,
+        [in] void *data
+    );
+    void VideoProcessorGetStreamFrameFormat(
+        [in] ID3D11VideoProcessor *processor,
+        [in] UINT stream_idx,
+        [out] D3D11_VIDEO_FRAME_FORMAT *format
+    );
+    void VideoProcessorGetStreamColorSpace(
+        [in] ID3D11VideoProcessor *processor,
+        [in] UINT stream_idx,
+        [out] D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space
+    );
+    void VideoProcessorGetStreamOutputRate(
+        [in] ID3D11VideoProcessor *processor,
+        [in] UINT stream_idx,
+        [out] D3D11_VIDEO_PROCESSOR_OUTPUT_RATE *rate,
+        [out] BOOL *repeat,
+        [out] DXGI_RATIONAL *custom_rate
+    );
+    void VideoProcessorGetStreamSourceRect(
+        [in] ID3D11VideoProcessor *processor,
+        [in] UINT stream_idx,
+        [out] BOOL *enabled,
+        [out] RECT *rect
+    );
+    void VideoProcessorGetStreamDestRect(
+        [in] ID3D11VideoProcessor *processor,
+        [in] UINT stream_idx,
+        [out] BOOL *enabled,
+        [out] RECT *rect
+    );
+    void VideoProcessorGetStreamAlpha(
+        [in] ID3D11VideoProcessor *processor,
+        [in] UINT stream_idx,
+        [out] BOOL *enabled,
+        [out] float *alpha
+    );
+    void VideoProcessorGetStreamPalette(
+        [in] ID3D11VideoProcessor *processor,
+        [in] UINT stream_idx,
+        [in] UINT entry_count,
+        [out] UINT *entries
+    );
+    void VideoProcessorGetStreamPixelAspectRatio(
+        [in] ID3D11VideoProcessor *processor,
+        [in] UINT stream_idx,
+        [out] BOOL *enabled,
+        [out] DXGI_RATIONAL *src_aspect_ratio,
+        [out] DXGI_RATIONAL *dst_aspect_ratio
+    );
+    void VideoProcessorGetStreamLumaKey(
+        [in] ID3D11VideoProcessor *processor,
+        [in] UINT stream_idx,
+        [out] BOOL *enabled,
+        [out] float *lower,
+        [out] float *upper
+    );
+    void VideoProcessorGetStreamStereoFormat(
+        [in] ID3D11VideoProcessor *processor,
+        [in] UINT stream_idx,
+        [out] BOOL *enabled,
+        [out] D3D11_VIDEO_PROCESSOR_STEREO_FORMAT *format,
+        [out] BOOL *left_view_frame0,
+        [out] BOOL *base_view_frame0,
+        [out] D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE *flip_mode,
+        [out] int *mono_offset
+    );
+    void VideoProcessorGetStreamAutoProcessingMode(
+        [in] ID3D11VideoProcessor *processor,
+        [in] UINT stream_idx,
+        [out] BOOL *enabled
+    );
+    void VideoProcessorGetStreamFilter(
+        [in] ID3D11VideoProcessor *processor,
+        [in] UINT stream_idx,
+        [in] D3D11_VIDEO_PROCESSOR_FILTER filter,
+        [out] BOOL *enabled,
+        [out] int *level
+    );
+    HRESULT VideoProcessorGetStreamExtension(
+        [in] ID3D11VideoProcessor *processor,
+        [in] UINT stream_idx,
+        [in] const GUID *guid,
+        [in] UINT data_size,
+        [out] void *data
+    );
+    HRESULT VideoProcessorBlt(
+        [in] ID3D11VideoProcessor *processor,
+        [in] ID3D11VideoProcessorOutputView *view,
+        [in] UINT frame_idx,
+        [in] UINT stream_count,
+        [in] const D3D11_VIDEO_PROCESSOR_STREAM *streams
+    );
+    HRESULT NegotiateCryptoSessionKeyExchange(
+        [in] ID3D11CryptoSession *session,
+        [in] UINT data_size,
+        [in, out] void *data
+    );
+    void EncryptionBlt(
+        [in] ID3D11CryptoSession *session,
+        [in] ID3D11Texture2D *src_surface,
+        [in] ID3D11Texture2D *dst_surface,
+        [in] UINT iv_size,
+        [in, out] void *iv
+    );
+    void DecryptionBlt(
+        [in] ID3D11CryptoSession *session,
+        [in] ID3D11Texture2D *src_surface,
+        [in] ID3D11Texture2D *dst_surface,
+        [in] D3D11_ENCRYPTED_BLOCK_INFO *block_info,
+        [in] UINT key_size,
+        [in] const void *key,
+        [in] UINT iv_size,
+        [in, out] void *iv
+    );
+    void StartSessionKeyRefresh(
+        [in] ID3D11CryptoSession *session,
+        [in] UINT random_number_size,
+        [out] void *random_number
+    );
+    void FinishSessionKeyRefresh(
+        [in] ID3D11CryptoSession *session
+    );
+    HRESULT GetEncryptionBltKey(
+        [in] ID3D11CryptoSession *session,
+        [in] UINT key_size,
+        [out] void *key
+    );
+    HRESULT NegotiateAuthenticatedChannelKeyExchange(
+        [in] ID3D11AuthenticatedChannel *channel,
+        [in] UINT data_size,
+        [in, out] void *data
+    );
+    HRESULT QueryAuthenticatedChannel(
+        [in] ID3D11AuthenticatedChannel *channel,
+        [in] UINT input_size,
+        [in] const void *input,
+        [in] UINT output_size,
+        [out] void *output
+    );
+    HRESULT ConfigureAuthenticatedChannel(
+        [in] ID3D11AuthenticatedChannel *channel,
+        [in] UINT input_size,
+        [in] const void *input,
+        [out] D3D11_AUTHENTICATED_CONFIGURE_OUTPUT *output
+    );
+    void VideoProcessorSetStreamRotation(
+        [in] ID3D11VideoProcessor *processor,
+        [in] UINT stream_idx,
+        [in] BOOL enable,
+        [in] D3D11_VIDEO_PROCESSOR_ROTATION rotation
+    );
+    void VideoProcessorGetStreamRotation(
+        [in] ID3D11VideoProcessor *processor,
+        [in] UINT stream_idx,
+        [out] BOOL *enable,
+        [out] D3D11_VIDEO_PROCESSOR_ROTATION *rotation
+    );
+}
+
+[
+    object,
     local,
     uuid(db6f6ddb-ac77-4e88-8253-819df9bbf140)
 ]
@@ -2134,3 +3219,8 @@
 cpp_quote("typedef HRESULT (WINAPI *PFN_D3D11_CREATE_DEVICE_AND_SWAP_CHAIN)(IDXGIAdapter*,D3D_DRIVER_TYPE,HMODULE,UINT,")
 cpp_quote("    const D3D_FEATURE_LEVEL*,UINT,UINT,const DXGI_SWAP_CHAIN_DESC*,IDXGISwapChain**,ID3D11Device**,")
 cpp_quote("    D3D_FEATURE_LEVEL*,ID3D11DeviceContext**);")
+
+[local] HRESULT __stdcall D3D11CreateDeviceAndSwapChain(IDXGIAdapter *adapter, D3D_DRIVER_TYPE driver_type,
+        HMODULE swrast, UINT flags, const D3D_FEATURE_LEVEL *feature_levels, UINT levels, UINT sdk_version,
+        const DXGI_SWAP_CHAIN_DESC *swapchain_desc, IDXGISwapChain **swapchain, ID3D11Device **device,
+        D3D_FEATURE_LEVEL *obtained_feature_level, ID3D11DeviceContext **immediate_context);
diff --git a/x86_64-w64-mingw32/include/d3d11_1.h b/x86_64-w64-mingw32/include/d3d11_1.h
index e4ffaca..51ca735 100644
--- a/x86_64-w64-mingw32/include/d3d11_1.h
+++ b/x86_64-w64-mingw32/include/d3d11_1.h
@@ -471,7 +471,7 @@
 
     virtual void STDMETHODCALLTYPE ClearView(
         ID3D11View *pView,
-        FLOAT Color[4],
+        const FLOAT Color[4],
         const D3D11_RECT *pRect,
         UINT NumRects) = 0;
 
@@ -1279,7 +1279,7 @@
     void (STDMETHODCALLTYPE *ClearView)(
         ID3D11DeviceContext1* This,
         ID3D11View *pView,
-        FLOAT Color[4],
+        const FLOAT Color[4],
         const D3D11_RECT *pRect,
         UINT NumRects);
 
@@ -1836,7 +1836,7 @@
 static FORCEINLINE void ID3D11DeviceContext1_SwapDeviceContextState(ID3D11DeviceContext1* This,ID3DDeviceContextState *pState,ID3DDeviceContextState **ppPreviousState) {
     This->lpVtbl->SwapDeviceContextState(This,pState,ppPreviousState);
 }
-static FORCEINLINE void ID3D11DeviceContext1_ClearView(ID3D11DeviceContext1* This,ID3D11View *pView,FLOAT Color[4],const D3D11_RECT *pRect,UINT NumRects) {
+static FORCEINLINE void ID3D11DeviceContext1_ClearView(ID3D11DeviceContext1* This,ID3D11View *pView,const FLOAT Color[4],const D3D11_RECT *pRect,UINT NumRects) {
     This->lpVtbl->ClearView(This,pView,Color,pRect,NumRects);
 }
 static FORCEINLINE void ID3D11DeviceContext1_DiscardView1(ID3D11DeviceContext1* This,ID3D11View *pResourceView,const D3D11_RECT *pRects,UINT NumRects) {
@@ -2049,7 +2049,7 @@
 void STDMETHODCALLTYPE ID3D11DeviceContext1_ClearView_Proxy(
     ID3D11DeviceContext1* This,
     ID3D11View *pView,
-    FLOAT Color[4],
+    const FLOAT Color[4],
     const D3D11_RECT *pRect,
     UINT NumRects);
 void __RPC_STUB ID3D11DeviceContext1_ClearView_Stub(
diff --git a/x86_64-w64-mingw32/include/d3d11_1.idl b/x86_64-w64-mingw32/include/d3d11_1.idl
index 1ebfc5a..1a46abf 100644
--- a/x86_64-w64-mingw32/include/d3d11_1.idl
+++ b/x86_64-w64-mingw32/include/d3d11_1.idl
@@ -217,7 +217,7 @@
 
     void ClearView(
             ID3D11View *pView,
-            FLOAT Color[4],
+            const FLOAT Color[4],
             const D3D11_RECT *pRect,
             UINT NumRects);
 
diff --git a/x86_64-w64-mingw32/include/d3d11sdklayers.h b/x86_64-w64-mingw32/include/d3d11sdklayers.h
index efce823..05faeba 100644
--- a/x86_64-w64-mingw32/include/d3d11sdklayers.h
+++ b/x86_64-w64-mingw32/include/d3d11sdklayers.h
@@ -17,6 +17,11 @@
 
 /* Forward declarations */
 
+#ifndef __ID3D11Debug_FWD_DEFINED__
+#define __ID3D11Debug_FWD_DEFINED__
+typedef interface ID3D11Debug ID3D11Debug;
+#endif
+
 #ifndef __ID3D11InfoQueue_FWD_DEFINED__
 #define __ID3D11InfoQueue_FWD_DEFINED__
 typedef interface ID3D11InfoQueue ID3D11InfoQueue;
@@ -1190,6 +1195,10 @@
     D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_NOT_SET_DUE_TO_FLIP_PRESENT = 0x300163,
     D3D11_MESSAGE_ID_D3D11_1_MESSAGES_END = 0x300164
 } D3D11_MESSAGE_ID;
+typedef enum D3D11_RLDO_FLAGS {
+    D3D11_RLDO_SUMMARY = 1,
+    D3D11_RLDO_DETAIL = 2
+} D3D11_RLDO_FLAGS;
 typedef struct D3D11_MESSAGE {
     D3D11_MESSAGE_CATEGORY Category;
     D3D11_MESSAGE_SEVERITY Severity;
@@ -1211,6 +1220,238 @@
 } D3D11_INFO_QUEUE_FILTER;
 #define D3D11_INFO_QUEUE_DEFAULT_MESSAGE_COUNT_LIMIT 1024
 /*****************************************************************************
+ * ID3D11Debug interface
+ */
+#ifndef __ID3D11Debug_INTERFACE_DEFINED__
+#define __ID3D11Debug_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D11Debug, 0x79cf2233, 0x7536, 0x4948, 0x9d,0x36, 0x1e,0x46,0x92,0xdc,0x57,0x60);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("79cf2233-7536-4948-9d36-1e4692dc5760")
+ID3D11Debug : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE SetFeatureMask(
+        UINT Mask) = 0;
+
+    virtual UINT STDMETHODCALLTYPE GetFeatureMask(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPresentPerRenderOpDelay(
+        UINT Milliseconds) = 0;
+
+    virtual UINT STDMETHODCALLTYPE GetPresentPerRenderOpDelay(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetSwapChain(
+        IDXGISwapChain *pSwapChain) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSwapChain(
+        IDXGISwapChain **ppSwapChain) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ValidateContext(
+        ID3D11DeviceContext *pContext) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ReportLiveDeviceObjects(
+        D3D11_RLDO_FLAGS Flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ValidateContextForDispatch(
+        ID3D11DeviceContext *pContext) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D11Debug, 0x79cf2233, 0x7536, 0x4948, 0x9d,0x36, 0x1e,0x46,0x92,0xdc,0x57,0x60)
+#endif
+#else
+typedef struct ID3D11DebugVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D11Debug* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D11Debug* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D11Debug* This);
+
+    /*** ID3D11Debug methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetFeatureMask)(
+        ID3D11Debug* This,
+        UINT Mask);
+
+    UINT (STDMETHODCALLTYPE *GetFeatureMask)(
+        ID3D11Debug* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetPresentPerRenderOpDelay)(
+        ID3D11Debug* This,
+        UINT Milliseconds);
+
+    UINT (STDMETHODCALLTYPE *GetPresentPerRenderOpDelay)(
+        ID3D11Debug* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetSwapChain)(
+        ID3D11Debug* This,
+        IDXGISwapChain *pSwapChain);
+
+    HRESULT (STDMETHODCALLTYPE *GetSwapChain)(
+        ID3D11Debug* This,
+        IDXGISwapChain **ppSwapChain);
+
+    HRESULT (STDMETHODCALLTYPE *ValidateContext)(
+        ID3D11Debug* This,
+        ID3D11DeviceContext *pContext);
+
+    HRESULT (STDMETHODCALLTYPE *ReportLiveDeviceObjects)(
+        ID3D11Debug* This,
+        D3D11_RLDO_FLAGS Flags);
+
+    HRESULT (STDMETHODCALLTYPE *ValidateContextForDispatch)(
+        ID3D11Debug* This,
+        ID3D11DeviceContext *pContext);
+
+    END_INTERFACE
+} ID3D11DebugVtbl;
+interface ID3D11Debug {
+    CONST_VTBL ID3D11DebugVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D11Debug_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D11Debug_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D11Debug_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D11Debug methods ***/
+#define ID3D11Debug_SetFeatureMask(This,Mask) (This)->lpVtbl->SetFeatureMask(This,Mask)
+#define ID3D11Debug_GetFeatureMask(This) (This)->lpVtbl->GetFeatureMask(This)
+#define ID3D11Debug_SetPresentPerRenderOpDelay(This,Milliseconds) (This)->lpVtbl->SetPresentPerRenderOpDelay(This,Milliseconds)
+#define ID3D11Debug_GetPresentPerRenderOpDelay(This) (This)->lpVtbl->GetPresentPerRenderOpDelay(This)
+#define ID3D11Debug_SetSwapChain(This,pSwapChain) (This)->lpVtbl->SetSwapChain(This,pSwapChain)
+#define ID3D11Debug_GetSwapChain(This,ppSwapChain) (This)->lpVtbl->GetSwapChain(This,ppSwapChain)
+#define ID3D11Debug_ValidateContext(This,pContext) (This)->lpVtbl->ValidateContext(This,pContext)
+#define ID3D11Debug_ReportLiveDeviceObjects(This,Flags) (This)->lpVtbl->ReportLiveDeviceObjects(This,Flags)
+#define ID3D11Debug_ValidateContextForDispatch(This,pContext) (This)->lpVtbl->ValidateContextForDispatch(This,pContext)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ID3D11Debug_QueryInterface(ID3D11Debug* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ID3D11Debug_AddRef(ID3D11Debug* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ID3D11Debug_Release(ID3D11Debug* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D11Debug methods ***/
+static FORCEINLINE HRESULT ID3D11Debug_SetFeatureMask(ID3D11Debug* This,UINT Mask) {
+    return This->lpVtbl->SetFeatureMask(This,Mask);
+}
+static FORCEINLINE UINT ID3D11Debug_GetFeatureMask(ID3D11Debug* This) {
+    return This->lpVtbl->GetFeatureMask(This);
+}
+static FORCEINLINE HRESULT ID3D11Debug_SetPresentPerRenderOpDelay(ID3D11Debug* This,UINT Milliseconds) {
+    return This->lpVtbl->SetPresentPerRenderOpDelay(This,Milliseconds);
+}
+static FORCEINLINE UINT ID3D11Debug_GetPresentPerRenderOpDelay(ID3D11Debug* This) {
+    return This->lpVtbl->GetPresentPerRenderOpDelay(This);
+}
+static FORCEINLINE HRESULT ID3D11Debug_SetSwapChain(ID3D11Debug* This,IDXGISwapChain *pSwapChain) {
+    return This->lpVtbl->SetSwapChain(This,pSwapChain);
+}
+static FORCEINLINE HRESULT ID3D11Debug_GetSwapChain(ID3D11Debug* This,IDXGISwapChain **ppSwapChain) {
+    return This->lpVtbl->GetSwapChain(This,ppSwapChain);
+}
+static FORCEINLINE HRESULT ID3D11Debug_ValidateContext(ID3D11Debug* This,ID3D11DeviceContext *pContext) {
+    return This->lpVtbl->ValidateContext(This,pContext);
+}
+static FORCEINLINE HRESULT ID3D11Debug_ReportLiveDeviceObjects(ID3D11Debug* This,D3D11_RLDO_FLAGS Flags) {
+    return This->lpVtbl->ReportLiveDeviceObjects(This,Flags);
+}
+static FORCEINLINE HRESULT ID3D11Debug_ValidateContextForDispatch(ID3D11Debug* This,ID3D11DeviceContext *pContext) {
+    return This->lpVtbl->ValidateContextForDispatch(This,pContext);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ID3D11Debug_SetFeatureMask_Proxy(
+    ID3D11Debug* This,
+    UINT Mask);
+void __RPC_STUB ID3D11Debug_SetFeatureMask_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+UINT STDMETHODCALLTYPE ID3D11Debug_GetFeatureMask_Proxy(
+    ID3D11Debug* This);
+void __RPC_STUB ID3D11Debug_GetFeatureMask_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11Debug_SetPresentPerRenderOpDelay_Proxy(
+    ID3D11Debug* This,
+    UINT Milliseconds);
+void __RPC_STUB ID3D11Debug_SetPresentPerRenderOpDelay_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+UINT STDMETHODCALLTYPE ID3D11Debug_GetPresentPerRenderOpDelay_Proxy(
+    ID3D11Debug* This);
+void __RPC_STUB ID3D11Debug_GetPresentPerRenderOpDelay_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11Debug_SetSwapChain_Proxy(
+    ID3D11Debug* This,
+    IDXGISwapChain *pSwapChain);
+void __RPC_STUB ID3D11Debug_SetSwapChain_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11Debug_GetSwapChain_Proxy(
+    ID3D11Debug* This,
+    IDXGISwapChain **ppSwapChain);
+void __RPC_STUB ID3D11Debug_GetSwapChain_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11Debug_ValidateContext_Proxy(
+    ID3D11Debug* This,
+    ID3D11DeviceContext *pContext);
+void __RPC_STUB ID3D11Debug_ValidateContext_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11Debug_ReportLiveDeviceObjects_Proxy(
+    ID3D11Debug* This,
+    D3D11_RLDO_FLAGS Flags);
+void __RPC_STUB ID3D11Debug_ReportLiveDeviceObjects_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ID3D11Debug_ValidateContextForDispatch_Proxy(
+    ID3D11Debug* This,
+    ID3D11DeviceContext *pContext);
+void __RPC_STUB ID3D11Debug_ValidateContextForDispatch_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ID3D11Debug_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
  * ID3D11InfoQueue interface
  */
 #ifndef __ID3D11InfoQueue_INTERFACE_DEFINED__
diff --git a/x86_64-w64-mingw32/include/d3d11sdklayers.idl b/x86_64-w64-mingw32/include/d3d11sdklayers.idl
index e74922a..638e53c 100644
--- a/x86_64-w64-mingw32/include/d3d11sdklayers.idl
+++ b/x86_64-w64-mingw32/include/d3d11sdklayers.idl
@@ -1184,6 +1184,11 @@
     D3D11_MESSAGE_ID_D3D11_1_MESSAGES_END
 } D3D11_MESSAGE_ID;
 
+typedef enum D3D11_RLDO_FLAGS {
+    D3D11_RLDO_SUMMARY = 1,
+    D3D11_RLDO_DETAIL = 2
+} D3D11_RLDO_FLAGS;
+
 typedef struct D3D11_MESSAGE {
     D3D11_MESSAGE_CATEGORY Category;
     D3D11_MESSAGE_SEVERITY Severity;
@@ -1210,6 +1215,24 @@
 
 [
     object,
+    uuid(79cf2233-7536-4948-9d36-1e4692dc5760),
+    local,
+    pointer_default(unique)
+]
+interface ID3D11Debug : IUnknown {
+    HRESULT SetFeatureMask(UINT Mask);
+    UINT GetFeatureMask();
+    HRESULT SetPresentPerRenderOpDelay(UINT Milliseconds);
+    UINT GetPresentPerRenderOpDelay();
+    HRESULT SetSwapChain(IDXGISwapChain *pSwapChain);
+    HRESULT GetSwapChain(IDXGISwapChain **ppSwapChain);
+    HRESULT ValidateContext(ID3D11DeviceContext *pContext);
+    HRESULT ReportLiveDeviceObjects(D3D11_RLDO_FLAGS Flags);
+    HRESULT ValidateContextForDispatch(ID3D11DeviceContext *pContext);
+}
+
+[
+    object,
     uuid(6543dbb6-1b48-42f5-ab82-e97ec74326f6),
     local,
     pointer_default(unique)
diff --git a/x86_64-w64-mingw32/include/d3d8types.h b/x86_64-w64-mingw32/include/d3d8types.h
index d797d81..d14e20a 100644
--- a/x86_64-w64-mingw32/include/d3d8types.h
+++ b/x86_64-w64-mingw32/include/d3d8types.h
@@ -38,7 +38,7 @@
 #define D3DCLIPPLANE4 (1 << 4)
 #define D3DCLIPPLANE5 (1 << 5)
 
-#define D3DCOLOR_ARGB(a,r,g,b)        ((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))
+#define D3DCOLOR_ARGB(a,r,g,b)        ((D3DCOLOR)((((a)&0xffu)<<24)|(((r)&0xffu)<<16)|(((g)&0xffu)<<8)|((b)&0xffu)))
 #define D3DCOLOR_COLORVALUE(r,g,b,a)  D3DCOLOR_RGBA((DWORD)((r)*255.f),(DWORD)((g)*255.f),(DWORD)((b)*255.f),(DWORD)((a)*255.f))
 #define D3DCOLOR_RGBA(r,g,b,a)        D3DCOLOR_ARGB(a,r,g,b)
 #define D3DCOLOR_XRGB(r,g,b)          D3DCOLOR_ARGB(0xff,r,g,b)
@@ -263,11 +263,11 @@
 #define D3DVSD_CONSTCOUNTMASK    (0xF      << D3DVSD_CONSTCOUNTSHIFT)
 #define D3DVSD_DATALOADTYPEMASK  (0x1      << D3DVSD_DATALOADTYPESHIFT)
 #define D3DVSD_STREAMTESSMASK    (0x1      << D3DVSD_STREAMTESSSHIFT)
-#define D3DVSD_TOKENTYPEMASK     (0x7      << D3DVSD_TOKENTYPESHIFT)
+#define D3DVSD_TOKENTYPEMASK     (0x7u     << D3DVSD_TOKENTYPESHIFT)
 
 
 #define D3DVSD_MAKETOKENTYPE(TokenType) \
-  ((TokenType << D3DVSD_TOKENTYPESHIFT) & D3DVSD_TOKENTYPEMASK)
+  (((unsigned)TokenType << D3DVSD_TOKENTYPESHIFT) & D3DVSD_TOKENTYPEMASK)
 
 #define D3DVSD_CONST(ConstantAddress, Count) \
   (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_CONSTMEM) | ((Count) << D3DVSD_CONSTCOUNTSHIFT) | (ConstantAddress))
diff --git a/x86_64-w64-mingw32/include/d3d9.h b/x86_64-w64-mingw32/include/d3d9.h
index 1557fa2..c9f2be9 100644
--- a/x86_64-w64-mingw32/include/d3d9.h
+++ b/x86_64-w64-mingw32/include/d3d9.h
@@ -495,8 +495,8 @@
 /*** IDirect3DSwapChain9 methods ***/
 #define IDirect3DSwapChain9Ex_Present(p,a,b,c,d,e)       (p)->lpVtbl->Present(p,a,b,c,d,e)
 #define IDirect3DSwapChain9Ex_GetFrontBufferData(p,a)    (p)->lpVtbl->GetFrontBufferData(p,a)
-#define IDirect3DSwapChain9EX_GetBackBuffer(p,a,b,c)     (p)->lpVtbl->GetBackBuffer(p,a,b,c)
-#define IDirect3DSwapChain9EX_GetRasterStatus(p,a)       (p)->lpVtbl->GetRasterStatus(p,a)
+#define IDirect3DSwapChain9Ex_GetBackBuffer(p,a,b,c)     (p)->lpVtbl->GetBackBuffer(p,a,b,c)
+#define IDirect3DSwapChain9Ex_GetRasterStatus(p,a)       (p)->lpVtbl->GetRasterStatus(p,a)
 #define IDirect3DSwapChain9Ex_GetDisplayMode(p,a)        (p)->lpVtbl->GetDisplayMode(p,a)
 #define IDirect3DSwapChain9Ex_GetDevice(p,a)             (p)->lpVtbl->GetDevice(p,a)
 #define IDirect3DSwapChain9Ex_GetPresentParameters(p,a)  (p)->lpVtbl->GetPresentParameters(p,a)
diff --git a/x86_64-w64-mingw32/include/d3d9caps.h b/x86_64-w64-mingw32/include/d3d9caps.h
index 5cc757b..424b20c 100644
--- a/x86_64-w64-mingw32/include/d3d9caps.h
+++ b/x86_64-w64-mingw32/include/d3d9caps.h
@@ -116,6 +116,9 @@
 #define D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING __MSABI_LONG(0x00080000)
 #define D3DPMISCCAPS_FOGVERTEXCLAMPED           __MSABI_LONG(0x00100000)
 
+#ifndef D3D_DISABLE_9EX
+#define D3DPMISCCAPS_POSTBLENDSRGBCONVERT       __MSABI_LONG(0x00200000)
+#endif
 
 #define D3DPRASTERCAPS_DITHER                     __MSABI_LONG(0x00000001)
 #define D3DPRASTERCAPS_PAT                        __MSABI_LONG(0x00000008)
diff --git a/x86_64-w64-mingw32/include/d3d9types.h b/x86_64-w64-mingw32/include/d3d9types.h
index 86522f6..56a4ac5 100644
--- a/x86_64-w64-mingw32/include/d3d9types.h
+++ b/x86_64-w64-mingw32/include/d3d9types.h
@@ -60,10 +60,10 @@
 #define D3DCS_PLANE5                 __MSABI_LONG(0x800)
 #define D3DCS_ALL                    __MSABI_LONG(0xFFF)
 
-#define D3DFVF_TEXTUREFORMAT1 3
-#define D3DFVF_TEXTUREFORMAT2 0
-#define D3DFVF_TEXTUREFORMAT3 1
-#define D3DFVF_TEXTUREFORMAT4 2
+#define D3DFVF_TEXTUREFORMAT1 3u
+#define D3DFVF_TEXTUREFORMAT2 0u
+#define D3DFVF_TEXTUREFORMAT3 1u
+#define D3DFVF_TEXTUREFORMAT4 2u
 #define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))
 #define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2)
 #define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))
@@ -113,6 +113,14 @@
 #define D3DUSAGE_AUTOGENMIPMAP      __MSABI_LONG(0x00000400)
 #define D3DUSAGE_DMAP               __MSABI_LONG(0x00004000)
 
+/* Parts added with d3d9ex */
+#if !defined(D3D_DISABLE_9EX)
+#define D3DUSAGE_RESTRICTED_CONTENT              __MSABI_LONG(0x00000800)
+#define D3DUSAGE_RESTRICT_SHARED_RESOURCE_DRIVER __MSABI_LONG(0x00001000)
+#define D3DUSAGE_RESTRICT_SHARED_RESOURCE        __MSABI_LONG(0x00002000)
+#define D3DUSAGE_TEXTAPI                         __MSABI_LONG(0x10000000)
+#endif /* D3D_DISABLE_9EX */
+
 #define D3DUSAGE_QUERY_FILTER                   __MSABI_LONG(0x00020000)
 #define D3DUSAGE_QUERY_LEGACYBUMPMAP            __MSABI_LONG(0x00008000)
 #define D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING __MSABI_LONG(0x00080000)
@@ -178,8 +186,8 @@
 
 #define D3DPV_DONOTCOPYDATA         (1 << 0)
 
-#define D3DSTREAMSOURCE_INDEXEDDATA  (1 << 30)
-#define D3DSTREAMSOURCE_INSTANCEDATA (2 << 30)
+#define D3DSTREAMSOURCE_INDEXEDDATA  (1u << 30)
+#define D3DSTREAMSOURCE_INSTANCEDATA (2u << 30)
 
 #define D3D_MAX_SIMULTANEOUS_RENDERTARGETS 4
 
diff --git a/x86_64-w64-mingw32/include/d3dcommon.h b/x86_64-w64-mingw32/include/d3dcommon.h
index 5c1e674..e48e3db 100644
--- a/x86_64-w64-mingw32/include/d3dcommon.h
+++ b/x86_64-w64-mingw32/include/d3dcommon.h
@@ -290,6 +290,17 @@
     D3D11_SVC_INTERFACE_POINTER = 7,
     D3D_SVC_FORCE_DWORD = 0x7fffffff
 } D3D_SHADER_VARIABLE_CLASS;
+typedef enum _D3D_SHADER_VARIABLE_FLAGS {
+    D3D_SVF_USERPACKED = 0x1,
+    D3D_SVF_USED = 0x2,
+    D3D_SVF_INTERFACE_POINTER = 0x4,
+    D3D_SVF_INTERFACE_PARAMETER = 0x8,
+    D3D10_SVF_USERPACKED = D3D_SVF_USERPACKED,
+    D3D10_SVF_USED = D3D_SVF_USED,
+    D3D11_SVF_INTERFACE_POINTER = D3D_SVF_INTERFACE_POINTER,
+    D3D11_SVF_INTERFACE_PARAMETER = D3D_SVF_INTERFACE_PARAMETER,
+    D3D_SVF_FORCE_DWORD = 0x7fffffff
+} D3D_SHADER_VARIABLE_FLAGS;
 typedef enum _D3D_SHADER_VARIABLE_TYPE {
     D3D_SVT_VOID = 0,
     D3D_SVT_BOOL = 1,
@@ -397,6 +408,20 @@
     D3D11_SVT_CONSUME_STRUCTURED_BUFFER = 51,
     D3D_SVT_FORCE_DWORD = 0x7fffffff
 } D3D_SHADER_VARIABLE_TYPE;
+typedef enum _D3D_SHADER_INPUT_FLAGS {
+    D3D_SIF_USERPACKED = 0x1,
+    D3D_SIF_COMPARISON_SAMPLER = 0x2,
+    D3D_SIF_TEXTURE_COMPONENT_0 = 0x4,
+    D3D_SIF_TEXTURE_COMPONENT_1 = 0x8,
+    D3D_SIF_TEXTURE_COMPONENTS = 0xc,
+    D3D_SIF_UNUSED = 0x10,
+    D3D10_SIF_USERPACKED = D3D_SIF_USERPACKED,
+    D3D10_SIF_COMPARISON_SAMPLER = D3D_SIF_COMPARISON_SAMPLER,
+    D3D10_SIF_TEXTURE_COMPONENT_0 = D3D_SIF_TEXTURE_COMPONENT_0,
+    D3D10_SIF_TEXTURE_COMPONENT_1 = D3D_SIF_TEXTURE_COMPONENT_1,
+    D3D10_SIF_TEXTURE_COMPONENTS = D3D_SIF_TEXTURE_COMPONENTS,
+    D3D_SIF_FORCE_DWORD = 0x7fffffff
+} D3D_SHADER_INPUT_FLAGS;
 typedef enum D3D_PRIMITIVE {
     D3D_PRIMITIVE_UNDEFINED = 0,
     D3D_PRIMITIVE_POINT = 1,
@@ -776,6 +801,11 @@
     D3D11_SIT_UAV_CONSUME_STRUCTURED = 10,
     D3D11_SIT_UAV_RWSTRUCTURED_WITH_COUNTER = 11
 } D3D_SHADER_INPUT_TYPE;
+typedef enum _D3D_SHADER_CBUFFER_FLAGS {
+    D3D_CBF_USERPACKED = 0x1,
+    D3D10_CBF_USERPACKED = D3D_CBF_USERPACKED,
+    D3D_CBF_FORCE_DWORD = 0x7fffffff
+} D3D_SHADER_CBUFFER_FLAGS;
 DEFINE_GUID(WKPDID_D3DDebugObjectName,0x429b8c22,0x9188,0x4b0c,0x87,0x42,0xac,0xb0,0xbf,0x85,0xc2,0x00);
 /* Begin additional prototypes for all interfaces */
 
diff --git a/x86_64-w64-mingw32/include/d3dcommon.idl b/x86_64-w64-mingw32/include/d3dcommon.idl
index f8fe203..c7e3b4d 100644
--- a/x86_64-w64-mingw32/include/d3dcommon.idl
+++ b/x86_64-w64-mingw32/include/d3dcommon.idl
@@ -126,6 +126,19 @@
     D3D_SVC_FORCE_DWORD = 0x7fffffff,
 } D3D_SHADER_VARIABLE_CLASS;
 
+typedef enum _D3D_SHADER_VARIABLE_FLAGS
+{
+    D3D_SVF_USERPACKED            = 0x01,
+    D3D_SVF_USED                  = 0x02,
+    D3D_SVF_INTERFACE_POINTER     = 0x04,
+    D3D_SVF_INTERFACE_PARAMETER   = 0x08,
+    D3D10_SVF_USERPACKED          = D3D_SVF_USERPACKED,
+    D3D10_SVF_USED                = D3D_SVF_USED,
+    D3D11_SVF_INTERFACE_POINTER   = D3D_SVF_INTERFACE_POINTER,
+    D3D11_SVF_INTERFACE_PARAMETER = D3D_SVF_INTERFACE_PARAMETER,
+    D3D_SVF_FORCE_DWORD           = 0x7fffffff
+} D3D_SHADER_VARIABLE_FLAGS;
+
 typedef enum _D3D_SHADER_VARIABLE_TYPE
 {
     D3D_SVT_VOID,
@@ -235,6 +248,22 @@
     D3D_SVT_FORCE_DWORD = 0x7fffffff,
 } D3D_SHADER_VARIABLE_TYPE;
 
+typedef enum _D3D_SHADER_INPUT_FLAGS
+{
+    D3D_SIF_USERPACKED            = 0x01,
+    D3D_SIF_COMPARISON_SAMPLER    = 0x02,
+    D3D_SIF_TEXTURE_COMPONENT_0   = 0x04,
+    D3D_SIF_TEXTURE_COMPONENT_1   = 0x08,
+    D3D_SIF_TEXTURE_COMPONENTS    = 0x0C,
+    D3D_SIF_UNUSED                = 0x10,
+    D3D10_SIF_USERPACKED          = D3D_SIF_USERPACKED,
+    D3D10_SIF_COMPARISON_SAMPLER  = D3D_SIF_COMPARISON_SAMPLER,
+    D3D10_SIF_TEXTURE_COMPONENT_0 = D3D_SIF_TEXTURE_COMPONENT_0,
+    D3D10_SIF_TEXTURE_COMPONENT_1 = D3D_SIF_TEXTURE_COMPONENT_1,
+    D3D10_SIF_TEXTURE_COMPONENTS  = D3D_SIF_TEXTURE_COMPONENTS,
+    D3D_SIF_FORCE_DWORD           = 0x7fffffff
+} D3D_SHADER_INPUT_FLAGS;
+
 typedef enum D3D_PRIMITIVE
 {
     D3D_PRIMITIVE_UNDEFINED,
@@ -636,4 +665,11 @@
     D3D11_SIT_UAV_RWSTRUCTURED_WITH_COUNTER,
 } D3D_SHADER_INPUT_TYPE;
 
+typedef enum _D3D_SHADER_CBUFFER_FLAGS
+{
+    D3D_CBF_USERPACKED      = 0x01,
+    D3D10_CBF_USERPACKED    = D3D_CBF_USERPACKED,
+    D3D_CBF_FORCE_DWORD     = 0x7fffffff
+} D3D_SHADER_CBUFFER_FLAGS;
+
 cpp_quote("DEFINE_GUID(WKPDID_D3DDebugObjectName,0x429b8c22,0x9188,0x4b0c,0x87,0x42,0xac,0xb0,0xbf,0x85,0xc2,0x00);")
diff --git a/x86_64-w64-mingw32/include/d3dcompiler.h b/x86_64-w64-mingw32/include/d3dcompiler.h
index c9358b9..1c59c66 100644
--- a/x86_64-w64-mingw32/include/d3dcompiler.h
+++ b/x86_64-w64-mingw32/include/d3dcompiler.h
@@ -108,7 +108,8 @@
 HRESULT WINAPI D3DGetOutputSignatureBlob(const void *data, SIZE_T data_size, ID3DBlob **blob);
 HRESULT WINAPI D3DGetInputAndOutputSignatureBlob(const void *data, SIZE_T data_size, ID3DBlob **blob);
 HRESULT WINAPI D3DGetDebugInfo(const void *data, SIZE_T data_size, ID3DBlob **blob);
-
+HRESULT WINAPI D3DReadFileToBlob(const WCHAR *filename, ID3DBlob **contents);
+HRESULT WINAPI D3DWriteBlobToFile(ID3DBlob *blob, const WCHAR *filename, WINBOOL overwrite);
 HRESULT WINAPI D3DReflect(const void *data, SIZE_T data_size, REFIID riid, void **reflector);
 
 HRESULT WINAPI D3DCreateBlob(SIZE_T data_size, ID3DBlob **blob);
diff --git a/x86_64-w64-mingw32/include/d3drm.h b/x86_64-w64-mingw32/include/d3drm.h
index bf10ca4..7930f58 100644
--- a/x86_64-w64-mingw32/include/d3drm.h
+++ b/x86_64-w64-mingw32/include/d3drm.h
@@ -354,7 +354,7 @@
     STDMETHOD(CreateMaterial)(THIS_ D3DVALUE, IDirect3DRMMaterial2 **material) PURE;
     STDMETHOD(CreateDevice)(THIS_ DWORD width, DWORD height, IDirect3DRMDevice3 **device) PURE;
     STDMETHOD(CreateDeviceFromSurface)(THIS_ GUID *guid, IDirectDraw *ddraw,
-            IDirectDrawSurface *surface, IDirect3DRMDevice3 **device) PURE;
+            IDirectDrawSurface *surface, DWORD flags, IDirect3DRMDevice3 **device) PURE;
     STDMETHOD(CreateDeviceFromD3D)(THIS_ IDirect3D2 *d3d, IDirect3DDevice2 *d3d_device,
             IDirect3DRMDevice3 **device) PURE;
     STDMETHOD(CreateDeviceFromClipper)(THIS_ IDirectDrawClipper *clipper, GUID *guid,
@@ -412,7 +412,7 @@
 #define IDirect3DRM3_CreateLightRGB(p,a,b,c,d,e)                   (p)->lpVtbl->CreateLightRGB(p,a,b,c,d,e)
 #define IDirect3DRM3_CreateMaterial(p,a,b)                         (p)->lpVtbl->CreateMaterial(p,a,b)
 #define IDirect3DRM3_CreateDevice(p,a,b,c)                         (p)->lpVtbl->CreateDevice(p,a,b,c)
-#define IDirect3DRM3_CreateDeviceFromSurface(p,a,b,c,d)            (p)->lpVtbl->CreateDeviceFromSurface(p,a,b,c,d)
+#define IDirect3DRM3_CreateDeviceFromSurface(p,a,b,c,d,e)          (p)->lpVtbl->CreateDeviceFromSurface(p,a,b,c,d,e)
 #define IDirect3DRM3_CreateDeviceFromD3D(p,a,b,c)                  (p)->lpVtbl->CreateDeviceFromD3D(p,a,b,c)
 #define IDirect3DRM3_CreateDeviceFromClipper(p,a,b,c,d,e)          (p)->lpVtbl->CreateDeviceFromClipper(p,a,b,c,d,e)
 #define IDirect3DRM3_CreateTextureFromSurface(p,a,b)               (p)->lpVtbl->CreateTextureFromSurface(p,a,b)
@@ -456,7 +456,7 @@
 #define IDirect3DRM3_CreateLightRGB(p,a,b,c,d,e)                   (p)->CreateLightRGB(a,b,c,d,e)
 #define IDirect3DRM3_CreateMaterial(p,a,b)                         (p)->CreateMaterial(a,b)
 #define IDirect3DRM3_CreateDevice(p,a,b,c)                         (p)->CreateDevice(a,b,c)
-#define IDirect3DRM3_CreateDeviceFromSurface(p,a,b,c,d)            (p)->CreateDeviceFromSurface(a,b,c,d)
+#define IDirect3DRM3_CreateDeviceFromSurface(p,a,b,c,d,e)          (p)->CreateDeviceFromSurface(a,b,c,d,e)
 #define IDirect3DRM3_CreateDeviceFromD3D(p,a,b,c)                  (p)->CreateDeviceFromD3D(a,b,c)
 #define IDirect3DRM3_CreateDeviceFromClipper(p,a,b,c,d,e)          (p)->CreateDeviceFromClipper(a,b,c,d,e)
 #define IDirect3DRM3_CreateTextureFromSurface(p,a,b)               (p)->CreateTextureFromSurface(a,b)
diff --git a/x86_64-w64-mingw32/include/d3drmobj.h b/x86_64-w64-mingw32/include/d3drmobj.h
index 810aa3d..ab4ad34 100644
--- a/x86_64-w64-mingw32/include/d3drmobj.h
+++ b/x86_64-w64-mingw32/include/d3drmobj.h
@@ -361,7 +361,7 @@
 #undef GetClassName
 #endif
 #define INTERFACE IDirect3DRMDevice
-DECLARE_INTERFACE_(IDirect3DRMDevice,IUnknown)
+DECLARE_INTERFACE_(IDirect3DRMDevice,IDirect3DRMObject)
 {
     /*** IUnknown methods ***/
     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
@@ -3285,7 +3285,7 @@
 #define IDirect3DRMTexture_SetDecalOrigin(p,a,b)            (p)->SetDecalOrigin(a,b)
 #define IDirect3DRMTexture_SetDecalScale(p,a)               (p)->SetDecalScale(a)
 #define IDirect3DRMTexture_SetDecalTransparency(p,a)        (p)->SetDecalTransparency(a)
-#define IDirect3DRMTexture_SetDecalTransparencyColor(p,a)   (p)->SetDecalTransparentColor(a)
+#define IDirect3DRMTexture_SetDecalTransparentColor(p,a)    (p)->SetDecalTransparentColor(a)
 #define IDirect3DRMTexture_GetDecalSize(p,a,b)              (p)->GetDecalSize(a,b)
 #define IDirect3DRMTexture_GetDecalOrigin(p,a,b)            (p)->GetDecalOrigin(a,b)
 #define IDirect3DRMTexture_GetImage(p)                      (p)->GetImage()
@@ -3293,7 +3293,7 @@
 #define IDirect3DRMTexture_GetColors(p)                     (p)->GetColors()
 #define IDirect3DRMTexture_GetDecalScale(p)                 (p)->GetDecalScale()
 #define IDirect3DRMTexture_GetDecalTransparency(p)          (p)->GetDecalTransparency()
-#define IDirect3DRMTexture_GetDecalTransparencyColor(p)     (p)->GetDecalTransparencyColor()
+#define IDirect3DRMTexture_GetDecalTransparentColor(p)      (p)->GetDecalTransparentColor()
 #endif
 
 /*****************************************************************************
@@ -3405,7 +3405,7 @@
 #define IDirect3DRMTexture2_SetDecalOrigin(p,a,b)            (p)->SetDecalOrigin(a,b)
 #define IDirect3DRMTexture2_SetDecalScale(p,a)               (p)->SetDecalScale(a)
 #define IDirect3DRMTexture2_SetDecalTransparency(p,a)        (p)->SetDecalTransparency(a)
-#define IDirect3DRMTexture2_SetDecalTransparencyColor(p,a)   (p)->SetDecalTransparentColor(a)
+#define IDirect3DRMTexture2_SetDecalTransparentColor(p,a)    (p)->SetDecalTransparentColor(a)
 #define IDirect3DRMTexture2_GetDecalSize(p,a,b)              (p)->GetDecalSize(a,b)
 #define IDirect3DRMTexture2_GetDecalOrigin(p,a,b)            (p)->GetDecalOrigin(a,b)
 #define IDirect3DRMTexture2_GetImage(p)                      (p)->GetImage()
@@ -3413,7 +3413,7 @@
 #define IDirect3DRMTexture2_GetColors(p)                     (p)->GetColors()
 #define IDirect3DRMTexture2_GetDecalScale(p)                 (p)->GetDecalScale()
 #define IDirect3DRMTexture2_GetDecalTransparency(p)          (p)->GetDecalTransparency()
-#define IDirect3DRMTexture2_GetDecalTransparencyColor(p)     (p)->GetDecalTransparencyColor()
+#define IDirect3DRMTexture2_GetDecalTransparentColor(p)      (p)->GetDecalTransparentColor()
 /*** IDirect3DRMTexture2 methods ***/
 #define IDirect3DRMTexture2_InitFromImage(p,a)               (p)->InitFromImage(a)
 #define IDirect3DRMTexture2_InitFromResource2(p,a,b,c)       (p)->InitFromResource2(a,b,c)
@@ -3495,7 +3495,7 @@
 #define IDirect3DRMTexture3_SetDecalOrigin(p,a,b)            (p)->lpVtbl->SetDecalOrigin(p,a,b)
 #define IDirect3DRMTexture3_SetDecalScale(p,a)               (p)->lpVtbl->SetDecalScale(p,a)
 #define IDirect3DRMTexture3_SetDecalTransparency(p,a)        (p)->lpVtbl->SetDecalTransparency(p,a)
-#define IDirect3DRMTexture3_SetDecalTransparencyColor(p,a)   (p)->lpVtbl->SetDecalTransparentColor(p,a)
+#define IDirect3DRMTexture3_SetDecalTransparentColor(p,a)    (p)->lpVtbl->SetDecalTransparentColor(p,a)
 #define IDirect3DRMTexture3_GetDecalSize(p,a,b)              (p)->lpVtbl->GetDecalSize(p,a,b)
 #define IDirect3DRMTexture3_GetDecalOrigin(p,a,b)            (p)->lpVtbl->GetDecalOrigin(p,a,b)
 #define IDirect3DRMTexture3_GetImage(p)                      (p)->lpVtbl->GetImage(p)
@@ -3503,7 +3503,7 @@
 #define IDirect3DRMTexture3_GetColors(p)                     (p)->lpVtbl->GetColors(p)
 #define IDirect3DRMTexture3_GetDecalScale(p)                 (p)->lpVtbl->GetDecalScale(p)
 #define IDirect3DRMTexture3_GetDecalTransparency(p)          (p)->lpVtbl->GetDecalTransparency(p)
-#define IDirect3DRMTexture3_GetDecalTransparencyColor(p)     (p)->lpVtbl->GetDecalTransparencyColor(p)
+#define IDirect3DRMTexture3_GetDecalTransparentColor(p)      (p)->lpVtbl->GetDecalTransparentColor(p)
 #define IDirect3DRMTexture3_InitFromImage(p,a)               (p)->lpVtbl->InitFromImage(p,a)
 #define IDirect3DRMTexture3_InitFromResource2(p,a,b,c)       (p)->lpVtbl->InitFromResource2(p,a,b,c)
 #define IDirect3DRMTexture3_GenerateMIPMap(p,a)              (p)->lpVtbl->GenerateMIPMap(p,a)
diff --git a/x86_64-w64-mingw32/include/d3dx9anim.h b/x86_64-w64-mingw32/include/d3dx9anim.h
index 303286f..dcd4470 100644
--- a/x86_64-w64-mingw32/include/d3dx9anim.h
+++ b/x86_64-w64-mingw32/include/d3dx9anim.h
@@ -329,37 +329,37 @@
     STDMETHOD_(UINT, GetNumAnimationSets)(THIS) PURE;
     STDMETHOD(GetAnimationSet)(THIS_ UINT index, ID3DXAnimationSet **anim_set) PURE;
     STDMETHOD(GetAnimationSetByName)(THIS_ const char *name, ID3DXAnimationSet **anim_set) PURE;
-    STDMETHOD(AdvanceTime)(THIS_ double time_delta, ID3DXAnimationCallbackHandler **callback_handler) PURE;
+    STDMETHOD(AdvanceTime)(THIS_ double time_delta, ID3DXAnimationCallbackHandler *callback_handler) PURE;
     STDMETHOD(ResetTime)(THIS) PURE;
-    STDMETHOD_(DOUBLE, GetTime)(THIS) PURE;
+    STDMETHOD_(double, GetTime)(THIS) PURE;
     STDMETHOD(SetTrackAnimationSet)(THIS_ UINT track, ID3DXAnimationSet *anim_set) PURE;
     STDMETHOD(GetTrackAnimationSet)(THIS_ UINT track, ID3DXAnimationSet **anim_set) PURE;
-    STDMETHOD(GetTrackPriority)(THIS_ UINT track, D3DXPRIORITY_TYPE *priority) PURE;
-    STDMETHOD(SetTrackSpeed)(THIS_ UINT track, FLOAT speed) PURE;
-    STDMETHOD(SetTrackWeight)(THIS_ UINT track, FLOAT weight) PURE;
-    STDMETHOD(SetTrackPosition)(THIS_ UINT track, DOUBLE position) PURE;
+    STDMETHOD(SetTrackPriority)(THIS_ UINT track, D3DXPRIORITY_TYPE priority) PURE;
+    STDMETHOD(SetTrackSpeed)(THIS_ UINT track, float speed) PURE;
+    STDMETHOD(SetTrackWeight)(THIS_ UINT track, float weight) PURE;
+    STDMETHOD(SetTrackPosition)(THIS_ UINT track, double position) PURE;
     STDMETHOD(SetTrackEnable)(THIS_ UINT track, WINBOOL enable) PURE;
-    STDMETHOD(SetTrackDesc)(THIS_ UINT track, LPD3DXTRACK_DESC desc) PURE;
-    STDMETHOD(GetTrackDesc)(THIS_ UINT track, LPD3DXTRACK_DESC desc) PURE;
-    STDMETHOD(SetPriorityBlend)(THIS_ FLOAT blend_weight) PURE;
-    STDMETHOD_(FLOAT, GetPriorityBlend)(THIS) PURE;
-    STDMETHOD_(D3DXEVENTHANDLE, KeyTrackSpeed)(THIS_ UINT track, FLOAT new_speed,
-            DOUBLE start_time, DOUBLE duration, D3DXTRANSITION_TYPE transition) PURE;
-    STDMETHOD_(D3DXEVENTHANDLE, KeyTrackWeight)(THIS_ UINT track, FLOAT new_weight,
-            DOUBLE start_time, DOUBLE duration, D3DXTRANSITION_TYPE transition) PURE;
-    STDMETHOD_(D3DXEVENTHANDLE, KeyTrackPosition)(THIS_ UINT track, DOUBLE new_position, DOUBLE start_time) PURE;
-    STDMETHOD_(D3DXEVENTHANDLE, KeyTrackEnable)(THIS_ UINT track, WINBOOL new_enable, DOUBLE start_time) PURE;
-    STDMETHOD_(D3DXEVENTHANDLE, KeyPriorityBlend)(THIS_ FLOAT new_blend_weight,
-            DOUBLE start_time, DOUBLE duration, D3DXTRANSITION_TYPE transition) PURE;
+    STDMETHOD(SetTrackDesc)(THIS_ UINT track, D3DXTRACK_DESC *desc) PURE;
+    STDMETHOD(GetTrackDesc)(THIS_ UINT track, D3DXTRACK_DESC *desc) PURE;
+    STDMETHOD(SetPriorityBlend)(THIS_ float blend_weight) PURE;
+    STDMETHOD_(float, GetPriorityBlend)(THIS) PURE;
+    STDMETHOD_(D3DXEVENTHANDLE, KeyTrackSpeed)(THIS_ UINT track, float new_speed,
+            double start_time, double duration, D3DXTRANSITION_TYPE transition) PURE;
+    STDMETHOD_(D3DXEVENTHANDLE, KeyTrackWeight)(THIS_ UINT track, float new_weight,
+            double start_time, double duration, D3DXTRANSITION_TYPE transition) PURE;
+    STDMETHOD_(D3DXEVENTHANDLE, KeyTrackPosition)(THIS_ UINT track, double new_position, double start_time) PURE;
+    STDMETHOD_(D3DXEVENTHANDLE, KeyTrackEnable)(THIS_ UINT track, WINBOOL new_enable, double start_time) PURE;
+    STDMETHOD_(D3DXEVENTHANDLE, KeyPriorityBlend)(THIS_ float new_blend_weight,
+            double start_time, double duration, D3DXTRANSITION_TYPE transition) PURE;
     STDMETHOD(UnkeyEvent)(THIS_ D3DXEVENTHANDLE event) PURE;
     STDMETHOD(UnkeyAllTrackEvents)(THIS_ UINT track) PURE;
     STDMETHOD(UnkeyAllPriorityBlends)(THIS) PURE;
     STDMETHOD_(D3DXEVENTHANDLE, GetCurrentTrackEvent)(THIS_ UINT track, D3DXEVENT_TYPE event_type) PURE;
     STDMETHOD_(D3DXEVENTHANDLE, GetCurrentPriorityBlend)(THIS) PURE;
     STDMETHOD_(D3DXEVENTHANDLE, GetUpcomingTrackEvent)(THIS_ UINT track, D3DXEVENTHANDLE event) PURE;
-    STDMETHOD_(D3DXEVENTHANDLE, GetUpcomingPriorityBlend)(THIS_ D3DXEVENTHANDLE handle) PURE;
+    STDMETHOD_(D3DXEVENTHANDLE, GetUpcomingPriorityBlend)(THIS_ D3DXEVENTHANDLE event) PURE;
     STDMETHOD(ValidateEvent)(THIS_ D3DXEVENTHANDLE event) PURE;
-    STDMETHOD(GetEventDesc)(THIS_ D3DXEVENTHANDLE event, LPD3DXEVENT_DESC desc) PURE;
+    STDMETHOD(GetEventDesc)(THIS_ D3DXEVENTHANDLE event, D3DXEVENT_DESC *desc) PURE;
     STDMETHOD(CloneAnimationController)(THIS_ UINT max_num_anim_outputs, UINT max_num_anim_sets,
             UINT max_num_tracks, UINT max_num_events, ID3DXAnimationController **anim_controller) PURE;
 };
diff --git a/x86_64-w64-mingw32/include/d3dx9effect.h b/x86_64-w64-mingw32/include/d3dx9effect.h
index 7056830..c936863 100644
--- a/x86_64-w64-mingw32/include/d3dx9effect.h
+++ b/x86_64-w64-mingw32/include/d3dx9effect.h
@@ -427,6 +427,8 @@
         ID3DXEffectCompiler **effectcompiler, ID3DXBuffer **parseerrors);
 #define D3DXCreateEffectCompilerFromResource __MINGW_NAME_AW(D3DXCreateEffectCompilerFromResource)
 
+HRESULT WINAPI D3DXDisassembleEffect(ID3DXEffect *effect, WINBOOL enable_color_code, ID3DXBuffer **disassembly);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/x86_64-w64-mingw32/include/d3dx9mesh.h b/x86_64-w64-mingw32/include/d3dx9mesh.h
index a66df54..9493f72 100644
--- a/x86_64-w64-mingw32/include/d3dx9mesh.h
+++ b/x86_64-w64-mingw32/include/d3dx9mesh.h
@@ -838,11 +838,11 @@
 HRESULT WINAPI D3DXSplitMesh(ID3DXMesh *mesh_in, const DWORD *adjacency_in, const DWORD max_size,
         const DWORD flags, DWORD *mesh_out_count, ID3DXBuffer **mesh_out, ID3DXBuffer **adjacency_out,
         ID3DXBuffer **face_remap_out, ID3DXBuffer **vertex_remap_out);
-HRESULT WINAPI D3DXTesselateNPatches(ID3DXMesh *mesh_in, const DWORD *adjacency_in, float segment_count,
+HRESULT WINAPI D3DXTessellateNPatches(ID3DXMesh *mesh_in, const DWORD *adjacency_in, float segment_count,
         WINBOOL quad_interp, ID3DXMesh **mesh_out, ID3DXBuffer **adjacency_out);
-HRESULT WINAPI D3DXTesselateRectPatch(struct IDirect3DVertexBuffer9 *buffer, const float *segment_count,
+HRESULT WINAPI D3DXTessellateRectPatch(struct IDirect3DVertexBuffer9 *buffer, const float *segment_count,
         const D3DVERTEXELEMENT9 *declaration, const D3DRECTPATCH_INFO *patch_info, struct ID3DXMesh *mesh);
-HRESULT WINAPI D3DXTesselateTriPatch(struct IDirect3DVertexBuffer9 *buffer, const float *segment_count,
+HRESULT WINAPI D3DXTessellateTriPatch(struct IDirect3DVertexBuffer9 *buffer, const float *segment_count,
         const D3DVERTEXELEMENT9 *declaration, const D3DTRIPATCH_INFO *patch_info, struct ID3DXMesh *mesh);
 HRESULT WINAPI D3DXTriPatchSize(const FLOAT *segment_count, DWORD *num_triangles,
         DWORD *num_vertices);
diff --git a/x86_64-w64-mingw32/include/d3dx9shader.h b/x86_64-w64-mingw32/include/d3dx9shader.h
index 6dd9f62..cd00a87 100644
--- a/x86_64-w64-mingw32/include/d3dx9shader.h
+++ b/x86_64-w64-mingw32/include/d3dx9shader.h
@@ -307,6 +307,43 @@
 
 typedef struct ID3DXInclude *LPD3DXINCLUDE;
 
+typedef struct _D3DXFRAGMENT_DESC
+{
+    const char *Name;
+    DWORD Target;
+
+} D3DXFRAGMENT_DESC, *LPD3DXFRAGMENT_DESC;
+
+
+DEFINE_GUID(IID_ID3DXFragmentLinker, 0x1a2c0cc2, 0xe5b6, 0x4ebc, 0x9e, 0x8d, 0x39, 0xe, 0x5, 0x78, 0x11, 0xb6);
+
+#define INTERFACE ID3DXFragmentLinker
+DECLARE_INTERFACE_(ID3DXFragmentLinker, IUnknown)
+{
+    STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **ppv) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;
+    STDMETHOD_(UINT, GetNumberOfFragments)(THIS) PURE;
+
+    STDMETHOD_(D3DXHANDLE, GetFragmentHandleByIndex)(THIS_ UINT index) PURE;
+    STDMETHOD_(D3DXHANDLE, GetFragmentHandleByName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetFragmentDesc)(THIS_ D3DXHANDLE name, D3DXFRAGMENT_DESC *frag_desc) PURE;
+
+    STDMETHOD(AddFragments)(THIS_ const DWORD *fragments) PURE;
+
+    STDMETHOD(GetAllFragments)(THIS_ ID3DXBuffer **buffer) PURE;
+    STDMETHOD(GetFragment)(THIS_ D3DXHANDLE name, ID3DXBuffer **buffer) PURE;
+
+    STDMETHOD(LinkShader)(THIS_ const char *profile, DWORD flags, const D3DXHANDLE *fragmenthandles, UINT fragments, ID3DXBuffer **buffer, ID3DXBuffer **errors) PURE;
+    STDMETHOD(LinkVertexShader)(THIS_ const char *profile, DWORD flags, const D3DXHANDLE *fragment_handles, UINT fragments, IDirect3DVertexShader9 **shader, ID3DXBuffer **errors) PURE;
+    STDMETHOD(LinkPixelShader)(THIS_ const char *profile, DWORD flags, const D3DXHANDLE *fragment_handles, UINT fragments, IDirect3DPixelShader9 **shader, ID3DXBuffer **errors) PURE;
+
+    STDMETHOD(ClearCache)(THIS) PURE;
+};
+#undef INTERFACE
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -379,6 +416,9 @@
 
 HRESULT WINAPI D3DXCreateTextureShader(const DWORD *pFunction, ID3DXTextureShader **ppTextureShader);
 
+HRESULT WINAPI D3DXCreateFragmentLinker(IDirect3DDevice9 *device, UINT size, ID3DXFragmentLinker **linker);
+HRESULT WINAPI D3DXCreateFragmentLinkerEx(IDirect3DDevice9 *device, UINT size, DWORD flags, ID3DXFragmentLinker **linker);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/x86_64-w64-mingw32/include/dcomp.h b/x86_64-w64-mingw32/include/dcomp.h
new file mode 100644
index 0000000..0b4c362
--- /dev/null
+++ b/x86_64-w64-mingw32/include/dcomp.h
@@ -0,0 +1,287 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef _DCOMP_H_
+#define _DCOMP_H_
+
+#include <d2dbasetypes.h>
+#ifndef D3DMATRIX_DEFINED
+#include <d3d9types.h>
+#endif
+#include <d2d1_1.h>
+#include <winapifamily.h>
+
+#include <dcomptypes.h>
+#include <dcompanimation.h>
+
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+
+#undef INTERFACE
+#define INTERFACE IDCompositionSurface
+DECLARE_INTERFACE_IID_(IDCompositionSurface,IUnknown,"bb8a4953-2c99-4f5a-96f5-4819027fa3ac")
+{
+    STDMETHOD(BeginDraw)(THIS_ const RECT*,REFIID,void**,POINT*) PURE;
+    STDMETHOD(EndDraw)(THIS) PURE;
+    STDMETHOD(SuspendDraw)(THIS) PURE;
+    STDMETHOD(ResumeDraw)(THIS) PURE;
+    STDMETHOD(Scroll)(THIS_ const RECT*,const RECT*,int,int) PURE;
+};
+
+#undef INTERFACE
+#define INTERFACE IDCompositionVirtualSurface
+DECLARE_INTERFACE_IID_(IDCompositionVirtualSurface,IDCompositionSurface,"ae471c51-5f53-4a24-8d3e-d0c39c30b3f0")
+{
+    STDMETHOD(Resize)(THIS_ UINT,UINT) PURE;
+    STDMETHOD(Trim)(THIS_ const RECT*,UINT) PURE;
+};
+
+#undef INTERFACE
+#define INTERFACE IDCompositionEffect
+DECLARE_INTERFACE_IID_(IDCompositionEffect,IUnknown,"ec81b08f-bfcb-4e8d-b193-a915587999e8")
+{
+};
+
+#undef INTERFACE
+#define INTERFACE IDCompositionTransform3D
+DECLARE_INTERFACE_IID_(IDCompositionTransform3D,IDCompositionEffect,"71185722-246b-41f2-aad1-0443f7f4bfc2")
+{
+};
+
+#undef INTERFACE
+#define INTERFACE IDCompositionTransform
+DECLARE_INTERFACE_IID_(IDCompositionTransform,IDCompositionTransform3D,"fd55faa7-37e0-4c20-95d2-9be45bc33f55")
+{
+};
+
+#undef INTERFACE
+#define INTERFACE IDCompositionTranslateTransform
+DECLARE_INTERFACE_IID_(IDCompositionTranslateTransform,IDCompositionTransform,"06791122-c6f0-417d-8323-269e987f5954")
+{
+    STDMETHOD(SetOffsetX)(THIS_ float) PURE;
+    STDMETHOD(SetOffsetX)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetOffsetY)(THIS_ float) PURE;
+    STDMETHOD(SetOffsetY)(THIS_ IDCompositionAnimation*) PURE;
+};
+
+#undef INTERFACE
+#define INTERFACE IDCompositionScaleTransform
+DECLARE_INTERFACE_IID_(IDCompositionScaleTransform,IDCompositionTransform,"71fde914-40ef-45ef-bd51-68b037c339f9")
+{
+    STDMETHOD(SetScaleX)(THIS_ float) PURE;
+    STDMETHOD(SetScaleX)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetScaleY)(THIS_ float) PURE;
+    STDMETHOD(SetScaleY)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetCenterX)(THIS_ float) PURE;
+    STDMETHOD(SetCenterX)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetCenterY)(THIS_ float) PURE;
+    STDMETHOD(SetCenterY)(THIS_ IDCompositionAnimation*) PURE;
+};
+
+#undef INTERFACE
+#define INTERFACE IDCompositionRotateTransform
+DECLARE_INTERFACE_IID_(IDCompositionRotateTransform,IDCompositionTransform,"641ed83c-ae96-46c5-90dc-32774cc5c6d5")
+{
+    STDMETHOD(SetAngle)(THIS_ float) PURE;
+    STDMETHOD(SetAngle)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetCenterX)(THIS_ float) PURE;
+    STDMETHOD(SetCenterX)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetCenterY)(THIS_ float) PURE;
+    STDMETHOD(SetCenterY)(THIS_ IDCompositionAnimation*) PURE;
+};
+
+#undef INTERFACE
+#define INTERFACE IDCompositionSkewTransform
+DECLARE_INTERFACE_IID_(IDCompositionSkewTransform,IDCompositionTransform,"e57aa735-dcdb-4c72-9c61-0591f58889ee")
+{
+    STDMETHOD(SetAngleX)(THIS_ float) PURE;
+    STDMETHOD(SetAngleX)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetAngleY)(THIS_ float) PURE;
+    STDMETHOD(SetAngleY)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetCenterX)(THIS_ float) PURE;
+    STDMETHOD(SetCenterX)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetCenterY)(THIS_ float) PURE;
+    STDMETHOD(SetCenterY)(THIS_ IDCompositionAnimation*) PURE;
+};
+
+#undef INTERFACE
+#define INTERFACE IDCompositionMatrixTransform
+DECLARE_INTERFACE_IID_(IDCompositionMatrixTransform,IDCompositionTransform,"16cdff07-c503-419c-83f2-0965c7af1fa6")
+{
+    STDMETHOD(SetMatrix)(THIS_ const D2D_MATRIX_3X2_F&) PURE;
+    STDMETHOD(SetMatrixElement)(THIS_ int,int,float) PURE;
+    STDMETHOD(SetMatrixElement)(THIS_ int,int,IDCompositionAnimation*) PURE;
+};
+
+#undef INTERFACE
+#define INTERFACE IDCompositionTranslateTransform3D
+DECLARE_INTERFACE_IID_(IDCompositionTranslateTransform3D,IDCompositionTransform3D,"91636d4b-9ba1-4532-aaf7-e3344994d788")
+{
+    STDMETHOD(SetOffsetX)(THIS_ float) PURE;
+    STDMETHOD(SetOffsetX)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetOffsetY)(THIS_ float) PURE;
+    STDMETHOD(SetOffsetY)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetOffsetZ)(THIS_ float) PURE;
+    STDMETHOD(SetOffsetZ)(THIS_ IDCompositionAnimation*) PURE;
+};
+
+#undef INTERFACE
+#define INTERFACE IDCompositionScaleTransform3D
+DECLARE_INTERFACE_IID_(IDCompositionScaleTransform3D,IDCompositionTransform3D,"2a9e9ead-364b-4b15-a7c4-a1997f78b389")
+{
+    STDMETHOD(SetScaleX)(THIS_ float) PURE;
+    STDMETHOD(SetScaleX)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetScaleY)(THIS_ float) PURE;
+    STDMETHOD(SetScaleY)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetScaleZ)(THIS_ float) PURE;
+    STDMETHOD(SetScaleZ)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetCenterX)(THIS_ float) PURE;
+    STDMETHOD(SetCenterX)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetCenterY)(THIS_ float) PURE;
+    STDMETHOD(SetCenterY)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetCenterZ)(THIS_ float) PURE;
+    STDMETHOD(SetCenterZ)(THIS_ IDCompositionAnimation*) PURE;
+};
+
+#undef INTERFACE
+#define INTERFACE IDCompositionRotateTransform3D
+DECLARE_INTERFACE_IID_(IDCompositionRotateTransform3D,IDCompositionTransform3D,"d8f5b23f-d429-4a91-b55a-d2f45fd75b18")
+{
+    STDMETHOD(SetAngle)(THIS_ float) PURE;
+    STDMETHOD(SetAngle)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetAxisX)(THIS_ float) PURE;
+    STDMETHOD(SetAxisX)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetAxisY)(THIS_ float) PURE;
+    STDMETHOD(SetAxisY)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetAxisZ)(THIS_ float) PURE;
+    STDMETHOD(SetAxisZ)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetCenterX)(THIS_ float) PURE;
+    STDMETHOD(SetCenterX)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetCenterY)(THIS_ float) PURE;
+    STDMETHOD(SetCenterY)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetCenterZ)(THIS_ float) PURE;
+    STDMETHOD(SetCenterZ)(THIS_ IDCompositionAnimation*) PURE;
+};
+
+#undef INTERFACE
+#define INTERFACE IDCompositionMatrixTransform3D
+DECLARE_INTERFACE_IID_(IDCompositionMatrixTransform3D,IDCompositionTransform3D,"4b3363f0-643b-41b7-b6e0-ccf22d34467c")
+{
+    STDMETHOD(SetMatrix)(THIS_ const D3DMATRIX&) PURE;
+    STDMETHOD(SetMatrixElement)(THIS_ int,int,float) PURE;
+    STDMETHOD(SetMatrixElement)(THIS_ int,int,IDCompositionAnimation*) PURE;
+};
+
+#undef INTERFACE
+#define INTERFACE IDCompositionEffectGroup
+DECLARE_INTERFACE_IID_(IDCompositionEffectGroup,IDCompositionEffect,"a7929a74-e6b2-4bd6-8b95-4040119ca34d")
+{
+    STDMETHOD(SetOpacity)(THIS_ float) PURE;
+    STDMETHOD(SetOpacity)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetTransform3D)(THIS_ IDCompositionTransform3D*) PURE;
+};
+
+#undef INTERFACE
+#define INTERFACE IDCompositionClip
+DECLARE_INTERFACE_IID_(IDCompositionClip,IUnknown,"64ac3703-9d3f-45ec-a109-7cac0e7a13a7")
+{
+};
+
+#undef INTERFACE
+#define INTERFACE IDCompositionRectangleClip
+DECLARE_INTERFACE_IID_(IDCompositionRectangleClip,IDCompositionClip,"9842ad7d-d9cf-4908-aed7-48b51da5e7c2")
+{
+    STDMETHOD(SetLeft)(THIS_ float) PURE;
+    STDMETHOD(SetLeft)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetTop)(THIS_ float) PURE;
+    STDMETHOD(SetTop)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetRight)(THIS_ float) PURE;
+    STDMETHOD(SetRight)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetBottom)(THIS_ float) PURE;
+    STDMETHOD(SetBottom)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetTopLeftRadiusX)(THIS_ float) PURE;
+    STDMETHOD(SetTopLeftRadiusX)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetTopLeftRadiusY)(THIS_ float) PURE;
+    STDMETHOD(SetTopLeftRadiusY)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetTopRightRadiusX)(THIS_ float) PURE;
+    STDMETHOD(SetTopRightRadiusX)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetTopRightRadiusY)(THIS_ float) PURE;
+    STDMETHOD(SetTopRightRadiusY)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetBottomLeftRadiusX)(THIS_ float) PURE;
+    STDMETHOD(SetBottomLeftRadiusX)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetBottomLeftRadiusY)(THIS_ float) PURE;
+    STDMETHOD(SetBottomLeftRadiusY)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetBottomRightRadiusX)(THIS_ float) PURE;
+    STDMETHOD(SetBottomRightRadiusX)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetBottomRightRadiusY)(THIS_ float) PURE;
+    STDMETHOD(SetBottomRightRadiusY)(THIS_ IDCompositionAnimation*) PURE;
+};
+
+#undef INTERFACE
+#define INTERFACE IDCompositionTarget
+DECLARE_INTERFACE_IID_(IDCompositionTarget,IUnknown,"eacdd04c-117e-4e17-88f4-d1b12b0e3d89")
+{
+    STDMETHOD(SetRoot)(THIS_ IDCompositionVisual*) PURE;
+};
+
+#undef INTERFACE
+#define INTERFACE IDCompositionDevice
+DECLARE_INTERFACE_IID_(IDCompositionDevice,IUnknown,"c37ea93a-e7aa-450d-b16f-9746cb0407f3")
+{
+    STDMETHOD(Commit)(THIS) PURE;
+    STDMETHOD(WaitForCommitCompletion)(THIS) PURE;
+    STDMETHOD(GetFrameStatistics)(THIS_ DCOMPOSITION_FRAME_STATISTICS*) PURE;
+    STDMETHOD(CreateTargetForHwnd)(THIS_ HWND,BOOL,IDCompositionTarget**) PURE;
+    STDMETHOD(CreateVisual)(THIS_ IDCompositionVisual**) PURE;
+    STDMETHOD(CreateSurface)(THIS_ UINT,UINT,DXGI_FORMAT,DXGI_ALPHA_MODE,IDCompositionSurface**) PURE;
+    STDMETHOD(CreateVirtualSurface)(THIS_ UINT,UINT,DXGI_FORMAT,DXGI_ALPHA_MODE,IDCompositionVirtualSurface**) PURE;
+    STDMETHOD(CreateSurfaceFromHandle)(THIS_ HANDLE,IUnknown**) PURE;
+    STDMETHOD(CreateSurfaceFromHwnd)(THIS_ HWND,IUnknown**) PURE;
+    STDMETHOD(CreateTranslateTransform)(THIS_ IDCompositionTranslateTransform**) PURE;
+    STDMETHOD(CreateScaleTransform)(THIS_ IDCompositionScaleTransform**) PURE;
+    STDMETHOD(CreateRotateTransform)(THIS_ IDCompositionRotateTransform**) PURE;
+    STDMETHOD(CreateSkewTransform)(THIS_ IDCompositionSkewTransform**) PURE;
+    STDMETHOD(CreateMatrixTransform)(THIS_ IDCompositionMatrixTransform**) PURE;
+    STDMETHOD(CreateTransformGroup)(THIS_ IDCompositionTransform**,UINT,IDCompositionTransform**) PURE;
+    STDMETHOD(CreateTranslateTransform3D)(THIS_ IDCompositionTranslateTransform3D**) PURE;
+    STDMETHOD(CreateScaleTransform3D)(THIS_ IDCompositionScaleTransform3D**) PURE;
+    STDMETHOD(CreateRotateTransform3D)(THIS_ IDCompositionRotateTransform3D**) PURE;
+    STDMETHOD(CreateMatrixTransform3D)(THIS_ IDCompositionMatrixTransform3D**) PURE;
+    STDMETHOD(CreateTransform3DGroup)(THIS_ IDCompositionTransform3D**,UINT,IDCompositionTransform3D**) PURE;
+    STDMETHOD(CreateEffectGroup)(THIS_ IDCompositionEffectGroup**) PURE;
+    STDMETHOD(CreateRectangleClip)(THIS_ IDCompositionRectangleClip**) PURE;
+    STDMETHOD(CreateAnimation)(THIS_ IDCompositionAnimation**) PURE;
+    STDMETHOD(CheckDeviceState)(THIS_ BOOL*) PURE;
+};
+
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDCompositionDevice,0xc37ea93a,0xe7aa,0x450d,0xb1,0x6f,0x97,0x46,0xcb,0x04,0x07,0xf3);
+#endif
+
+#undef INTERFACE
+#define INTERFACE IDCompositionVisual
+DECLARE_INTERFACE_IID_(IDCompositionVisual,IUnknown,"4d93059d-097b-4651-9a60-f0f25116e2f3")
+{
+    STDMETHOD(SetOffsetX)(THIS_ float) PURE;
+    STDMETHOD(SetOffsetX)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetOffsetY)(THIS_ float) PURE;
+    STDMETHOD(SetOffsetY)(THIS_ IDCompositionAnimation*) PURE;
+    STDMETHOD(SetTransform)(THIS_ const D2D_MATRIX_3X2_F&) PURE;
+    STDMETHOD(SetTransform)(THIS_ IDCompositionTransform*) PURE;
+    STDMETHOD(SetTransformParent)(THIS_ IDCompositionVisual*) PURE;
+    STDMETHOD(SetEffect)(THIS_ IDCompositionEffect*) PURE;
+    STDMETHOD(SetBitmapInterpolationMode)(THIS_ DCOMPOSITION_BITMAP_INTERPOLATION_MODE) PURE;
+    STDMETHOD(SetBorderMode)(THIS_ DCOMPOSITION_BORDER_MODE) PURE;
+    STDMETHOD(SetClip)(THIS_ const D2D_RECT_F&) PURE;
+    STDMETHOD(SetClip)(THIS_ IDCompositionClip*) PURE;
+    STDMETHOD(SetContent)(THIS_ IUnknown*) PURE;
+    STDMETHOD(AddVisual)(THIS_ IDCompositionVisual*,BOOL,IDCompositionVisual*) PURE;
+    STDMETHOD(RemoveVisual)(THIS_ IDCompositionVisual*) PURE;
+    STDMETHOD(RemoveAllVisuals)(THIS_) PURE;
+    STDMETHOD(SetCompositeMode)(THIS_ DCOMPOSITION_COMPOSITE_MODE) PURE;
+};
+
+#endif
+#endif /* _DCOMP_H_ */
diff --git a/x86_64-w64-mingw32/include/dcompanimation.h b/x86_64-w64-mingw32/include/dcompanimation.h
new file mode 100644
index 0000000..20df083
--- /dev/null
+++ b/x86_64-w64-mingw32/include/dcompanimation.h
@@ -0,0 +1,250 @@
+/*** Autogenerated by WIDL 1.6 from include/dcompanimation.idl - Do not edit ***/
+
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
+
+#ifndef __dcompanimation_h__
+#define __dcompanimation_h__
+
+/* Forward declarations */
+
+#ifndef __IDCompositionAnimation_FWD_DEFINED__
+#define __IDCompositionAnimation_FWD_DEFINED__
+typedef interface IDCompositionAnimation IDCompositionAnimation;
+#endif
+
+/* Headers for imported files */
+
+#include <wtypes.h>
+#include <unknwn.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*****************************************************************************
+ * IDCompositionAnimation interface
+ */
+#ifndef __IDCompositionAnimation_INTERFACE_DEFINED__
+#define __IDCompositionAnimation_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDCompositionAnimation, 0xcbfd91d9, 0x51b2, 0x45e4, 0xb3,0xde, 0xd1,0x9c,0xcf,0xb8,0x63,0xc5);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("cbfd91d9-51b2-45e4-b3de-d19ccfb863c5")
+IDCompositionAnimation : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetAbsoluteBeginTime(
+        LARGE_INTEGER a) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddCubic(
+        double a,
+        float b,
+        float c,
+        float d,
+        float e) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddSinusoidal(
+        double a,
+        float b,
+        float c,
+        float d,
+        float e) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddRepeat(
+        double a,
+        double b) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE End(
+        double a,
+        float b) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDCompositionAnimation, 0xcbfd91d9, 0x51b2, 0x45e4, 0xb3,0xde, 0xd1,0x9c,0xcf,0xb8,0x63,0xc5)
+#endif
+#else
+typedef struct IDCompositionAnimationVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDCompositionAnimation* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDCompositionAnimation* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDCompositionAnimation* This);
+
+    /*** IDCompositionAnimation methods ***/
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        IDCompositionAnimation* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetAbsoluteBeginTime)(
+        IDCompositionAnimation* This,
+        LARGE_INTEGER a);
+
+    HRESULT (STDMETHODCALLTYPE *AddCubic)(
+        IDCompositionAnimation* This,
+        double a,
+        float b,
+        float c,
+        float d,
+        float e);
+
+    HRESULT (STDMETHODCALLTYPE *AddSinusoidal)(
+        IDCompositionAnimation* This,
+        double a,
+        float b,
+        float c,
+        float d,
+        float e);
+
+    HRESULT (STDMETHODCALLTYPE *AddRepeat)(
+        IDCompositionAnimation* This,
+        double a,
+        double b);
+
+    HRESULT (STDMETHODCALLTYPE *End)(
+        IDCompositionAnimation* This,
+        double a,
+        float b);
+
+    END_INTERFACE
+} IDCompositionAnimationVtbl;
+interface IDCompositionAnimation {
+    CONST_VTBL IDCompositionAnimationVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDCompositionAnimation_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDCompositionAnimation_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDCompositionAnimation_Release(This) (This)->lpVtbl->Release(This)
+/*** IDCompositionAnimation methods ***/
+#define IDCompositionAnimation_Reset(This) (This)->lpVtbl->Reset(This)
+#define IDCompositionAnimation_SetAbsoluteBeginTime(This,a) (This)->lpVtbl->SetAbsoluteBeginTime(This,a)
+#define IDCompositionAnimation_AddCubic(This,a,b,c,d,e) (This)->lpVtbl->AddCubic(This,a,b,c,d,e)
+#define IDCompositionAnimation_AddSinusoidal(This,a,b,c,d,e) (This)->lpVtbl->AddSinusoidal(This,a,b,c,d,e)
+#define IDCompositionAnimation_AddRepeat(This,a,b) (This)->lpVtbl->AddRepeat(This,a,b)
+#define IDCompositionAnimation_End(This,a,b) (This)->lpVtbl->End(This,a,b)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDCompositionAnimation_QueryInterface(IDCompositionAnimation* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDCompositionAnimation_AddRef(IDCompositionAnimation* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDCompositionAnimation_Release(IDCompositionAnimation* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDCompositionAnimation methods ***/
+static FORCEINLINE HRESULT IDCompositionAnimation_Reset(IDCompositionAnimation* This) {
+    return This->lpVtbl->Reset(This);
+}
+static FORCEINLINE HRESULT IDCompositionAnimation_SetAbsoluteBeginTime(IDCompositionAnimation* This,LARGE_INTEGER a) {
+    return This->lpVtbl->SetAbsoluteBeginTime(This,a);
+}
+static FORCEINLINE HRESULT IDCompositionAnimation_AddCubic(IDCompositionAnimation* This,double a,float b,float c,float d,float e) {
+    return This->lpVtbl->AddCubic(This,a,b,c,d,e);
+}
+static FORCEINLINE HRESULT IDCompositionAnimation_AddSinusoidal(IDCompositionAnimation* This,double a,float b,float c,float d,float e) {
+    return This->lpVtbl->AddSinusoidal(This,a,b,c,d,e);
+}
+static FORCEINLINE HRESULT IDCompositionAnimation_AddRepeat(IDCompositionAnimation* This,double a,double b) {
+    return This->lpVtbl->AddRepeat(This,a,b);
+}
+static FORCEINLINE HRESULT IDCompositionAnimation_End(IDCompositionAnimation* This,double a,float b) {
+    return This->lpVtbl->End(This,a,b);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IDCompositionAnimation_Reset_Proxy(
+    IDCompositionAnimation* This);
+void __RPC_STUB IDCompositionAnimation_Reset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDCompositionAnimation_SetAbsoluteBeginTime_Proxy(
+    IDCompositionAnimation* This,
+    LARGE_INTEGER a);
+void __RPC_STUB IDCompositionAnimation_SetAbsoluteBeginTime_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDCompositionAnimation_AddCubic_Proxy(
+    IDCompositionAnimation* This,
+    double a,
+    float b,
+    float c,
+    float d,
+    float e);
+void __RPC_STUB IDCompositionAnimation_AddCubic_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDCompositionAnimation_AddSinusoidal_Proxy(
+    IDCompositionAnimation* This,
+    double a,
+    float b,
+    float c,
+    float d,
+    float e);
+void __RPC_STUB IDCompositionAnimation_AddSinusoidal_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDCompositionAnimation_AddRepeat_Proxy(
+    IDCompositionAnimation* This,
+    double a,
+    double b);
+void __RPC_STUB IDCompositionAnimation_AddRepeat_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDCompositionAnimation_End_Proxy(
+    IDCompositionAnimation* This,
+    double a,
+    float b);
+void __RPC_STUB IDCompositionAnimation_End_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IDCompositionAnimation_INTERFACE_DEFINED__ */
+
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __dcompanimation_h__ */
diff --git a/x86_64-w64-mingw32/include/dcomptypes.h b/x86_64-w64-mingw32/include/dcomptypes.h
new file mode 100644
index 0000000..b8a09ed
--- /dev/null
+++ b/x86_64-w64-mingw32/include/dcomptypes.h
@@ -0,0 +1,44 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef _DCOMPTYPES_H_
+#define _DCOMPTYPES_H_
+
+#include <dxgitype.h>
+#include <dxgi1_2.h>
+#include <winapifamily.h>
+
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+
+enum DCOMPOSITION_BITMAP_INTERPOLATION_MODE {
+    DCOMPOSITION_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR = 0,
+    DCOMPOSITION_BITMAP_INTERPOLATION_MODE_LINEAR = 1,
+    DCOMPOSITION_BITMAP_INTERPOLATION_MODE_INHERIT = 0xffffffff
+};
+
+enum DCOMPOSITION_BORDER_MODE {
+    DCOMPOSITION_BORDER_MODE_SOFT = 0,
+    DCOMPOSITION_BORDER_MODE_HARD = 1,
+    DCOMPOSITION_BORDER_MODE_INHERIT = 0xffffffff
+};
+
+enum DCOMPOSITION_COMPOSITE_MODE {
+    DCOMPOSITION_COMPOSITE_MODE_SOURCE_OVER = 0,
+    DCOMPOSITION_COMPOSITE_MODE_DESTINATION_INVERT = 1,
+    DCOMPOSITION_COMPOSITE_MODE_MIN_BLEND = 2,
+    DCOMPOSITION_COMPOSITE_MODE_INHERIT = 0xffffffff
+};
+
+typedef struct {
+    LARGE_INTEGER lastFrameTime;
+    DXGI_RATIONAL currentCompositionRate;
+    LARGE_INTEGER currentTime;
+    LARGE_INTEGER timeFrequency;
+    LARGE_INTEGER nextEstimatedFrameTime;
+} DCOMPOSITION_FRAME_STATISTICS;
+
+#endif
+#endif /* _DCOMPTYPES_H_ */
diff --git a/x86_64-w64-mingw32/include/ddk/ntimage.h b/x86_64-w64-mingw32/include/ddk/ntimage.h
index a259038..9590b22 100644
--- a/x86_64-w64-mingw32/include/ddk/ntimage.h
+++ b/x86_64-w64-mingw32/include/ddk/ntimage.h
@@ -424,13 +424,16 @@
 //
 // Dll Characteristics
 //
+#define IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA       0x0020
 #define IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE          0x0040
 #define IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY       0x0080
 #define IMAGE_DLLCHARACTERISTICS_NX_COMPAT             0x0100
 #define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION          0x0200
 #define IMAGE_DLLCHARACTERISTICS_NO_SEH                0x0400
 #define IMAGE_DLLCHARACTERISTICS_NO_BIND               0x0800
+#define IMAGE_DLLCHARACTERISTICS_APPCONTAINER          0x1000
 #define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER            0x2000
+#define IMAGE_DLLCHARACTERISTICS_GUARD_CF              0x4000
 #define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 0x8000
 
 //
diff --git a/x86_64-w64-mingw32/include/devicetopology.h b/x86_64-w64-mingw32/include/devicetopology.h
index af8da24..9a455cc 100644
--- a/x86_64-w64-mingw32/include/devicetopology.h
+++ b/x86_64-w64-mingw32/include/devicetopology.h
@@ -1230,9 +1230,9 @@
 #ifndef __IAudioMute_INTERFACE_DEFINED__
 #define __IAudioMute_INTERFACE_DEFINED__
 
-DEFINE_GUID(IID_IAudioMute, 0xbb515f69, 0x94a7, 0x429e, 0x8b,0x9c, 0x27,0x1b,0x3f,0x11,0xa3,0xab);
+DEFINE_GUID(IID_IAudioMute, 0xdf45aeea, 0xb74a, 0x4b6b, 0xaf,0xad, 0x23,0x66,0xb6,0xaa,0x01,0x2e);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-MIDL_INTERFACE("bb515f69-94a7-429e-8b9c-271b3f11a3ab")
+MIDL_INTERFACE("df45aeea-b74a-4b6b-afad-2366b6aa012e")
 IAudioMute : public IUnknown
 {
     virtual HRESULT STDMETHODCALLTYPE SetMute(
@@ -1244,7 +1244,7 @@
 
 };
 #ifdef __CRT_UUID_DECL
-__CRT_UUID_DECL(IAudioMute, 0xbb515f69, 0x94a7, 0x429e, 0x8b,0x9c, 0x27,0x1b,0x3f,0x11,0xa3,0xab)
+__CRT_UUID_DECL(IAudioMute, 0xdf45aeea, 0xb74a, 0x4b6b, 0xaf,0xad, 0x23,0x66,0xb6,0xaa,0x01,0x2e)
 #endif
 #else
 typedef struct IAudioMuteVtbl {
@@ -1702,9 +1702,9 @@
 #ifndef __IAudioAutoGainControl_INTERFACE_DEFINED__
 #define __IAudioAutoGainControl_INTERFACE_DEFINED__
 
-DEFINE_GUID(IID_IAudioAutoGainControl, 0xbb515f69, 0x94a7, 0x429e, 0x8b,0x9c, 0x27,0x1b,0x3f,0x11,0xa3,0xab);
+DEFINE_GUID(IID_IAudioAutoGainControl, 0x85401fd4, 0x6de4, 0x4b9d, 0x98,0x69, 0x2d,0x67,0x53,0xa8,0x2f,0x3c);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-MIDL_INTERFACE("bb515f69-94a7-429e-8b9c-271b3f11a3ab")
+MIDL_INTERFACE("85401fd4-6de4-4b9d-9869-2d6753a82f3c")
 IAudioAutoGainControl : public IUnknown
 {
     virtual HRESULT STDMETHODCALLTYPE GetEnabled(
@@ -1716,7 +1716,7 @@
 
 };
 #ifdef __CRT_UUID_DECL
-__CRT_UUID_DECL(IAudioAutoGainControl, 0xbb515f69, 0x94a7, 0x429e, 0x8b,0x9c, 0x27,0x1b,0x3f,0x11,0xa3,0xab)
+__CRT_UUID_DECL(IAudioAutoGainControl, 0x85401fd4, 0x6de4, 0x4b9d, 0x98,0x69, 0x2d,0x67,0x53,0xa8,0x2f,0x3c)
 #endif
 #else
 typedef struct IAudioAutoGainControlVtbl {
@@ -3583,6 +3583,7 @@
 #endif  /* __IDeviceTopology_INTERFACE_DEFINED__ */
 
 
+DEFINE_GUID(LIBID_DevTopologyLib, 0x51b9a01d, 0x8181, 0x4363, 0xb5,0x9c, 0xe6,0x78,0xf4,0x76,0xdd,0x0e);
 
 /*****************************************************************************
  * DeviceTopology coclass
diff --git a/x86_64-w64-mingw32/include/dimm.h b/x86_64-w64-mingw32/include/dimm.h
index 261189c..c97f1b7 100644
--- a/x86_64-w64-mingw32/include/dimm.h
+++ b/x86_64-w64-mingw32/include/dimm.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 1.6 from dimm.idl - Do not edit ***/
+/*** Autogenerated by WIDL 1.6 from include/dimm.idl - Do not edit ***/
 
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
 #define __REQUIRED_RPCNDR_H_VERSION__ 475
diff --git a/x86_64-w64-mingw32/include/dinput.h b/x86_64-w64-mingw32/include/dinput.h
index b575480..14438f7 100644
--- a/x86_64-w64-mingw32/include/dinput.h
+++ b/x86_64-w64-mingw32/include/dinput.h
@@ -23,6 +23,7 @@
 #include <objbase.h>
 #include <_mingw_dxhelper.h>
 
+#define DIRECTINPUT_HEADER_VERSION	0x0800
 #ifndef DIRECTINPUT_VERSION
 #define DIRECTINPUT_VERSION	0x0800
 #endif
diff --git a/x86_64-w64-mingw32/include/driverspecs.h b/x86_64-w64-mingw32/include/driverspecs.h
index b7d3268..2fa89a1 100644
--- a/x86_64-w64-mingw32/include/driverspecs.h
+++ b/x86_64-w64-mingw32/include/driverspecs.h
@@ -28,3 +28,6 @@
 
 #define __deref_out_ecount(Size)
 
+#define __drv_aliasesMem
+#define __drv_allocatesMem(kind)
+#define __drv_freesMem(kind)
diff --git a/x86_64-w64-mingw32/include/dvdmedia.h b/x86_64-w64-mingw32/include/dvdmedia.h
index 32c22fc..daf1c9d 100644
--- a/x86_64-w64-mingw32/include/dvdmedia.h
+++ b/x86_64-w64-mingw32/include/dvdmedia.h
@@ -51,4 +51,18 @@
     DWORD dwSequenceHeader[1];
 } MPEG2VIDEOINFO;
 
+#define AMINTERLACE_IsInterlaced          0x0001
+#define AMINTERLACE_1FieldPerSample       0x0002
+#define AMINTERLACE_Field1First           0x0004
+#define AMINTERLACE_UNUSED                0x0008
+#define AMINTERLACE_FieldPatField1Only    0x0000
+#define AMINTERLACE_FieldPatField2Only    0x0010
+#define AMINTERLACE_FieldPatBothRegular   0x0020
+#define AMINTERLACE_FieldPatBothIrregular 0x0030
+#define AMINTERLACE_FieldPatternMask      0x0030
+#define AMINTERLACE_DisplayModeBobOnly    0x0000
+#define AMINTERLACE_DisplayModeWeaveOnly  0x0040
+#define AMINTERLACE_DisplayModeBobOrWeave 0x0080
+#define AMINTERLACE_DisplayModeMask       0x00c0
+
 #endif /* __DVDMEDIA_H__ */
diff --git a/x86_64-w64-mingw32/include/dwrite_1.h b/x86_64-w64-mingw32/include/dwrite_1.h
index 1630881..989ee28 100644
--- a/x86_64-w64-mingw32/include/dwrite_1.h
+++ b/x86_64-w64-mingw32/include/dwrite_1.h
@@ -14,6 +14,12 @@
     DWRITE_OUTLINE_THRESHOLD_ALIASED
 };
 
+enum DWRITE_TEXT_ANTIALIAS_MODE
+{
+    DWRITE_TEXT_ANTIALIAS_MODE_CLEARTYPE,
+    DWRITE_TEXT_ANTIALIAS_MODE_GRAYSCALE
+};
+
 struct DWRITE_CARET_METRICS {
     INT16 slopeRise;
     INT16 slopeRun;
@@ -144,5 +150,183 @@
 
 __CRT_UUID_DECL(IDWriteFontFace1, 0xa71efdb4,0x9fdb,0x4838,0xad,0x90,0xcf,0xc3,0xbe,0x8c,0x3d,0xaf);
 
+#undef  INTERFACE
+#define INTERFACE IDWriteRenderingParams1
+DECLARE_INTERFACE_(IDWriteRenderingParams1,IDWriteRenderingParams)
+{
+    BEGIN_INTERFACE
+
+#ifndef __cplusplus
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IDWriteRenderingParams methods */
+    STDMETHOD_(FLOAT, GetGamma)(THIS) PURE;
+    STDMETHOD_(FLOAT, GetEnhancedContrast)(THIS) PURE;
+    STDMETHOD_(FLOAT, GetClearTypeLevel)(THIS) PURE;
+    STDMETHOD_(DWRITE_PIXEL_GEOMETRY, GetPixelGeometry)(THIS) PURE;
+    STDMETHOD_(DWRITE_RENDERING_MODE, GetRenderingMode)(THIS) PURE;
+#endif
+
+    /* IDWriteRenderingParams1 methods */
+    STDMETHOD_(FLOAT, GetGrayscaleEnhancedContrast)(THIS) PURE;
+
+    END_INTERFACE
+};
+
+__CRT_UUID_DECL(IDWriteRenderingParams1, 0x94413cf4,0xa6fc,0x4248,0x8b,0x50,0x66,0x74,0x34,0x8f,0xca,0xd3)
+
+#undef  INTERFACE
+#define INTERFACE IDWriteFactory1
+DECLARE_INTERFACE_(IDWriteFactory1,IDWriteFactory)
+{
+    BEGIN_INTERFACE
+
+#ifndef __cplusplus
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IDWriteFactory methods */
+    STDMETHOD(GetSystemFontCollection)(THIS_
+        IDWriteFontCollection **fontCollection,
+        WINBOOL checkForUpdates __MINGW_DEF_ARG_VAL(FALSE)) PURE;
+
+    STDMETHOD(CreateCustomFontCollection)(THIS_
+        IDWriteFontCollectionLoader *collectionLoader,
+        void const *collectionKey,
+        UINT32 collectionKeySize,
+        IDWriteFontCollection **fontCollection) PURE;
+
+    STDMETHOD(RegisterFontCollectionLoader)(THIS_
+        IDWriteFontCollectionLoader *fontCollectionLoader) PURE;
+
+    STDMETHOD(UnregisterFontCollectionLoader)(THIS_
+        IDWriteFontCollectionLoader *fontCollectionLoader) PURE;
+
+    STDMETHOD(CreateFontFileReference)(THIS_
+        WCHAR const *filePath,
+        FILETIME const *lastWriteTime,
+        IDWriteFontFile **fontFile) PURE;
+
+    STDMETHOD(CreateCustomFontFileReference)(THIS_
+        void const *fontFileReferenceKey,
+        UINT32 fontFileReferenceKeySize,
+        IDWriteFontFileLoader *fontFileLoader,
+        IDWriteFontFile **fontFile) PURE;
+
+    STDMETHOD(CreateFontFace)(THIS_
+        DWRITE_FONT_FACE_TYPE fontFaceType,
+        UINT32 numberOfFiles,
+        IDWriteFontFile *const *fontFiles,
+        UINT32 faceIndex,
+        DWRITE_FONT_SIMULATIONS fontFaceSimulationFlags,
+        IDWriteFontFace **fontFace) PURE;
+
+    STDMETHOD(CreateRenderingParams)(THIS_
+        IDWriteRenderingParams **renderingParams) PURE;
+
+    STDMETHOD(CreateMonitorRenderingParams)(THIS_
+        HMONITOR monitor,
+        IDWriteRenderingParams **renderingParams) PURE;
+
+    STDMETHOD(CreateCustomRenderingParams)(THIS_
+        FLOAT gamma,
+        FLOAT enhancedContrast,
+        FLOAT clearTypeLevel,
+        DWRITE_PIXEL_GEOMETRY pixelGeometry,
+        DWRITE_RENDERING_MODE renderingMode,
+        IDWriteRenderingParams **renderingParams) PURE;
+
+    STDMETHOD(RegisterFontFileLoader)(THIS_
+        IDWriteFontFileLoader *fontFileLoader) PURE;
+
+    STDMETHOD(UnregisterFontFileLoader)(THIS_
+        IDWriteFontFileLoader *fontFileLoader) PURE;
+
+    STDMETHOD(CreateTextFormat)(THIS_
+        WCHAR const *fontFamilyName,
+        IDWriteFontCollection *fontCollection,
+        DWRITE_FONT_WEIGHT fontWeight,
+        DWRITE_FONT_STYLE fontStyle,
+        DWRITE_FONT_STRETCH fontStretch,
+        FLOAT fontSize,
+        WCHAR const *localeName,
+        IDWriteTextFormat **textFormat) PURE;
+
+    STDMETHOD(CreateTypography)(THIS_
+        IDWriteTypography **typography) PURE;
+
+    STDMETHOD(GetGdiInterop)(THIS_
+        IDWriteGdiInterop **gdiInterop) PURE;
+
+    STDMETHOD(CreateTextLayout)(THIS_
+        WCHAR const *string,
+        UINT32 stringLength,
+        IDWriteTextFormat *textFormat,
+        FLOAT maxWidth,
+        FLOAT maxHeight,
+        IDWriteTextLayout **textLayout) PURE;
+
+    STDMETHOD(CreateGdiCompatibleTextLayout)(THIS_
+        WCHAR const *string,
+        UINT32 stringLength,
+        IDWriteTextFormat *textFormat,
+        FLOAT layoutWidth,
+        FLOAT layoutHeight,
+        FLOAT pixelsPerDip,
+        DWRITE_MATRIX const *transform,
+        WINBOOL useGdiNatural,
+        IDWriteTextLayout **textLayout) PURE;
+
+    STDMETHOD(CreateEllipsisTrimmingSign)(THIS_
+        IDWriteTextFormat *textFormat,
+        IDWriteInlineObject **trimmingSign) PURE;
+
+    STDMETHOD(CreateTextAnalyzer)(THIS_
+        IDWriteTextAnalyzer **textAnalyzer) PURE;
+
+    STDMETHOD(CreateNumberSubstitution)(THIS_
+        DWRITE_NUMBER_SUBSTITUTION_METHOD substitutionMethod,
+        WCHAR const *localeName,
+        WINBOOL ignoreUserOverride,
+        IDWriteNumberSubstitution **numberSubstitution) PURE;
+
+    STDMETHOD(CreateGlyphRunAnalysis)(THIS_
+        DWRITE_GLYPH_RUN const *glyphRun,
+        FLOAT pixelsPerDip,
+        DWRITE_MATRIX const *transform,
+        DWRITE_RENDERING_MODE renderingMode,
+        DWRITE_MEASURING_MODE measuringMode,
+        FLOAT baselineOriginX,
+        FLOAT baselineOriginY,
+        IDWriteGlyphRunAnalysis **glyphRunAnalysis) PURE;
+#endif
+
+    /* IDWriteFactory1 methods */
+    STDMETHOD(GetEudcFontCollection)(THIS_
+        IDWriteFontCollection **fontCollection,
+        BOOL checkForUpdates __MINGW_DEF_ARG_VAL(FALSE)) PURE;
+
+    STDMETHOD(CreateCustomRenderingParams)(THIS_
+        FLOAT gamma,
+        FLOAT enhancedContrast,
+        FLOAT enhancedContrastGrayscale,
+        FLOAT clearTypeLevel,
+        DWRITE_PIXEL_GEOMETRY pixelGeometry,
+        DWRITE_RENDERING_MODE renderingMode,
+        IDWriteRenderingParams1 **renderingParams) PURE;
+
+#ifdef __cplusplus
+    using IDWriteFactory::CreateCustomRenderingParams;
+#endif
+
+    END_INTERFACE
+};
+
+__CRT_UUID_DECL(IDWriteFactory1, 0x30572f99,0xdac6,0x41db,0xa1,0x6e,0x04,0x86,0x30,0x7e,0x60,0x6a)
 
 #endif /* DWRITE_1_H_INCLUDED */
diff --git a/x86_64-w64-mingw32/include/dwrite_2.h b/x86_64-w64-mingw32/include/dwrite_2.h
new file mode 100644
index 0000000..cbe96a6
--- /dev/null
+++ b/x86_64-w64-mingw32/include/dwrite_2.h
@@ -0,0 +1,367 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef DWRITE_2_H_INCLUDED
+#define DWRITE_2_H_INCLUDED
+
+#include <dwrite_1.h>
+
+typedef enum DWRITE_GRID_FIT_MODE
+{
+    DWRITE_GRID_FIT_MODE_DEFAULT,
+    DWRITE_GRID_FIT_MODE_DISABLED,
+    DWRITE_GRID_FIT_MODE_ENABLED
+} DWRITE_GRID_FIT_MODE;
+
+#ifndef D3DCOLORVALUE_DEFINED
+#define D3DCOLORVALUE_DEFINED
+typedef struct _D3DCOLORVALUE {
+    union {
+        FLOAT r;
+        FLOAT dvR;
+    } DUMMYUNIONNAME1;
+    union {
+        FLOAT g;
+        FLOAT dvG;
+    } DUMMYUNIONNAME2;
+    union {
+        FLOAT b;
+        FLOAT dvB;
+    } DUMMYUNIONNAME3;
+    union {
+        FLOAT a;
+        FLOAT dvA;
+    } DUMMYUNIONNAME4;
+} D3DCOLORVALUE,*LPD3DCOLORVALUE;
+#endif /* D3DCOLORVALUE_DEFINED */
+
+typedef D3DCOLORVALUE DWRITE_COLOR_F;
+
+typedef struct DWRITE_COLOR_GLYPH_RUN
+{
+    DWRITE_GLYPH_RUN glyphRun;
+    DWRITE_GLYPH_RUN_DESCRIPTION *glyphRunDescription;
+    FLOAT baselineOriginX;
+    FLOAT baselineOriginY;
+    DWRITE_COLOR_F runColor;
+    UINT16 paletteIndex;
+} DWRITE_COLOR_GLYPH_RUN;
+
+#undef  INTERFACE
+#define INTERFACE IDWriteFontFallback
+DECLARE_INTERFACE_(IDWriteFontFallback,IUnknown)
+{
+    BEGIN_INTERFACE
+
+#ifndef __cplusplus
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+#endif
+
+    STDMETHOD(MapCharacters)(THIS_
+        IDWriteTextAnalysisSource *analysisSource,
+        UINT32 textPosition,
+        UINT32 textLength,
+        IDWriteFontCollection *baseFontCollection,
+        wchar_t const *baseFamilyName,
+        DWRITE_FONT_WEIGHT baseWeight,
+        DWRITE_FONT_STYLE baseStyle,
+        DWRITE_FONT_STRETCH baseStretch,
+        UINT32 *mappedLength,
+        IDWriteFont **mappedFont,
+        FLOAT *scale) PURE;
+
+    END_INTERFACE
+};
+
+__CRT_UUID_DECL(IDWriteFontFallback, 0xefa008f9,0xf7a1,0x48bf,0xb0,0x5c,0xf2,0x24,0x71,0x3c,0xc0,0xff)
+
+#undef  INTERFACE
+#define INTERFACE IDWriteFontFallbackBuilder
+DECLARE_INTERFACE_(IDWriteFontFallbackBuilder,IUnknown)
+{
+    BEGIN_INTERFACE
+
+#ifndef __cplusplus
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+#endif
+
+    STDMETHOD(AddMapping)(THIS_
+        DWRITE_UNICODE_RANGE const *ranges,
+        UINT32 rangesCount,
+        WCHAR const **targetFamilyNames,
+        UINT32 targetFamilyNamesCount,
+        IDWriteFontCollection *fontCollection __MINGW_DEF_ARG_VAL(NULL),
+        WCHAR const *localeName __MINGW_DEF_ARG_VAL(NULL),
+        WCHAR const *baseFamilyName __MINGW_DEF_ARG_VAL(NULL),
+        FLOAT scale __MINGW_DEF_ARG_VAL(1.0f)) PURE;
+
+    STDMETHOD(AddMappings)(THIS_
+        IDWriteFontFallback *fontFallback) PURE;
+
+    STDMETHOD(CreateFontFallback)(THIS_
+        IDWriteFontFallback **fontFallback) PURE;
+
+    END_INTERFACE
+};
+
+__CRT_UUID_DECL(IDWriteFontFallbackBuilder, 0xfd882d06,0x8aba,0x4fb8,0xb8,0x49,0x8b,0xe8,0xb7,0x3e,0x14,0xde)
+
+#undef  INTERFACE
+#define INTERFACE IDWriteColorGlyphRunEnumerator
+DECLARE_INTERFACE_(IDWriteColorGlyphRunEnumerator,IUnknown)
+{
+    BEGIN_INTERFACE
+
+#ifndef __cplusplus
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+#endif
+
+    STDMETHOD(MoveNext)(THIS_
+        BOOL *hasRun) PURE;
+
+    STDMETHOD(GetCurrentRun)(THIS_
+        DWRITE_COLOR_GLYPH_RUN const **colorGlyphRun) PURE;
+
+    END_INTERFACE
+};
+
+__CRT_UUID_DECL(IDWriteColorGlyphRunEnumerator, 0xd31fbe17,0xf157,0x41a2,0x8d,0x24,0xcb,0x77,0x9e,0x05,0x60,0xe8)
+
+#undef  INTERFACE
+#define INTERFACE IDWriteRenderingParams2
+DECLARE_INTERFACE_(IDWriteRenderingParams2,IDWriteRenderingParams1)
+{
+    BEGIN_INTERFACE
+
+#ifndef __cplusplus
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IDWriteRenderingParams methods */
+    STDMETHOD_(FLOAT, GetGamma)(THIS) PURE;
+    STDMETHOD_(FLOAT, GetEnhancedContrast)(THIS) PURE;
+    STDMETHOD_(FLOAT, GetClearTypeLevel)(THIS) PURE;
+    STDMETHOD_(DWRITE_PIXEL_GEOMETRY, GetPixelGeometry)(THIS) PURE;
+    STDMETHOD_(DWRITE_RENDERING_MODE, GetRenderingMode)(THIS) PURE;
+
+    /* IDWriteRenderingParams1 methods */
+    STDMETHOD_(FLOAT, GetGrayscaleEnhancedContrast)(THIS) PURE;
+#endif
+
+    /* IDWriteRenderingParams2 methods */
+    STDMETHOD_(DWRITE_GRID_FIT_MODE, GetGridFitMode)(THIS) PURE;
+
+    END_INTERFACE
+};
+
+__CRT_UUID_DECL(IDWriteRenderingParams2, 0xf9d711c3,0x9777,0x40ae,0x87,0xe8,0x3e,0x5a,0xf9,0xbf,0x09,0x48)
+
+#undef  INTERFACE
+#define INTERFACE IDWriteFactory2
+DECLARE_INTERFACE_(IDWriteFactory2,IDWriteFactory1)
+{
+    BEGIN_INTERFACE
+
+#ifndef __cplusplus
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /* IDWriteFactory methods */
+    STDMETHOD(GetSystemFontCollection)(THIS_
+        IDWriteFontCollection **fontCollection,
+        WINBOOL checkForUpdates __MINGW_DEF_ARG_VAL(FALSE)) PURE;
+
+    STDMETHOD(CreateCustomFontCollection)(THIS_
+        IDWriteFontCollectionLoader *collectionLoader,
+        void const *collectionKey,
+        UINT32 collectionKeySize,
+        IDWriteFontCollection **fontCollection) PURE;
+
+    STDMETHOD(RegisterFontCollectionLoader)(THIS_
+        IDWriteFontCollectionLoader *fontCollectionLoader) PURE;
+
+    STDMETHOD(UnregisterFontCollectionLoader)(THIS_
+        IDWriteFontCollectionLoader *fontCollectionLoader) PURE;
+
+    STDMETHOD(CreateFontFileReference)(THIS_
+        WCHAR const *filePath,
+        FILETIME const *lastWriteTime,
+        IDWriteFontFile **fontFile) PURE;
+
+    STDMETHOD(CreateCustomFontFileReference)(THIS_
+        void const *fontFileReferenceKey,
+        UINT32 fontFileReferenceKeySize,
+        IDWriteFontFileLoader *fontFileLoader,
+        IDWriteFontFile **fontFile) PURE;
+
+    STDMETHOD(CreateFontFace)(THIS_
+        DWRITE_FONT_FACE_TYPE fontFaceType,
+        UINT32 numberOfFiles,
+        IDWriteFontFile *const *fontFiles,
+        UINT32 faceIndex,
+        DWRITE_FONT_SIMULATIONS fontFaceSimulationFlags,
+        IDWriteFontFace **fontFace) PURE;
+
+    STDMETHOD(CreateRenderingParams)(THIS_
+        IDWriteRenderingParams **renderingParams) PURE;
+
+    STDMETHOD(CreateMonitorRenderingParams)(THIS_
+        HMONITOR monitor,
+        IDWriteRenderingParams **renderingParams) PURE;
+
+    STDMETHOD(CreateCustomRenderingParams)(THIS_
+        FLOAT gamma,
+        FLOAT enhancedContrast,
+        FLOAT clearTypeLevel,
+        DWRITE_PIXEL_GEOMETRY pixelGeometry,
+        DWRITE_RENDERING_MODE renderingMode,
+        IDWriteRenderingParams **renderingParams) PURE;
+
+    STDMETHOD(RegisterFontFileLoader)(THIS_
+        IDWriteFontFileLoader *fontFileLoader) PURE;
+
+    STDMETHOD(UnregisterFontFileLoader)(THIS_
+        IDWriteFontFileLoader *fontFileLoader) PURE;
+
+    STDMETHOD(CreateTextFormat)(THIS_
+        WCHAR const *fontFamilyName,
+        IDWriteFontCollection *fontCollection,
+        DWRITE_FONT_WEIGHT fontWeight,
+        DWRITE_FONT_STYLE fontStyle,
+        DWRITE_FONT_STRETCH fontStretch,
+        FLOAT fontSize,
+        WCHAR const *localeName,
+        IDWriteTextFormat **textFormat) PURE;
+
+    STDMETHOD(CreateTypography)(THIS_
+        IDWriteTypography **typography) PURE;
+
+    STDMETHOD(GetGdiInterop)(THIS_
+        IDWriteGdiInterop **gdiInterop) PURE;
+
+    STDMETHOD(CreateTextLayout)(THIS_
+        WCHAR const *string,
+        UINT32 stringLength,
+        IDWriteTextFormat *textFormat,
+        FLOAT maxWidth,
+        FLOAT maxHeight,
+        IDWriteTextLayout **textLayout) PURE;
+
+    STDMETHOD(CreateGdiCompatibleTextLayout)(THIS_
+        WCHAR const *string,
+        UINT32 stringLength,
+        IDWriteTextFormat *textFormat,
+        FLOAT layoutWidth,
+        FLOAT layoutHeight,
+        FLOAT pixelsPerDip,
+        DWRITE_MATRIX const *transform,
+        WINBOOL useGdiNatural,
+        IDWriteTextLayout **textLayout) PURE;
+
+    STDMETHOD(CreateEllipsisTrimmingSign)(THIS_
+        IDWriteTextFormat *textFormat,
+        IDWriteInlineObject **trimmingSign) PURE;
+
+    STDMETHOD(CreateTextAnalyzer)(THIS_
+        IDWriteTextAnalyzer **textAnalyzer) PURE;
+
+    STDMETHOD(CreateNumberSubstitution)(THIS_
+        DWRITE_NUMBER_SUBSTITUTION_METHOD substitutionMethod,
+        WCHAR const *localeName,
+        WINBOOL ignoreUserOverride,
+        IDWriteNumberSubstitution **numberSubstitution) PURE;
+
+    STDMETHOD(CreateGlyphRunAnalysis)(THIS_
+        DWRITE_GLYPH_RUN const *glyphRun,
+        FLOAT pixelsPerDip,
+        DWRITE_MATRIX const *transform,
+        DWRITE_RENDERING_MODE renderingMode,
+        DWRITE_MEASURING_MODE measuringMode,
+        FLOAT baselineOriginX,
+        FLOAT baselineOriginY,
+        IDWriteGlyphRunAnalysis **glyphRunAnalysis) PURE;
+
+    /* IDWriteFactory1 methods */
+    STDMETHOD(GetEudcFontCollection)(THIS_
+        IDWriteFontCollection **fontCollection,
+        BOOL checkForUpdates __MINGW_DEF_ARG_VAL(FALSE)) PURE;
+
+    STDMETHOD(CreateCustomRenderingParams)(THIS_
+        FLOAT gamma,
+        FLOAT enhancedContrast,
+        FLOAT enhancedContrastGrayscale,
+        FLOAT clearTypeLevel,
+        DWRITE_PIXEL_GEOMETRY pixelGeometry,
+        DWRITE_RENDERING_MODE renderingMode,
+        IDWriteRenderingParams1 **renderingParams) PURE;
+#endif
+
+    /* IDWriteFactory2 methods */
+    STDMETHOD(GetSystemFontFallback)(THIS_
+        IDWriteFontFallback **fontFallback) PURE;
+
+    STDMETHOD(CreateFontFallbackBuilder)(THIS_
+        IDWriteFontFallbackBuilder **fontFallbackBuilder) PURE;
+
+    STDMETHOD(TranslateColorGlyphRun)(THIS_
+        FLOAT baselineOriginX,
+        FLOAT baselineOriginY,
+        DWRITE_GLYPH_RUN const *glyphRun,
+        DWRITE_GLYPH_RUN_DESCRIPTION const *glyphRunDescription,
+        DWRITE_MEASURING_MODE measuringMode,
+        DWRITE_MATRIX const *worldToDeviceTransform,
+        UINT32 colorPaletteIndex,
+        IDWriteColorGlyphRunEnumerator **colorLayers) PURE;
+
+    STDMETHOD(CreateCustomRenderingParams)(THIS_
+        FLOAT gamma,
+        FLOAT enhancedContrast,
+        FLOAT grayscaleEnhancedContrast,
+        FLOAT clearTypeLevel,
+        DWRITE_PIXEL_GEOMETRY pixelGeometry,
+        DWRITE_RENDERING_MODE renderingMode,
+        DWRITE_GRID_FIT_MODE gridFitMode,
+        IDWriteRenderingParams2 **renderingParams) PURE;
+
+#ifdef __cplusplus
+    using IDWriteFactory::CreateCustomRenderingParams;
+    using IDWriteFactory1::CreateCustomRenderingParams;
+#endif
+
+    STDMETHOD(CreateGlyphRunAnalysis)(THIS_
+        DWRITE_GLYPH_RUN const *glyphRun,
+        DWRITE_MATRIX const *transform,
+        DWRITE_RENDERING_MODE renderingMode,
+        DWRITE_MEASURING_MODE measuringMode,
+        DWRITE_GRID_FIT_MODE gridFitMode,
+        DWRITE_TEXT_ANTIALIAS_MODE antialiasMode,
+        FLOAT baselineOriginX,
+        FLOAT baselineOriginY,
+        IDWriteGlyphRunAnalysis **glyphRunAnalysis) PURE;
+
+#ifdef __cplusplus
+    using IDWriteFactory::CreateGlyphRunAnalysis;
+#endif
+
+    END_INTERFACE
+};
+
+__CRT_UUID_DECL(IDWriteFactory2, 0x0439fc60,0xca44,0x4994,0x8d,0xee,0x3a,0x9a,0xf7,0xb7,0x32,0xec)
+
+#endif /* DWRITE_2_H_INCLUDED */
diff --git a/x86_64-w64-mingw32/include/dxgi.h b/x86_64-w64-mingw32/include/dxgi.h
index 88e76a2..b6530c7 100644
--- a/x86_64-w64-mingw32/include/dxgi.h
+++ b/x86_64-w64-mingw32/include/dxgi.h
@@ -135,6 +135,10 @@
 
 #define DXGI_USAGE_READ_ONLY (0x100)
 
+#define DXGI_USAGE_DISCARD_ON_PRESENT (0x200)
+
+#define DXGI_USAGE_UNORDERED_ACCESS (0x400)
+
 #define DXGI_ENUM_MODES_INTERLACED (1)
 
 #define DXGI_ENUM_MODES_SCALING (2)
@@ -142,7 +146,8 @@
 typedef enum DXGI_SWAP_EFFECT {
     DXGI_SWAP_EFFECT_DISCARD = 0,
     DXGI_SWAP_EFFECT_SEQUENTIAL = 1,
-    DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL = 3
+    DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL = 3,
+    DXGI_SWAP_EFFECT_FLIP_DISCARD = 4
 } DXGI_SWAP_EFFECT;
 typedef enum DXGI_RESIDENCY {
     DXGI_RESIDENCY_FULLY_RESIDENT = 1,
diff --git a/x86_64-w64-mingw32/include/dxgi.idl b/x86_64-w64-mingw32/include/dxgi.idl
index 009a6b5..cc98970 100644
--- a/x86_64-w64-mingw32/include/dxgi.idl
+++ b/x86_64-w64-mingw32/include/dxgi.idl
@@ -60,6 +60,8 @@
 const DXGI_USAGE DXGI_USAGE_BACK_BUFFER             = 0x40L;
 const DXGI_USAGE DXGI_USAGE_SHARED                  = 0x80L;
 const DXGI_USAGE DXGI_USAGE_READ_ONLY               = 0x100L;
+const DXGI_USAGE DXGI_USAGE_DISCARD_ON_PRESENT      = 0x200L;
+const DXGI_USAGE DXGI_USAGE_UNORDERED_ACCESS        = 0x400L;
 
 const UINT DXGI_ENUM_MODES_INTERLACED               = 1;
 const UINT DXGI_ENUM_MODES_SCALING                  = 2;
@@ -67,7 +69,8 @@
 typedef enum DXGI_SWAP_EFFECT {
     DXGI_SWAP_EFFECT_DISCARD    = 0,
     DXGI_SWAP_EFFECT_SEQUENTIAL = 1,
-    DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL = 3
+    DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL = 3,
+    DXGI_SWAP_EFFECT_FLIP_DISCARD = 4
 } DXGI_SWAP_EFFECT;
 
 typedef enum DXGI_RESIDENCY {
diff --git a/x86_64-w64-mingw32/include/dxgi1_2.h b/x86_64-w64-mingw32/include/dxgi1_2.h
index 72ac571..de3f359 100644
--- a/x86_64-w64-mingw32/include/dxgi1_2.h
+++ b/x86_64-w64-mingw32/include/dxgi1_2.h
@@ -32,6 +32,11 @@
 typedef interface IDXGIFactory2 IDXGIFactory2;
 #endif
 
+#ifndef __IDXGIAdapter2_FWD_DEFINED__
+#define __IDXGIAdapter2_FWD_DEFINED__
+typedef interface IDXGIAdapter2 IDXGIAdapter2;
+#endif
+
 /* Headers for imported files */
 
 #include <dxgi.h>
@@ -1187,6 +1192,199 @@
 
 #endif  /* __IDXGIFactory2_INTERFACE_DEFINED__ */
 
+typedef enum DXGI_GRAPHICS_PREEMPTION_GRANULARITY {
+    DXGI_GRAPHICS_PREEMPTION_DMA_BUFFER_BOUNDARY = 0,
+    DXGI_GRAPHICS_PREEMPTION_PRIMITIVE_BOUNDARY = 1,
+    DXGI_GRAPHICS_PREEMPTION_TRIANGLE_BOUNDARY = 2,
+    DXGI_GRAPHICS_PREEMPTION_PIXEL_BOUNDARY = 3,
+    DXGI_GRAPHICS_PREEMPTION_INSTRUCTION_BOUNDARY = 4
+} DXGI_GRAPHICS_PREEMPTION_GRANULARITY;
+typedef enum DXGI_COMPUTE_PREEMPTION_GRANULARITY {
+    DXGI_COMPUTE_PREEMPTION_DMA_BUFFER_BOUNDARY = 0,
+    DXGI_COMPUTE_PREEMPTION_DISPATCH_BOUNDARY = 1,
+    DXGI_COMPUTE_PREEMPTION_THREAD_GROUP_BOUNDARY = 2,
+    DXGI_COMPUTE_PREEMPTION_THREAD_BOUNDARY = 3,
+    DXGI_COMPUTE_PREEMPTION_INSTRUCTION_BOUNDARY = 4
+} DXGI_COMPUTE_PREEMPTION_GRANULARITY;
+typedef struct DXGI_ADAPTER_DESC2 {
+    WCHAR Description[128];
+    UINT VendorId;
+    UINT DeviceId;
+    UINT SubSysId;
+    UINT Revision;
+    SIZE_T DedicatedVideoMemory;
+    SIZE_T DedicatedSystemMemory;
+    SIZE_T SharedSystemMemory;
+    LUID AdapterLuid;
+    UINT Flags;
+    DXGI_GRAPHICS_PREEMPTION_GRANULARITY GraphicsPreemptionGranularity;
+    DXGI_COMPUTE_PREEMPTION_GRANULARITY ComputePreemptionGranularity;
+} DXGI_ADAPTER_DESC2;
+/*****************************************************************************
+ * IDXGIAdapter2 interface
+ */
+#ifndef __IDXGIAdapter2_INTERFACE_DEFINED__
+#define __IDXGIAdapter2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDXGIAdapter2, 0x0aa1ae0a, 0xfa0e, 0x4b84, 0x86,0x44, 0xe0,0x5f,0xf8,0xe5,0xac,0xb5);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("0aa1ae0a-fa0e-4b84-8644-e05ff8e5acb5")
+IDXGIAdapter2 : public IDXGIAdapter1
+{
+    virtual HRESULT STDMETHODCALLTYPE GetDesc2(
+        DXGI_ADAPTER_DESC2 *pDesc) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDXGIAdapter2, 0x0aa1ae0a, 0xfa0e, 0x4b84, 0x86,0x44, 0xe0,0x5f,0xf8,0xe5,0xac,0xb5)
+#endif
+#else
+typedef struct IDXGIAdapter2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDXGIAdapter2* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDXGIAdapter2* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDXGIAdapter2* This);
+
+    /*** IDXGIObject methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        IDXGIAdapter2* This,
+        REFGUID guid,
+        UINT data_size,
+        const void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
+        IDXGIAdapter2* This,
+        REFGUID guid,
+        const IUnknown *object);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        IDXGIAdapter2* This,
+        REFGUID guid,
+        UINT *data_size,
+        void *data);
+
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IDXGIAdapter2* This,
+        REFIID riid,
+        void **parent);
+
+    /*** IDXGIAdapter methods ***/
+    HRESULT (STDMETHODCALLTYPE *EnumOutputs)(
+        IDXGIAdapter2* This,
+        UINT output_idx,
+        IDXGIOutput **output);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        IDXGIAdapter2* This,
+        DXGI_ADAPTER_DESC *desc);
+
+    HRESULT (STDMETHODCALLTYPE *CheckInterfaceSupport)(
+        IDXGIAdapter2* This,
+        REFGUID guid,
+        LARGE_INTEGER *umd_version);
+
+    /*** IDXGIAdapter1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDesc1)(
+        IDXGIAdapter2* This,
+        DXGI_ADAPTER_DESC1 *pDesc);
+
+    /*** IDXGIAdapter2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDesc2)(
+        IDXGIAdapter2* This,
+        DXGI_ADAPTER_DESC2 *pDesc);
+
+    END_INTERFACE
+} IDXGIAdapter2Vtbl;
+interface IDXGIAdapter2 {
+    CONST_VTBL IDXGIAdapter2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDXGIAdapter2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDXGIAdapter2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDXGIAdapter2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDXGIObject methods ***/
+#define IDXGIAdapter2_SetPrivateData(This,guid,data_size,data) (This)->lpVtbl->SetPrivateData(This,guid,data_size,data)
+#define IDXGIAdapter2_SetPrivateDataInterface(This,guid,object) (This)->lpVtbl->SetPrivateDataInterface(This,guid,object)
+#define IDXGIAdapter2_GetPrivateData(This,guid,data_size,data) (This)->lpVtbl->GetPrivateData(This,guid,data_size,data)
+#define IDXGIAdapter2_GetParent(This,riid,parent) (This)->lpVtbl->GetParent(This,riid,parent)
+/*** IDXGIAdapter methods ***/
+#define IDXGIAdapter2_EnumOutputs(This,output_idx,output) (This)->lpVtbl->EnumOutputs(This,output_idx,output)
+#define IDXGIAdapter2_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define IDXGIAdapter2_CheckInterfaceSupport(This,guid,umd_version) (This)->lpVtbl->CheckInterfaceSupport(This,guid,umd_version)
+/*** IDXGIAdapter1 methods ***/
+#define IDXGIAdapter2_GetDesc1(This,pDesc) (This)->lpVtbl->GetDesc1(This,pDesc)
+/*** IDXGIAdapter2 methods ***/
+#define IDXGIAdapter2_GetDesc2(This,pDesc) (This)->lpVtbl->GetDesc2(This,pDesc)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDXGIAdapter2_QueryInterface(IDXGIAdapter2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDXGIAdapter2_AddRef(IDXGIAdapter2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDXGIAdapter2_Release(IDXGIAdapter2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDXGIObject methods ***/
+static FORCEINLINE HRESULT IDXGIAdapter2_SetPrivateData(IDXGIAdapter2* This,REFGUID guid,UINT data_size,const void *data) {
+    return This->lpVtbl->SetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT IDXGIAdapter2_SetPrivateDataInterface(IDXGIAdapter2* This,REFGUID guid,const IUnknown *object) {
+    return This->lpVtbl->SetPrivateDataInterface(This,guid,object);
+}
+static FORCEINLINE HRESULT IDXGIAdapter2_GetPrivateData(IDXGIAdapter2* This,REFGUID guid,UINT *data_size,void *data) {
+    return This->lpVtbl->GetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT IDXGIAdapter2_GetParent(IDXGIAdapter2* This,REFIID riid,void **parent) {
+    return This->lpVtbl->GetParent(This,riid,parent);
+}
+/*** IDXGIAdapter methods ***/
+static FORCEINLINE HRESULT IDXGIAdapter2_EnumOutputs(IDXGIAdapter2* This,UINT output_idx,IDXGIOutput **output) {
+    return This->lpVtbl->EnumOutputs(This,output_idx,output);
+}
+static FORCEINLINE HRESULT IDXGIAdapter2_GetDesc(IDXGIAdapter2* This,DXGI_ADAPTER_DESC *desc) {
+    return This->lpVtbl->GetDesc(This,desc);
+}
+static FORCEINLINE HRESULT IDXGIAdapter2_CheckInterfaceSupport(IDXGIAdapter2* This,REFGUID guid,LARGE_INTEGER *umd_version) {
+    return This->lpVtbl->CheckInterfaceSupport(This,guid,umd_version);
+}
+/*** IDXGIAdapter1 methods ***/
+static FORCEINLINE HRESULT IDXGIAdapter2_GetDesc1(IDXGIAdapter2* This,DXGI_ADAPTER_DESC1 *pDesc) {
+    return This->lpVtbl->GetDesc1(This,pDesc);
+}
+/*** IDXGIAdapter2 methods ***/
+static FORCEINLINE HRESULT IDXGIAdapter2_GetDesc2(IDXGIAdapter2* This,DXGI_ADAPTER_DESC2 *pDesc) {
+    return This->lpVtbl->GetDesc2(This,pDesc);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IDXGIAdapter2_GetDesc2_Proxy(
+    IDXGIAdapter2* This,
+    DXGI_ADAPTER_DESC2 *pDesc);
+void __RPC_STUB IDXGIAdapter2_GetDesc2_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IDXGIAdapter2_INTERFACE_DEFINED__ */
+
 /* Begin additional prototypes for all interfaces */
 
 
diff --git a/x86_64-w64-mingw32/include/dxgi1_2.idl b/x86_64-w64-mingw32/include/dxgi1_2.idl
index 775b81c..92f9c0e 100644
--- a/x86_64-w64-mingw32/include/dxgi1_2.idl
+++ b/x86_64-w64-mingw32/include/dxgi1_2.idl
@@ -190,3 +190,45 @@
             [in]  IDXGIOutput *pRestrictToOutput,
             [out] IDXGISwapChain1 **ppSwapChain);
 }
+
+typedef enum DXGI_GRAPHICS_PREEMPTION_GRANULARITY {
+    DXGI_GRAPHICS_PREEMPTION_DMA_BUFFER_BOUNDARY,
+    DXGI_GRAPHICS_PREEMPTION_PRIMITIVE_BOUNDARY,
+    DXGI_GRAPHICS_PREEMPTION_TRIANGLE_BOUNDARY,
+    DXGI_GRAPHICS_PREEMPTION_PIXEL_BOUNDARY,
+    DXGI_GRAPHICS_PREEMPTION_INSTRUCTION_BOUNDARY
+} DXGI_GRAPHICS_PREEMPTION_GRANULARITY;
+
+typedef enum DXGI_COMPUTE_PREEMPTION_GRANULARITY {
+    DXGI_COMPUTE_PREEMPTION_DMA_BUFFER_BOUNDARY,
+    DXGI_COMPUTE_PREEMPTION_DISPATCH_BOUNDARY,
+    DXGI_COMPUTE_PREEMPTION_THREAD_GROUP_BOUNDARY,
+    DXGI_COMPUTE_PREEMPTION_THREAD_BOUNDARY,
+    DXGI_COMPUTE_PREEMPTION_INSTRUCTION_BOUNDARY
+} DXGI_COMPUTE_PREEMPTION_GRANULARITY;
+
+typedef struct DXGI_ADAPTER_DESC2 {
+    WCHAR Description[128];
+    UINT VendorId;
+    UINT DeviceId;
+    UINT SubSysId;
+    UINT Revision;
+    SIZE_T DedicatedVideoMemory;
+    SIZE_T DedicatedSystemMemory;
+    SIZE_T SharedSystemMemory;
+    LUID AdapterLuid;
+    UINT Flags;
+    DXGI_GRAPHICS_PREEMPTION_GRANULARITY GraphicsPreemptionGranularity;
+    DXGI_COMPUTE_PREEMPTION_GRANULARITY ComputePreemptionGranularity;
+} DXGI_ADAPTER_DESC2;
+
+[
+    object,
+    uuid(0aa1ae0a-fa0e-4b84-8644-e05ff8e5acb5),
+    local,
+    pointer_default(unique)
+]
+interface IDXGIAdapter2 : IDXGIAdapter1
+{
+    HRESULT GetDesc2([out] DXGI_ADAPTER_DESC2 *pDesc);
+}
diff --git a/x86_64-w64-mingw32/include/dxva.h b/x86_64-w64-mingw32/include/dxva.h
index e1793d9..050baec 100644
--- a/x86_64-w64-mingw32/include/dxva.h
+++ b/x86_64-w64-mingw32/include/dxva.h
@@ -211,6 +211,143 @@
 } DXVA_Slice_H264_Short;
 #pragma pack(pop)
 
+/* HEVC Picture Entry structure */
+typedef struct {
+    __C89_NAMELESS union {
+        __C89_NAMELESS struct {
+            UCHAR Index7Bits : 7; 
+            UCHAR AssociatedFlag : 1; 
+        }; 
+        UCHAR bPicEntry; 
+    }; 
+} DXVA_PicEntry_HEVC, *LPDXVA_PicEntry_HEVC;
+
+/* HEVC Picture Parameter structure */
+#pragma pack(push, 1)
+typedef struct _DXVA_PicParams_HEVC {
+    USHORT      PicWidthInMinCbsY;
+    USHORT      PicHeightInMinCbsY;
+    __C89_NAMELESS union {
+        __C89_NAMELESS struct {
+            USHORT  chroma_format_idc                       : 2;
+            USHORT  separate_colour_plane_flag              : 1;
+            USHORT  bit_depth_luma_minus8                   : 3; 
+            USHORT  bit_depth_chroma_minus8                 : 3;
+            USHORT  log2_max_pic_order_cnt_lsb_minus4       : 4;
+            USHORT  NoPicReorderingFlag                     : 1;
+            USHORT  NoBiPredFlag                            : 1;
+            USHORT  ReservedBits1                            : 1;
+        };
+        USHORT wFormatAndSequenceInfoFlags;
+    };
+    DXVA_PicEntry_HEVC  CurrPic;
+    UCHAR   sps_max_dec_pic_buffering_minus1;
+    UCHAR   log2_min_luma_coding_block_size_minus3;
+    UCHAR   log2_diff_max_min_luma_coding_block_size;
+    UCHAR   log2_min_transform_block_size_minus2;
+    UCHAR   log2_diff_max_min_transform_block_size;
+    UCHAR   max_transform_hierarchy_depth_inter;
+    UCHAR   max_transform_hierarchy_depth_intra;
+    UCHAR   num_short_term_ref_pic_sets;
+    UCHAR   num_long_term_ref_pics_sps;
+    UCHAR   num_ref_idx_l0_default_active_minus1;
+    UCHAR   num_ref_idx_l1_default_active_minus1;
+    CHAR    init_qp_minus26;
+    UCHAR   ucNumDeltaPocsOfRefRpsIdx;
+    USHORT  wNumBitsForShortTermRPSInSlice;
+    USHORT  ReservedBits2;
+
+    __C89_NAMELESS union {
+        __C89_NAMELESS struct {
+            UINT32  scaling_list_enabled_flag                    : 1;
+            UINT32  amp_enabled_flag                            : 1;
+            UINT32  sample_adaptive_offset_enabled_flag         : 1;
+            UINT32  pcm_enabled_flag                            : 1;
+            UINT32  pcm_sample_bit_depth_luma_minus1            : 4;
+            UINT32  pcm_sample_bit_depth_chroma_minus1          : 4;
+            UINT32  log2_min_pcm_luma_coding_block_size_minus3  : 2;
+            UINT32  log2_diff_max_min_pcm_luma_coding_block_size : 2;
+            UINT32  pcm_loop_filter_disabled_flag                : 1;
+            UINT32  long_term_ref_pics_present_flag             : 1;
+            UINT32  sps_temporal_mvp_enabled_flag               : 1;
+            UINT32  strong_intra_smoothing_enabled_flag         : 1;
+            UINT32  dependent_slice_segments_enabled_flag       : 1;
+            UINT32  output_flag_present_flag                    : 1;
+            UINT32  num_extra_slice_header_bits                 : 3;
+            UINT32  sign_data_hiding_enabled_flag               : 1;
+            UINT32  cabac_init_present_flag                     : 1;
+            UINT32  ReservedBits3                               : 5;
+        };
+        UINT32 dwCodingParamToolFlags;
+    };
+
+    __C89_NAMELESS union {
+        __C89_NAMELESS struct {
+            UINT32  constrained_intra_pred_flag                 : 1;
+            UINT32  transform_skip_enabled_flag                 : 1;
+            UINT32  cu_qp_delta_enabled_flag                    : 1;
+            UINT32  pps_slice_chroma_qp_offsets_present_flag    : 1;
+            UINT32  weighted_pred_flag                          : 1;
+            UINT32  weighted_bipred_flag                        : 1;
+            UINT32  transquant_bypass_enabled_flag              : 1;
+            UINT32  tiles_enabled_flag                          : 1;
+            UINT32  entropy_coding_sync_enabled_flag            : 1;
+            UINT32  uniform_spacing_flag                        : 1;
+            UINT32  loop_filter_across_tiles_enabled_flag       : 1;
+            UINT32  pps_loop_filter_across_slices_enabled_flag  : 1;
+            UINT32  deblocking_filter_override_enabled_flag     : 1;
+            UINT32  pps_deblocking_filter_disabled_flag         : 1;
+            UINT32  lists_modification_present_flag             : 1;
+            UINT32  slice_segment_header_extension_present_flag : 1;
+            UINT32  IrapPicFlag                                 : 1;
+            UINT32  IdrPicFlag                                  : 1;
+            UINT32  IntraPicFlag                                : 1;
+            UINT32  ReservedBits4                               : 13;
+        };
+        UINT32 dwCodingSettingPicturePropertyFlags;
+    };
+    CHAR    pps_cb_qp_offset;
+    CHAR    pps_cr_qp_offset;
+    UCHAR   num_tile_columns_minus1;
+    UCHAR   num_tile_rows_minus1;
+    USHORT  column_width_minus1[19];
+    USHORT  row_height_minus1[21];
+    UCHAR   diff_cu_qp_delta_depth;
+    CHAR    pps_beta_offset_div2;
+    CHAR    pps_tc_offset_div2;
+    UCHAR   log2_parallel_merge_level_minus2;
+    INT     CurrPicOrderCntVal;
+    DXVA_PicEntry_HEVC	RefPicList[15];
+    UCHAR   ReservedBits5;
+    INT     PicOrderCntValList[15];
+    UCHAR   RefPicSetStCurrBefore[8];
+    UCHAR   RefPicSetStCurrAfter[8];
+    UCHAR   RefPicSetLtCurr[8];
+    USHORT  ReservedBits6;
+    USHORT  ReservedBits7;
+    UINT    StatusReportFeedbackNumber;
+} DXVA_PicParams_HEVC, *LPDXVA_PicParams_HEVC;
+
+/* HEVC Quantizatiuon Matrix structure */
+typedef struct _DXVA_Qmatrix_HEVC {
+    UCHAR ucScalingLists0[6][16]; 
+    UCHAR ucScalingLists1[6][64]; 
+    UCHAR ucScalingLists2[6][64]; 
+    UCHAR ucScalingLists3[2][64]; 
+    UCHAR ucScalingListDCCoefSizeID2[6];
+    UCHAR ucScalingListDCCoefSizeID3[2];
+} DXVA_Qmatrix_HEVC, *LPDXVA_Qmatrix_HEVC;
+
+
+/* HEVC Slice Control Structure */
+typedef struct _DXVA_Slice_HEVC_Short {
+    UINT    BSNALunitDataLocation; 
+    UINT    SliceBytesInBuffer; 
+    USHORT  wBadSliceChopping; 
+} DXVA_Slice_HEVC_Short, *LPDXVA_Slice_HEVC_Short;
+
+#pragma pack(pop)
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/x86_64-w64-mingw32/include/dxva2api.h b/x86_64-w64-mingw32/include/dxva2api.h
index 39994f3..d4c5446 100644
--- a/x86_64-w64-mingw32/include/dxva2api.h
+++ b/x86_64-w64-mingw32/include/dxva2api.h
@@ -22,6 +22,21 @@
 typedef interface IDirect3DDeviceManager9 IDirect3DDeviceManager9;
 #endif
 
+#ifndef __IDirectXVideoDecoder_FWD_DEFINED__
+#define __IDirectXVideoDecoder_FWD_DEFINED__
+typedef interface IDirectXVideoDecoder IDirectXVideoDecoder;
+#endif
+
+#ifndef __IDirectXVideoAccelerationService_FWD_DEFINED__
+#define __IDirectXVideoAccelerationService_FWD_DEFINED__
+typedef interface IDirectXVideoAccelerationService IDirectXVideoAccelerationService;
+#endif
+
+#ifndef __IDirectXVideoDecoderService_FWD_DEFINED__
+#define __IDirectXVideoDecoderService_FWD_DEFINED__
+typedef interface IDirectXVideoDecoderService IDirectXVideoDecoderService;
+#endif
+
 /* Headers for imported files */
 
 #include <unknwn.h>
@@ -36,6 +51,11 @@
 typedef DWORD D3DFORMAT;
 typedef DWORD D3DPOOL;
 #endif
+#ifndef __IDirectXVideoDecoderService_FWD_DEFINED__
+#define __IDirectXVideoDecoderService_FWD_DEFINED__
+typedef interface IDirectXVideoDecoderService IDirectXVideoDecoderService;
+#endif
+
 #ifndef __REFERENCE_TIME_DEFINED
 #define __REFERENCE_TIME_DEFINED
 typedef LONGLONG REFERENCE_TIME;
@@ -51,9 +71,6 @@
 #define DXVA2_E_VIDEO_DEVICE_LOCKED MAKE_HRESULT(1, 4, 4098)
 #define DXVA2_E_NOT_AVAILABLE       MAKE_HRESULT(1, 4, 4099)
 
-DEFINE_GUID(IID_IDirectXVideoDecoderService, 0xfc51a551, 0xd5e7, 0x11d9, 0xaf,0x55,0x00,0x05,0x4e,0x43,0xff,0x02);
-DEFINE_GUID(IID_IDirectXVideoAccelerationService, 0xfc51a550, 0xd5e7, 0x11d9, 0xaf,0x55,0x00,0x05,0x4e,0x43,0xff,0x02);
-
 DEFINE_GUID(DXVA2_ModeMPEG2_MoComp, 0xe6a9f44b, 0x61b0,0x4563, 0x9e,0xa4,0x63,0xd2,0xa3,0xc6,0xfe,0x66);
 DEFINE_GUID(DXVA2_ModeMPEG2_IDCT, 0xbf22ad00, 0x03ea,0x4690, 0x80,0x77,0x47,0x33,0x46,0x20,0x9b,0x7e);
 DEFINE_GUID(DXVA2_ModeMPEG2_VLD, 0xee27417f, 0x5e28,0x4e65, 0xbe,0xea,0x1d,0x26,0xb5,0x08,0xad,0xc9);
@@ -73,8 +90,6 @@
 DEFINE_GUID(DXVA2_ModeVC1_C, 0x1b81beA2, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
 DEFINE_GUID(DXVA2_ModeVC1_D, 0x1b81beA3, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
 
-typedef struct IDirectXVideoDecoderService IDirectXVideoDecoderService;
-
 typedef enum _DXVA2_SampleFormat {
   DXVA2_SampleFormatMask                  = 0x00FF,
   DXVA2_SampleUnknown                     = 0,
@@ -179,70 +194,64 @@
   UCHAR Y;
   UCHAR Alpha;
 } DXVA2_AYUVSample8;
-
 typedef struct _DXVA2_ConfigPictureDecode {
-  GUID   guidConfigBitstreamEncryption;
-  GUID   guidConfigMBcontrolEncryption;
-  GUID   guidConfigResidDiffEncryption;
-  UINT   ConfigBitstreamRaw;
-  UINT   ConfigMBcontrolRasterOrder;
-  UINT   ConfigResidDiffHost;
-  UINT   ConfigSpatialResid8;
-  UINT   ConfigResid8Subtraction;
-  UINT   ConfigSpatialHost8or9Clipping;
-  UINT   ConfigSpatialResidInterleaved;
-  UINT   ConfigIntraResidUnsigned;
-  UINT   ConfigResidDiffAccelerator;
-  UINT   ConfigHostInverseScan;
-  UINT   ConfigSpecificIDCT;
-  UINT   Config4GroupedCoefs;
-  USHORT ConfigMinRenderTargetBuffCount;
-  USHORT ConfigDecoderSpecific;
+    GUID guidConfigBitstreamEncryption;
+    GUID guidConfigMBcontrolEncryption;
+    GUID guidConfigResidDiffEncryption;
+    UINT ConfigBitstreamRaw;
+    UINT ConfigMBcontrolRasterOrder;
+    UINT ConfigResidDiffHost;
+    UINT ConfigSpatialResid8;
+    UINT ConfigResid8Subtraction;
+    UINT ConfigSpatialHost8or9Clipping;
+    UINT ConfigSpatialResidInterleaved;
+    UINT ConfigIntraResidUnsigned;
+    UINT ConfigResidDiffAccelerator;
+    UINT ConfigHostInverseScan;
+    UINT ConfigSpecificIDCT;
+    UINT Config4GroupedCoefs;
+    USHORT ConfigMinRenderTargetBuffCount;
+    USHORT ConfigDecoderSpecific;
 } DXVA2_ConfigPictureDecode;
-
 typedef struct _DXVA2_DecodeBufferDesc {
-  DWORD CompressedBufferType;
-  UINT  BufferIndex;
-  UINT  DataOffset;
-  UINT  DataSize;
-  UINT  FirstMBaddress;
-  UINT  NumMBsInBuffer;
-  UINT  Width;
-  UINT  Height;
-  UINT  Stride;
-  UINT  ReservedBits;
-  PVOID pvPVPState;
+    DWORD CompressedBufferType;
+    UINT BufferIndex;
+    UINT DataOffset;
+    UINT DataSize;
+    UINT FirstMBaddress;
+    UINT NumMBsInBuffer;
+    UINT Width;
+    UINT Height;
+    UINT Stride;
+    UINT ReservedBits;
+    PVOID pvPVPState;
 } DXVA2_DecodeBufferDesc;
-
 typedef struct _DXVA2_DecodeExtensionData {
-  UINT  Function;
-  PVOID pPrivateInputData;
-  UINT  PrivateInputDataSize;
-  PVOID pPrivateOutputData;
-  UINT  PrivateOutputDataSize;
+    UINT Function;
+    PVOID pPrivateInputData;
+    UINT PrivateInputDataSize;
+    PVOID pPrivateOutputData;
+    UINT PrivateOutputDataSize;
 } DXVA2_DecodeExtensionData;
-
 typedef struct _DXVA2_DecodeExecuteParams {
-  UINT                      NumCompBuffers;
-  DXVA2_DecodeBufferDesc    *pCompressedBuffers;
-  DXVA2_DecodeExtensionData *pExtensionData;
+    UINT NumCompBuffers;
+    DXVA2_DecodeBufferDesc *pCompressedBuffers;
+    DXVA2_DecodeExtensionData *pExtensionData;
 } DXVA2_DecodeExecuteParams;
-
-typedef struct {
-  __C89_NAMELESS union {
-    __C89_NAMELESS struct {
-      UINT SampleFormat            :8;
-      UINT VideoChromaSubsampling  :4;
-      UINT NominalRange            :3;
-      UINT VideoTransferMatrix     :3;
-      UINT VideoLighting           :4;
-      UINT VideoPrimaries          :5;
-      UINT VideoTransferFunction   :5;
-    } DUMMYSTRUCTNAME;
-    UINT   value;
-  } DUMMYUNIONNAME;
+typedef struct _DXVA2_ExtendedFormat {
+    __C89_NAMELESS union {
+        __C89_NAMELESS struct {
+            UINT SampleFormat : 8;
+            UINT VideoChromaSubsampling : 4;
+            UINT NominalRange : 3;
+            UINT VideoTransferMatrix : 3;
+            UINT VideoLighting : 4;
+            UINT VideoPrimaries : 5;
+            UINT VideoTransferFunction : 5;
+        } __C89_NAMELESSSTRUCTNAME;
+        UINT value;
+    } __C89_NAMELESSUNIONNAME;
 } DXVA2_ExtendedFormat;
-
 typedef struct _DXVA2_Fixed32 {
   __C89_NAMELESS union {
     __C89_NAMELESS struct {
@@ -258,12 +267,10 @@
   DXVA2_Fixed32 Threshold;
   DXVA2_Fixed32 Radius;
 } DXVA2_FilterValues;
-
 typedef struct _DXVA2_Frequency {
-  UINT Numerator;
-  UINT Denominator;
+    UINT Numerator;
+    UINT Denominator;
 } DXVA2_Frequency;
-
 typedef struct _DXVA2_ProcAmpValues {
   DXVA2_Fixed32 Brightness;
   DXVA2_Fixed32 Contrast;
@@ -277,20 +284,16 @@
   DXVA2_Fixed32 DefaultValue;
   DXVA2_Fixed32 StepSize;
 } DXVA2_ValueRange;
-
-#ifdef _D3D9_H_
 typedef struct _DXVA2_VideoDesc {
-  UINT                 SampleWidth;
-  UINT                 SampleHeight;
-  DXVA2_ExtendedFormat SampleFormat;
-  D3DFORMAT            Format;
-  DXVA2_Frequency      InputSampleFreq;
-  DXVA2_Frequency      OutputFrameFreq;
-  UINT                 UABProtectionLevel;
-  UINT                 Reserved;
+    UINT SampleWidth;
+    UINT SampleHeight;
+    DXVA2_ExtendedFormat SampleFormat;
+    D3DFORMAT Format;
+    DXVA2_Frequency InputSampleFreq;
+    DXVA2_Frequency OutputFrameFreq;
+    UINT UABProtectionLevel;
+    UINT Reserved;
 } DXVA2_VideoDesc;
-#endif
-
 /* DeviceCaps
 DXVA2_VPDev_EmulatedDXVA1
 DXVA2_VPDev_HardwareDevice
@@ -433,7 +436,6 @@
   f32.Fraction = ((ULONG) (f * (1 << 16))) & 0xFFFF;
   return f32;
 }
-
 #ifdef _D3D9_H_
 HRESULT WINAPI DXVA2CreateDirect3DDeviceManager9(UINT *pResetToken,IDirect3DDeviceManager9 **ppDXVAManager);
 HRESULT WINAPI DXVA2CreateVideoService(IDirect3DDevice9 *pDD,REFIID riid,void **ppService);
@@ -653,97 +655,530 @@
 
 #endif  /* __IDirect3DDeviceManager9_INTERFACE_DEFINED__ */
 
-#undef  INTERFACE
-#define INTERFACE IDirectXVideoDecoder
-DECLARE_INTERFACE_(IDirectXVideoDecoder,IUnknown)
+/*****************************************************************************
+ * IDirectXVideoDecoder interface
+ */
+#ifndef __IDirectXVideoDecoder_INTERFACE_DEFINED__
+#define __IDirectXVideoDecoder_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDirectXVideoDecoder, 0xf2b0810a, 0xfd00, 0x43c9, 0x91,0x8c, 0xdf,0x94,0xe2,0xd8,0xef,0x7d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("f2b0810a-fd00-43c9-918c-df94e2d8ef7d")
+IDirectXVideoDecoder : public IUnknown
 {
+    virtual HRESULT STDMETHODCALLTYPE GetVideoDecoderService(
+        IDirectXVideoDecoderService **ppService) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCreationParameters(
+        GUID *pDeviceGuid,
+        DXVA2_VideoDesc *pVideoDesc,
+        DXVA2_ConfigPictureDecode *pConfig,
+        IDirect3DSurface9 ***pDecoderRenderTargets,
+        UINT *pNumSurfaces) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBuffer(
+        UINT BufferType,
+        void **ppBuffer,
+        UINT *pBufferSize) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ReleaseBuffer(
+        UINT BufferType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE BeginFrame(
+        IDirect3DSurface9 *pRenderTarget,
+        void *pvPVPData) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EndFrame(
+        HANDLE *pHandleComplete) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Execute(
+        const DXVA2_DecodeExecuteParams *pExecuteParams) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDirectXVideoDecoder, 0xf2b0810a, 0xfd00, 0x43c9, 0x91,0x8c, 0xdf,0x94,0xe2,0xd8,0xef,0x7d)
+#endif
+#else
+typedef struct IDirectXVideoDecoderVtbl {
     BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDirectXVideoDecoder* This,
+        REFIID riid,
+        void **ppvObject);
 
-    /* IDirectXVideoDecoder methods */
-    STDMETHOD_(HRESULT,GetVideoDecoderService)(THIS_ IDirectXVideoDecoderService **ppAccelServices) PURE;
-    STDMETHOD_(HRESULT,GetCreationParameters)(THIS_ GUID *pDeviceGuid,DXVA2_VideoDesc *pVideoDesc,DXVA2_ConfigPictureDecode *pConfig,IDirect3DSurface9 ***pppDecoderRenderTargets,UINT *pNumSurfaces) PURE;
-    STDMETHOD_(HRESULT,GetBuffer)(THIS_ UINT BufferType,void **ppBuffer,UINT *pBufferSize) PURE;
-    STDMETHOD_(HRESULT,ReleaseBuffer)(THIS_ UINT BufferType) PURE;
-    STDMETHOD_(HRESULT,BeginFrame)(THIS_ IDirect3DSurface9 *pRenderTarget,void *pvPVPData) PURE;
-    STDMETHOD_(HRESULT,EndFrame)(THIS_ HANDLE *pHandleComplete) PURE;
-    STDMETHOD_(HRESULT,Execute)(THIS_ const DXVA2_DecodeExecuteParams *pExecuteParams) PURE;
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDirectXVideoDecoder* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDirectXVideoDecoder* This);
+
+    /*** IDirectXVideoDecoder methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetVideoDecoderService)(
+        IDirectXVideoDecoder* This,
+        IDirectXVideoDecoderService **ppService);
+
+    HRESULT (STDMETHODCALLTYPE *GetCreationParameters)(
+        IDirectXVideoDecoder* This,
+        GUID *pDeviceGuid,
+        DXVA2_VideoDesc *pVideoDesc,
+        DXVA2_ConfigPictureDecode *pConfig,
+        IDirect3DSurface9 ***pDecoderRenderTargets,
+        UINT *pNumSurfaces);
+
+    HRESULT (STDMETHODCALLTYPE *GetBuffer)(
+        IDirectXVideoDecoder* This,
+        UINT BufferType,
+        void **ppBuffer,
+        UINT *pBufferSize);
+
+    HRESULT (STDMETHODCALLTYPE *ReleaseBuffer)(
+        IDirectXVideoDecoder* This,
+        UINT BufferType);
+
+    HRESULT (STDMETHODCALLTYPE *BeginFrame)(
+        IDirectXVideoDecoder* This,
+        IDirect3DSurface9 *pRenderTarget,
+        void *pvPVPData);
+
+    HRESULT (STDMETHODCALLTYPE *EndFrame)(
+        IDirectXVideoDecoder* This,
+        HANDLE *pHandleComplete);
+
+    HRESULT (STDMETHODCALLTYPE *Execute)(
+        IDirectXVideoDecoder* This,
+        const DXVA2_DecodeExecuteParams *pExecuteParams);
 
     END_INTERFACE
+} IDirectXVideoDecoderVtbl;
+interface IDirectXVideoDecoder {
+    CONST_VTBL IDirectXVideoDecoderVtbl* lpVtbl;
 };
+
 #ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
 #define IDirectXVideoDecoder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define IDirectXVideoDecoder_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define IDirectXVideoDecoder_Release(This) (This)->lpVtbl->Release(This)
-#define IDirectXVideoDecoder_GetVideoDecoderService(This,ppAccelServices) (This)->lpVtbl->GetVideoDecoderService(This,ppAccelServices)
-#define IDirectXVideoDecoder_GetCreationParameters(This,pDeviceGuid,pVideoDesc,pConfig,pppDecoderRenderTargets,pNumSurfaces) (This)->lpVtbl->GetCreationParameters(This,pDeviceGuid,pVideoDesc,pConfig,pppDecoderRenderTargets,pNumSurfaces)
+/*** IDirectXVideoDecoder methods ***/
+#define IDirectXVideoDecoder_GetVideoDecoderService(This,ppService) (This)->lpVtbl->GetVideoDecoderService(This,ppService)
+#define IDirectXVideoDecoder_GetCreationParameters(This,pDeviceGuid,pVideoDesc,pConfig,pDecoderRenderTargets,pNumSurfaces) (This)->lpVtbl->GetCreationParameters(This,pDeviceGuid,pVideoDesc,pConfig,pDecoderRenderTargets,pNumSurfaces)
 #define IDirectXVideoDecoder_GetBuffer(This,BufferType,ppBuffer,pBufferSize) (This)->lpVtbl->GetBuffer(This,BufferType,ppBuffer,pBufferSize)
 #define IDirectXVideoDecoder_ReleaseBuffer(This,BufferType) (This)->lpVtbl->ReleaseBuffer(This,BufferType)
 #define IDirectXVideoDecoder_BeginFrame(This,pRenderTarget,pvPVPData) (This)->lpVtbl->BeginFrame(This,pRenderTarget,pvPVPData)
 #define IDirectXVideoDecoder_EndFrame(This,pHandleComplete) (This)->lpVtbl->EndFrame(This,pHandleComplete)
 #define IDirectXVideoDecoder_Execute(This,pExecuteParams) (This)->lpVtbl->Execute(This,pExecuteParams)
-#endif /*COBJMACROS*/
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDirectXVideoDecoder_QueryInterface(IDirectXVideoDecoder* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDirectXVideoDecoder_AddRef(IDirectXVideoDecoder* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDirectXVideoDecoder_Release(IDirectXVideoDecoder* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDirectXVideoDecoder methods ***/
+static FORCEINLINE HRESULT IDirectXVideoDecoder_GetVideoDecoderService(IDirectXVideoDecoder* This,IDirectXVideoDecoderService **ppService) {
+    return This->lpVtbl->GetVideoDecoderService(This,ppService);
+}
+static FORCEINLINE HRESULT IDirectXVideoDecoder_GetCreationParameters(IDirectXVideoDecoder* This,GUID *pDeviceGuid,DXVA2_VideoDesc *pVideoDesc,DXVA2_ConfigPictureDecode *pConfig,IDirect3DSurface9 ***pDecoderRenderTargets,UINT *pNumSurfaces) {
+    return This->lpVtbl->GetCreationParameters(This,pDeviceGuid,pVideoDesc,pConfig,pDecoderRenderTargets,pNumSurfaces);
+}
+static FORCEINLINE HRESULT IDirectXVideoDecoder_GetBuffer(IDirectXVideoDecoder* This,UINT BufferType,void **ppBuffer,UINT *pBufferSize) {
+    return This->lpVtbl->GetBuffer(This,BufferType,ppBuffer,pBufferSize);
+}
+static FORCEINLINE HRESULT IDirectXVideoDecoder_ReleaseBuffer(IDirectXVideoDecoder* This,UINT BufferType) {
+    return This->lpVtbl->ReleaseBuffer(This,BufferType);
+}
+static FORCEINLINE HRESULT IDirectXVideoDecoder_BeginFrame(IDirectXVideoDecoder* This,IDirect3DSurface9 *pRenderTarget,void *pvPVPData) {
+    return This->lpVtbl->BeginFrame(This,pRenderTarget,pvPVPData);
+}
+static FORCEINLINE HRESULT IDirectXVideoDecoder_EndFrame(IDirectXVideoDecoder* This,HANDLE *pHandleComplete) {
+    return This->lpVtbl->EndFrame(This,pHandleComplete);
+}
+static FORCEINLINE HRESULT IDirectXVideoDecoder_Execute(IDirectXVideoDecoder* This,const DXVA2_DecodeExecuteParams *pExecuteParams) {
+    return This->lpVtbl->Execute(This,pExecuteParams);
+}
+#endif
+#endif
 
-#undef  INTERFACE
-#define INTERFACE IDirectXVideoAccelerationService
-DECLARE_INTERFACE_(IDirectXVideoAccelerationService,IUnknown)
+#endif
+
+HRESULT STDMETHODCALLTYPE IDirectXVideoDecoder_GetVideoDecoderService_Proxy(
+    IDirectXVideoDecoder* This,
+    IDirectXVideoDecoderService **ppService);
+void __RPC_STUB IDirectXVideoDecoder_GetVideoDecoderService_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDirectXVideoDecoder_GetCreationParameters_Proxy(
+    IDirectXVideoDecoder* This,
+    GUID *pDeviceGuid,
+    DXVA2_VideoDesc *pVideoDesc,
+    DXVA2_ConfigPictureDecode *pConfig,
+    IDirect3DSurface9 ***pDecoderRenderTargets,
+    UINT *pNumSurfaces);
+void __RPC_STUB IDirectXVideoDecoder_GetCreationParameters_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDirectXVideoDecoder_GetBuffer_Proxy(
+    IDirectXVideoDecoder* This,
+    UINT BufferType,
+    void **ppBuffer,
+    UINT *pBufferSize);
+void __RPC_STUB IDirectXVideoDecoder_GetBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDirectXVideoDecoder_ReleaseBuffer_Proxy(
+    IDirectXVideoDecoder* This,
+    UINT BufferType);
+void __RPC_STUB IDirectXVideoDecoder_ReleaseBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDirectXVideoDecoder_BeginFrame_Proxy(
+    IDirectXVideoDecoder* This,
+    IDirect3DSurface9 *pRenderTarget,
+    void *pvPVPData);
+void __RPC_STUB IDirectXVideoDecoder_BeginFrame_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDirectXVideoDecoder_EndFrame_Proxy(
+    IDirectXVideoDecoder* This,
+    HANDLE *pHandleComplete);
+void __RPC_STUB IDirectXVideoDecoder_EndFrame_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDirectXVideoDecoder_Execute_Proxy(
+    IDirectXVideoDecoder* This,
+    const DXVA2_DecodeExecuteParams *pExecuteParams);
+void __RPC_STUB IDirectXVideoDecoder_Execute_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IDirectXVideoDecoder_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDirectXVideoAccelerationService interface
+ */
+#ifndef __IDirectXVideoAccelerationService_INTERFACE_DEFINED__
+#define __IDirectXVideoAccelerationService_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDirectXVideoAccelerationService, 0xfc51a550, 0xd5e7, 0x11d9, 0xaf,0x55, 0x00,0x05,0x4e,0x43,0xff,0x02);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("fc51a550-d5e7-11d9-af55-00054e43ff02")
+IDirectXVideoAccelerationService : public IUnknown
 {
+    virtual HRESULT STDMETHODCALLTYPE CreateSurface(
+        UINT Width,
+        UINT Height,
+        UINT BackBuffers,
+        D3DFORMAT Format,
+        D3DPOOL Pool,
+        DWORD Usage,
+        DWORD DxvaType,
+        IDirect3DSurface9 **ppSurface,
+        HANDLE *pSharedHandle) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDirectXVideoAccelerationService, 0xfc51a550, 0xd5e7, 0x11d9, 0xaf,0x55, 0x00,0x05,0x4e,0x43,0xff,0x02)
+#endif
+#else
+typedef struct IDirectXVideoAccelerationServiceVtbl {
     BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDirectXVideoAccelerationService* This,
+        REFIID riid,
+        void **ppvObject);
 
-    /* IDirectXVideoAccelerationService methods */
-    STDMETHOD_(HRESULT,CreateSurface)(THIS_ UINT Width,UINT Height,UINT BackBuffers,D3DFORMAT Format,D3DPOOL Pool,DWORD Usage,DWORD DxvaType,IDirect3DSurface9 **ppSurface,HANDLE *pSharedHandle) PURE;
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDirectXVideoAccelerationService* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDirectXVideoAccelerationService* This);
+
+    /*** IDirectXVideoAccelerationService methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateSurface)(
+        IDirectXVideoAccelerationService* This,
+        UINT Width,
+        UINT Height,
+        UINT BackBuffers,
+        D3DFORMAT Format,
+        D3DPOOL Pool,
+        DWORD Usage,
+        DWORD DxvaType,
+        IDirect3DSurface9 **ppSurface,
+        HANDLE *pSharedHandle);
 
     END_INTERFACE
+} IDirectXVideoAccelerationServiceVtbl;
+interface IDirectXVideoAccelerationService {
+    CONST_VTBL IDirectXVideoAccelerationServiceVtbl* lpVtbl;
 };
+
 #ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
 #define IDirectXVideoAccelerationService_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define IDirectXVideoAccelerationService_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define IDirectXVideoAccelerationService_Release(This) (This)->lpVtbl->Release(This)
+/*** IDirectXVideoAccelerationService methods ***/
 #define IDirectXVideoAccelerationService_CreateSurface(This,Width,Height,BackBuffers,Format,Pool,Usage,DxvaType,ppSurface,pSharedHandle) (This)->lpVtbl->CreateSurface(This,Width,Height,BackBuffers,Format,Pool,Usage,DxvaType,ppSurface,pSharedHandle)
-#endif /*COBJMACROS*/
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDirectXVideoAccelerationService_QueryInterface(IDirectXVideoAccelerationService* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDirectXVideoAccelerationService_AddRef(IDirectXVideoAccelerationService* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDirectXVideoAccelerationService_Release(IDirectXVideoAccelerationService* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDirectXVideoAccelerationService methods ***/
+static FORCEINLINE HRESULT IDirectXVideoAccelerationService_CreateSurface(IDirectXVideoAccelerationService* This,UINT Width,UINT Height,UINT BackBuffers,D3DFORMAT Format,D3DPOOL Pool,DWORD Usage,DWORD DxvaType,IDirect3DSurface9 **ppSurface,HANDLE *pSharedHandle) {
+    return This->lpVtbl->CreateSurface(This,Width,Height,BackBuffers,Format,Pool,Usage,DxvaType,ppSurface,pSharedHandle);
+}
+#endif
+#endif
 
-#undef  INTERFACE
-#define INTERFACE IDirectXVideoDecoderService
-DECLARE_INTERFACE_(IDirectXVideoDecoderService,IDirectXVideoAccelerationService)
+#endif
+
+HRESULT STDMETHODCALLTYPE IDirectXVideoAccelerationService_CreateSurface_Proxy(
+    IDirectXVideoAccelerationService* This,
+    UINT Width,
+    UINT Height,
+    UINT BackBuffers,
+    D3DFORMAT Format,
+    D3DPOOL Pool,
+    DWORD Usage,
+    DWORD DxvaType,
+    IDirect3DSurface9 **ppSurface,
+    HANDLE *pSharedHandle);
+void __RPC_STUB IDirectXVideoAccelerationService_CreateSurface_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IDirectXVideoAccelerationService_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDirectXVideoDecoderService interface
+ */
+#ifndef __IDirectXVideoDecoderService_INTERFACE_DEFINED__
+#define __IDirectXVideoDecoderService_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDirectXVideoDecoderService, 0xfc51a551, 0xd5e7, 0x11d9, 0xaf,0x55, 0x00,0x05,0x4e,0x43,0xff,0x02);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("fc51a551-d5e7-11d9-af55-00054e43ff02")
+IDirectXVideoDecoderService : public IDirectXVideoAccelerationService
 {
+    virtual HRESULT STDMETHODCALLTYPE GetDecoderDeviceGuids(
+        UINT *pCount,
+        GUID **pGuids) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDecoderRenderTargets(
+        REFGUID Guid,
+        UINT *pCount,
+        D3DFORMAT **pFormats) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDecoderConfigurations(
+        REFGUID Guid,
+        const DXVA2_VideoDesc *pVideoDesc,
+        void *pReserved,
+        UINT *pCount,
+        DXVA2_ConfigPictureDecode **ppConfigs) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateVideoDecoder(
+        REFGUID Guid,
+        const DXVA2_VideoDesc *pVideoDesc,
+        const DXVA2_ConfigPictureDecode *pConfig,
+        IDirect3DSurface9 **ppDecoderRenderTargets,
+        UINT NumRenderTargets,
+        IDirectXVideoDecoder **ppDecode) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDirectXVideoDecoderService, 0xfc51a551, 0xd5e7, 0x11d9, 0xaf,0x55, 0x00,0x05,0x4e,0x43,0xff,0x02)
+#endif
+#else
+typedef struct IDirectXVideoDecoderServiceVtbl {
     BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDirectXVideoDecoderService* This,
+        REFIID riid,
+        void **ppvObject);
 
-    /* IDirectXVideoAccelerationService methods */
-    STDMETHOD_(HRESULT,CreateSurface)(THIS_ UINT Width,UINT Height,UINT BackBuffers,D3DFORMAT Format,D3DPOOL Pool,DWORD Usage,DWORD DxvaType,IDirect3DSurface9 **ppSurface,HANDLE *pSharedHandle) PURE;
-    
-    /* IDirectXVideoDecoderService methods */
-    STDMETHOD_(HRESULT,GetDecoderDeviceGuids)(THIS_ UINT *Count,GUID **pGuids) PURE;
-    STDMETHOD_(HRESULT,GetDecoderRenderTargets)(THIS_ REFGUID Guid,UINT *pCount,D3DFORMAT **pFormats) PURE;
-    STDMETHOD_(HRESULT,GetDecoderConfigurations)(THIS_ REFGUID Guid,const DXVA2_VideoDesc *pVideoDesc,IUnknown *pReserved,UINT *pCount,DXVA2_ConfigPictureDecode **ppConfigs) PURE;
-    STDMETHOD_(HRESULT,CreateVideoDecoder)(THIS_ REFGUID Guid,const DXVA2_VideoDesc *pVideoDesc,DXVA2_ConfigPictureDecode *pConfig,IDirect3DSurface9 **ppDecoderRenderTargets,UINT NumSurfaces,IDirectXVideoDecoder **ppDecode) PURE;
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDirectXVideoDecoderService* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDirectXVideoDecoderService* This);
+
+    /*** IDirectXVideoAccelerationService methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateSurface)(
+        IDirectXVideoDecoderService* This,
+        UINT Width,
+        UINT Height,
+        UINT BackBuffers,
+        D3DFORMAT Format,
+        D3DPOOL Pool,
+        DWORD Usage,
+        DWORD DxvaType,
+        IDirect3DSurface9 **ppSurface,
+        HANDLE *pSharedHandle);
+
+    /*** IDirectXVideoDecoderService methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDecoderDeviceGuids)(
+        IDirectXVideoDecoderService* This,
+        UINT *pCount,
+        GUID **pGuids);
+
+    HRESULT (STDMETHODCALLTYPE *GetDecoderRenderTargets)(
+        IDirectXVideoDecoderService* This,
+        REFGUID Guid,
+        UINT *pCount,
+        D3DFORMAT **pFormats);
+
+    HRESULT (STDMETHODCALLTYPE *GetDecoderConfigurations)(
+        IDirectXVideoDecoderService* This,
+        REFGUID Guid,
+        const DXVA2_VideoDesc *pVideoDesc,
+        void *pReserved,
+        UINT *pCount,
+        DXVA2_ConfigPictureDecode **ppConfigs);
+
+    HRESULT (STDMETHODCALLTYPE *CreateVideoDecoder)(
+        IDirectXVideoDecoderService* This,
+        REFGUID Guid,
+        const DXVA2_VideoDesc *pVideoDesc,
+        const DXVA2_ConfigPictureDecode *pConfig,
+        IDirect3DSurface9 **ppDecoderRenderTargets,
+        UINT NumRenderTargets,
+        IDirectXVideoDecoder **ppDecode);
 
     END_INTERFACE
+} IDirectXVideoDecoderServiceVtbl;
+interface IDirectXVideoDecoderService {
+    CONST_VTBL IDirectXVideoDecoderServiceVtbl* lpVtbl;
 };
-#endif
+
 #ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
 #define IDirectXVideoDecoderService_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define IDirectXVideoDecoderService_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define IDirectXVideoDecoderService_Release(This) (This)->lpVtbl->Release(This)
+/*** IDirectXVideoAccelerationService methods ***/
 #define IDirectXVideoDecoderService_CreateSurface(This,Width,Height,BackBuffers,Format,Pool,Usage,DxvaType,ppSurface,pSharedHandle) (This)->lpVtbl->CreateSurface(This,Width,Height,BackBuffers,Format,Pool,Usage,DxvaType,ppSurface,pSharedHandle)
-#define IDirectXVideoDecoderService_GetDecoderDeviceGuids(This,Count,pGuids) (This)->lpVtbl->GetDecoderDeviceGuids(This,Count,pGuids)
+/*** IDirectXVideoDecoderService methods ***/
+#define IDirectXVideoDecoderService_GetDecoderDeviceGuids(This,pCount,pGuids) (This)->lpVtbl->GetDecoderDeviceGuids(This,pCount,pGuids)
 #define IDirectXVideoDecoderService_GetDecoderRenderTargets(This,Guid,pCount,pFormats) (This)->lpVtbl->GetDecoderRenderTargets(This,Guid,pCount,pFormats)
 #define IDirectXVideoDecoderService_GetDecoderConfigurations(This,Guid,pVideoDesc,pReserved,pCount,ppConfigs) (This)->lpVtbl->GetDecoderConfigurations(This,Guid,pVideoDesc,pReserved,pCount,ppConfigs)
-#define IDirectXVideoDecoderService_CreateVideoDecoder(This,Guid,pVideoDesc,pConfig,ppDecoderRenderTargets,NumSurfaces,ppDecode) (This)->lpVtbl->CreateVideoDecoder(This,Guid,pVideoDesc,pConfig,ppDecoderRenderTargets,NumSurfaces,ppDecode)
-#endif /*COBJMACROS*/
+#define IDirectXVideoDecoderService_CreateVideoDecoder(This,Guid,pVideoDesc,pConfig,ppDecoderRenderTargets,NumRenderTargets,ppDecode) (This)->lpVtbl->CreateVideoDecoder(This,Guid,pVideoDesc,pConfig,ppDecoderRenderTargets,NumRenderTargets,ppDecode)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDirectXVideoDecoderService_QueryInterface(IDirectXVideoDecoderService* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDirectXVideoDecoderService_AddRef(IDirectXVideoDecoderService* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDirectXVideoDecoderService_Release(IDirectXVideoDecoderService* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDirectXVideoAccelerationService methods ***/
+static FORCEINLINE HRESULT IDirectXVideoDecoderService_CreateSurface(IDirectXVideoDecoderService* This,UINT Width,UINT Height,UINT BackBuffers,D3DFORMAT Format,D3DPOOL Pool,DWORD Usage,DWORD DxvaType,IDirect3DSurface9 **ppSurface,HANDLE *pSharedHandle) {
+    return This->lpVtbl->CreateSurface(This,Width,Height,BackBuffers,Format,Pool,Usage,DxvaType,ppSurface,pSharedHandle);
+}
+/*** IDirectXVideoDecoderService methods ***/
+static FORCEINLINE HRESULT IDirectXVideoDecoderService_GetDecoderDeviceGuids(IDirectXVideoDecoderService* This,UINT *pCount,GUID **pGuids) {
+    return This->lpVtbl->GetDecoderDeviceGuids(This,pCount,pGuids);
+}
+static FORCEINLINE HRESULT IDirectXVideoDecoderService_GetDecoderRenderTargets(IDirectXVideoDecoderService* This,REFGUID Guid,UINT *pCount,D3DFORMAT **pFormats) {
+    return This->lpVtbl->GetDecoderRenderTargets(This,Guid,pCount,pFormats);
+}
+static FORCEINLINE HRESULT IDirectXVideoDecoderService_GetDecoderConfigurations(IDirectXVideoDecoderService* This,REFGUID Guid,const DXVA2_VideoDesc *pVideoDesc,void *pReserved,UINT *pCount,DXVA2_ConfigPictureDecode **ppConfigs) {
+    return This->lpVtbl->GetDecoderConfigurations(This,Guid,pVideoDesc,pReserved,pCount,ppConfigs);
+}
+static FORCEINLINE HRESULT IDirectXVideoDecoderService_CreateVideoDecoder(IDirectXVideoDecoderService* This,REFGUID Guid,const DXVA2_VideoDesc *pVideoDesc,const DXVA2_ConfigPictureDecode *pConfig,IDirect3DSurface9 **ppDecoderRenderTargets,UINT NumRenderTargets,IDirectXVideoDecoder **ppDecode) {
+    return This->lpVtbl->CreateVideoDecoder(This,Guid,pVideoDesc,pConfig,ppDecoderRenderTargets,NumRenderTargets,ppDecode);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IDirectXVideoDecoderService_GetDecoderDeviceGuids_Proxy(
+    IDirectXVideoDecoderService* This,
+    UINT *pCount,
+    GUID **pGuids);
+void __RPC_STUB IDirectXVideoDecoderService_GetDecoderDeviceGuids_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDirectXVideoDecoderService_GetDecoderRenderTargets_Proxy(
+    IDirectXVideoDecoderService* This,
+    REFGUID Guid,
+    UINT *pCount,
+    D3DFORMAT **pFormats);
+void __RPC_STUB IDirectXVideoDecoderService_GetDecoderRenderTargets_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDirectXVideoDecoderService_GetDecoderConfigurations_Proxy(
+    IDirectXVideoDecoderService* This,
+    REFGUID Guid,
+    const DXVA2_VideoDesc *pVideoDesc,
+    void *pReserved,
+    UINT *pCount,
+    DXVA2_ConfigPictureDecode **ppConfigs);
+void __RPC_STUB IDirectXVideoDecoderService_GetDecoderConfigurations_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDirectXVideoDecoderService_CreateVideoDecoder_Proxy(
+    IDirectXVideoDecoderService* This,
+    REFGUID Guid,
+    const DXVA2_VideoDesc *pVideoDesc,
+    const DXVA2_ConfigPictureDecode *pConfig,
+    IDirect3DSurface9 **ppDecoderRenderTargets,
+    UINT NumRenderTargets,
+    IDirectXVideoDecoder **ppDecode);
+void __RPC_STUB IDirectXVideoDecoderService_CreateVideoDecoder_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IDirectXVideoDecoderService_INTERFACE_DEFINED__ */
+
+#endif /* _D3D9_H_ */
 /* Begin additional prototypes for all interfaces */
 
 
diff --git a/x86_64-w64-mingw32/include/esent.h b/x86_64-w64-mingw32/include/esent.h
index 8d99709..b327228 100644
--- a/x86_64-w64-mingw32/include/esent.h
+++ b/x86_64-w64-mingw32/include/esent.h
@@ -6,12 +6,22 @@
 #ifndef _INC_ESENT
 #define _INC_ESENT
 
+#include <_mingw_unicode.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
 
+#ifndef JET_VERSION
+# ifdef WINVER
+#  define JET_VERSION WINVER
+# else
+#  define JET_VERSION 0x0a00
+# endif
+#endif
+
 #ifndef JET_API
-#define JET_API WINAPI
+#define JET_API __stdcall
 #endif
 
 #if defined(_WIN64)
@@ -57,7 +67,7 @@
   JET_coltypLongBinary,
   JET_coltypLongText,
   JET_coltypSLV,
-#if (_WIN32_WINNT >= 0x0600)
+#if (JET_VERSION >= 0x0600)
   JET_coltypUnsignedLong,
   JET_coltypLongLong,
   JET_coltypGUID,
@@ -465,6 +475,71 @@
 
 #define JET_BASE_NAME_LENGTH 3
 #define JET_MAX_COMPUTERNAME_LENGTH 15
+
+#define JET_bitDbReadOnly  0x00000001
+#define JET_bitDbExclusive  0x00000002
+#define JET_bitDbDeleteCorruptIndexes  0x00000010
+#if (JET_VERSION >= 0x0502)
+#define JET_bitDbDeleteUnicodeIndexes  0x00000400
+#endif
+#if (JET_VERSION >= 0x0501)
+#define JET_bitDbUpgrade  0x00000200
+#endif
+#if (JET_VERSION >= 0x0601)
+#define JET_bitDbEnableBackgroundMaintenance  0x00000800
+#endif
+#if (JET_VERSION >= 0x0602)
+#define JET_bitDbPurgeCacheOnAttach  0x00001000
+#endif
+
+#define JET_bitTableDenyWrite  0x00000001
+#define JET_bitTableDenyRead  0x00000002
+#define JET_bitTableReadOnly  0x00000004
+#define JET_bitTableUpdatable  0x00000008
+#define JET_bitTablePermitDDL  0x00000010
+#define JET_bitTableNoCache  0x00000020
+#define JET_bitTablePreread  0x00000040
+#define JET_bitTableOpportuneRead  0x00000080
+#define JET_bitTableSequential  0x00008000
+#define JET_bitTableClassMask  0x000f0000
+#define JET_bitTableClassNone  0x00000000
+#define JET_bitTableClass1  0x00010000
+#define JET_bitTableClass2  0x00020000
+#define JET_bitTableClass3  0x00030000
+#define JET_bitTableClass4  0x00040000
+#define JET_bitTableClass5  0x00050000
+#define JET_bitTableClass6  0x00060000
+#define JET_bitTableClass7  0x00070000
+#define JET_bitTableClass8  0x00080000
+#define JET_bitTableClass9  0x00090000
+#define JET_bitTableClass10  0x000a0000
+#define JET_bitTableClass11  0x000b0000
+#define JET_bitTableClass12  0x000c0000
+#define JET_bitTableClass13  0x000d0000
+#define JET_bitTableClass14  0x000e0000
+#define JET_bitTableClass15  0x000f0000
+
+#define JET_ColInfo  0u
+#define JET_ColInfoList  1u
+#define JET_ColInfoSysTabCursor  3u
+#define JET_ColInfoBase  4u
+#define JET_ColInfoListCompact  5u
+#if (JET_VERSION >= 0x0501)
+#define JET_ColInfoByColid  6u
+#define JET_ColInfoListSortColumnid  7u
+#endif
+#if (JET_VERSION >= 0x0600)
+#define JET_ColInfoBaseByColid  8u
+#define JET_ColInfoGrbitNonDerivedColumnsOnly  0x80000000
+#define JET_ColInfoGrbitMinimalInfo  0x40000000
+#define JET_ColInfoGrbitSortByColumnid  0x20000000
+#endif
+
+#define JET_MoveFirst  (0x80000000)
+#define JET_MovePrevious  (-1)
+#define JET_MoveNext  (+1)
+#define JET_MoveLast  (0x7fffffff)
+
 #define JET_cbBookmarkMost 256
 #if UNICODE
 #define JET_cbNameMost 128
@@ -477,25 +552,220 @@
 #define JET_cbColumnMost 255
 #define JET_cbLVDefaultValueMost 255
 #define JET_cbKeyMost 255
-#if (_WIN32_WINNT >= 0x0600)
+#if (JET_VERSION >= 0x0600)
 #define JET_cbKeyMost2KBytePage 500
 #define JET_cbKeyMost4KBytePage 1000
 #define JET_cbKeyMost8KBytePage 2000
 #define JET_cbKeyMostMin 255
 #define JET_ccolKeyMost 12
-#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*(JET_VERSION >= 0x0600)*/
 #define JET_cbLimitKeyMost 256
 #define JET_cbPrimaryKeyMost 255
 #define JET_cbSecondaryKeyMost 255
-#if (_WIN32_WINNT == 0x500)
+#if (JET_VERSION == 0x500)
 #define JET_ccolMost 0x00007ffe
 #else
 #define JET_ccolMost 0x0000fee0
-#endif /*(_WIN32_WINNT == 0x500)*/
+#endif /*(JET_VERSION == 0x500)*/
 #define JET_ccolFixedMost 0x0000007f
 #define JET_ccolVarMost 0x00000080
 #define JET_ccolTaggedMost ( JET_ccolMost - 0x000000ff ) /*64993*/
 
+#define JET_DbInfoFilename  0
+#define JET_DbInfoConnect  1
+#define JET_DbInfoCountry  2
+#define JET_DbInfoLCID  3
+#define JET_DbInfoLangid  3
+#define JET_DbInfoCp  4
+#define JET_DbInfoCollate  5
+#define JET_DbInfoOptions  6
+#define JET_DbInfoTransactions  7
+#define JET_DbInfoVersion  8
+#define JET_DbInfoIsam  9
+#define JET_DbInfoFilesize  10
+#define JET_DbInfoSpaceOwned  11
+#define JET_DbInfoSpaceAvailable  12
+#define JET_DbInfoUpgrade  13
+#define JET_DbInfoMisc  14
+#define JET_DbInfoDBInUse  15
+#define JET_DbInfoPageSize  17
+#define JET_DbInfoFileType  19
+#define JET_DbInfoFilesizeOnDisk  21
+
+#define JET_paramSystemPath  0
+#define JET_paramTempPath  1
+#define JET_paramLogFilePath  2
+#define JET_paramBaseName  3
+#define JET_paramEventSource  4
+#define JET_paramMaxSessions  5
+#define JET_paramMaxOpenTables  6
+#define JET_paramPreferredMaxOpenTables  7
+#if (JET_VERSION >= 0x0600)
+#define JET_paramCachedClosedTables  125
+#endif
+#define JET_paramMaxCursors  8
+#define JET_paramMaxVerPages  9
+#define JET_paramPreferredVerPages  63
+#if (JET_VERSION >= 0x0501)
+#define JET_paramGlobalMinVerPages  81
+#define JET_paramVersionStoreTaskQueueMax  105
+#endif
+#define JET_paramMaxTemporaryTables  10
+#define JET_paramLogFileSize  11
+#define JET_paramLogBuffers  12
+#define JET_paramWaitLogFlush  13
+#define JET_paramLogCheckpointPeriod  14
+#define JET_paramLogWaitingUserMax  15
+#define JET_paramCommitDefault  16
+#define JET_paramCircularLog  17
+#define JET_paramDbExtensionSize  18
+#define JET_paramPageTempDBMin  19
+#define JET_paramPageFragment  20
+#if (JET_VERSION >= 0x0600)
+#define JET_paramEnableFileCache  126
+#define JET_paramVerPageSize  128
+#define JET_paramConfiguration  129
+#define JET_paramEnableAdvanced  130
+#define JET_paramMaxColtyp  131
+#endif
+#define JET_paramBatchIOBufferMax  22
+#define JET_paramCacheSize  41
+#define JET_paramCacheSizeMin  60
+#define JET_paramCacheSizeMax  23
+#define JET_paramCheckpointDepthMax  24
+#define JET_paramLRUKCorrInterval  25
+#define JET_paramLRUKHistoryMax  26
+#define JET_paramLRUKPolicy  27
+#define JET_paramLRUKTimeout  28
+#define JET_paramLRUKTrxCorrInterval  29
+#define JET_paramOutstandingIOMax  30
+#define JET_paramStartFlushThreshold  31
+#define JET_paramStopFlushThreshold  32
+#if (JET_VERSION >= 0x0600)
+#define JET_paramEnableViewCache  127
+#define JET_paramCheckpointIOMax  135
+#define JET_paramTableClass1Name  137
+#define JET_paramTableClass2Name  138
+#define JET_paramTableClass3Name  139
+#define JET_paramTableClass4Name  140
+#define JET_paramTableClass5Name  141
+#define JET_paramTableClass6Name  142
+#define JET_paramTableClass7Name  143
+#define JET_paramTableClass8Name  144
+#define JET_paramTableClass9Name  145
+#define JET_paramTableClass10Name  146
+#define JET_paramTableClass11Name  147
+#define JET_paramTableClass12Name  148
+#define JET_paramTableClass13Name  149
+#define JET_paramTableClass14Name  150
+#define JET_paramTableClass15Name  151
+#endif
+#define JET_paramIOPriority  152
+#define JET_paramRecovery  34
+#define JET_paramEnableOnlineDefrag  35
+#define JET_paramCheckFormatWhenOpenFail 44
+#define JET_paramEnableTempTableVersioning  46
+#define JET_paramIgnoreLogVersion  47
+#define JET_paramDeleteOldLogs  48
+#define JET_paramEventSourceKey  49
+#define JET_paramNoInformationEvent  50
+#if (JET_VERSION >= 0x0501)
+#define JET_paramEventLoggingLevel  51
+#define JET_paramDeleteOutOfRangeLogs 52
+#define JET_paramAccessDeniedRetryPeriod  53
+#endif
+#define JET_paramEnableIndexChecking  45
+#if (JET_VERSION >= 0x0502)
+#define JET_paramEnableIndexCleanup  54
+#endif
+#define JET_paramDatabasePageSize  64
+#if (JET_VERSION >= 0x0501)
+#define JET_paramDisableCallbacks  65
+#endif
+#if (JET_VERSION >= 0x0501)
+#define JET_paramLogFileCreateAsynch  69
+#endif
+#define JET_paramErrorToString  70
+#if (JET_VERSION >= 0x0501)
+#define JET_paramZeroDatabaseDuringBackup  71
+#endif
+#define JET_paramUnicodeIndexDefault  72
+#if (JET_VERSION >= 0x0501)
+#define JET_paramRuntimeCallback  73
+#endif
+#define JET_paramCleanupMismatchedLogFiles  77
+#if (JET_VERSION >= 0x0501)
+#define JET_paramRecordUpgradeDirtyLevel  78
+#define JET_paramOSSnapshotTimeout  82
+#endif
+#define JET_paramExceptionAction  98
+#define JET_paramEventLogCache  99
+#if (JET_VERSION >= 0x0501)
+#define JET_paramCreatePathIfNotExist  100
+#define JET_paramPageHintCacheSize  101
+#define JET_paramOneDatabasePerSession  102
+#define JET_paramMaxInstances  104
+#define JET_paramDisablePerfmon  107
+#define JET_paramIndexTuplesLengthMin  110
+#define JET_paramIndexTuplesLengthMax  111
+#define JET_paramIndexTuplesToIndexMax  112
+#endif
+#if (JET_VERSION >= 0x0502)
+#define JET_paramAlternateDatabaseRecoveryPath  113
+#endif
+#if (JET_VERSION >= 0x0600)
+#define JET_paramIndexTupleIncrement  132
+#define JET_paramIndexTupleStart  133
+#define JET_paramKeyMost  134
+#define JET_paramLegacyFileNames  136
+#define JET_paramEnablePersistedCallbacks  156
+#endif
+#if (JET_VERSION >= 0x0601)
+#define JET_paramWaypointLatency  153
+#define JET_paramDefragmentSequentialBTrees  160
+#define JET_paramDefragmentSequentialBTreesDensityCheckFrequency  161
+#define JET_paramIOThrottlingTimeQuanta  162
+#define JET_paramLVChunkSizeMost  163
+#define JET_paramMaxCoalesceReadSize  164
+#define JET_paramMaxCoalesceWriteSize  165
+#define JET_paramMaxCoalesceReadGapSize  166
+#define JET_paramMaxCoalesceWriteGapSize  167
+#define JET_paramEnableDBScanInRecovery  169
+#define JET_paramDbScanThrottle  170
+#define JET_paramDbScanIntervalMinSec  171
+#define JET_paramDbScanIntervalMaxSec  172
+#endif
+#if (JET_VERSION >= 0x0602)
+#define JET_paramCachePriority  177
+#define JET_paramMaxTransactionSize  178
+#define JET_paramPrereadIOMax  179
+#define JET_paramEnableDBScanSerialization  180
+#define JET_paramHungIOThreshold  181
+#define JET_paramHungIOActions  182
+#define JET_paramMinDataForXpress  183
+#endif
+#if (JET_VERSION >= 0x0603)
+#define JET_paramEnableShrinkDatabase  184
+#endif
+#if (JET_VERSION >= 0x0602)
+#define JET_paramProcessFriendlyName  186
+#define JET_paramDurableCommitCallback  187
+#endif
+#if (JET_VERSION >= 0x0603)
+#define JET_paramEnableSqm  188
+#endif
+#if (JET_VERSION >= 0x0a00)
+#define JET_paramConfigStoreSpec  189
+#endif
+#define JET_paramMaxValueInvalid  193
+#define JET_sesparamCommitDefault  4097
+#if (JET_VERSION >= 0x0a00)
+#define JET_sesparamTransactionLevel  4099
+#define JET_sesparamOperationContext  4100
+#define JET_sesparamCorrelationID  4101
+#define JET_sesparamMaxValueInvalid  4102
+#endif
+
 typedef unsigned __LONG32 JET_COLUMNID;
 typedef double JET_DATESERIAL;
 typedef unsigned __LONG32 JET_DBID;
@@ -915,7 +1185,7 @@
   JET_COLUMNID columnidcPage;
 } JET_OBJECTLIST;
 
-#if (_WIN32_WINNT >= 0x0600)
+#if (JET_VERSION >= 0x0600)
 typedef struct tagJET_OPENTEMPORARYTABLE {
   unsigned __LONG32 cbStruct;
   const JET_COLUMNDEF* prgcolumndef;
@@ -927,7 +1197,7 @@
   unsigned __LONG32 cbVarSegMac;
   JET_TABLEID tableid;
 } JET_OPENTEMPORARYTABLE;
-#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*(JET_VERSION >= 0x0600)*/
 
 typedef struct _JET_RECORDLIST{
   unsigned __LONG32 cbStruct;
@@ -943,7 +1213,7 @@
   unsigned __LONG32 centriesTotal;
 } JET_RECPOS;
 
-#if (_WIN32_WINNT >= 0x0600)
+#if (JET_VERSION >= 0x0600)
 typedef struct _JET_RECSIZE {
   unsigned __int64 cbData;
   unsigned __int64 cbLongValueData;
@@ -954,7 +1224,7 @@
   unsigned __int64 cLongValues;
   unsigned __int64 cMultiValues;
 } JET_RECSIZE;
-#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*(JET_VERSION >= 0x0600)*/
 
 typedef struct _JET_RETINFO {
   unsigned __LONG32 cbStruct;
@@ -1122,7 +1392,7 @@
 
 #define JET_TABLECREATE2 __MINGW_NAME_AW(JET_TABLECREATE2_)
 
-#if (_WIN32_WINNT >= 0x0600)
+#if (JET_VERSION >= 0x0600)
 typedef struct _JET_THREADSTATS {
   unsigned __LONG32 cbStruct;
   unsigned __LONG32 cPageReferenced;
@@ -1134,7 +1404,7 @@
   unsigned __LONG32 cbLogRecord;
 } JET_THREADSTATS;
 
-#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*(JET_VERSION >= 0x0600)*/
 
 typedef struct tag_JET_USERDEFINEDDEFAULT_A {
   char* szCallback;
@@ -1274,6 +1544,8 @@
   JET_PCWSTR szPassword
 );
 
+#define JetBeginSession __MINGW_NAME_AW(JetBeginSession)
+
 JET_ERR JET_API JetBeginTransaction(
   JET_SESID sesid
 );
@@ -1899,14 +2171,14 @@
 
 #define JetGetInstanceInfo __MINGW_NAME_AW(JetGetInstanceInfo)
 
-#if (_WIN32_WINNT >= 0x0600)
+#if (JET_VERSION >= 0x0600)
 JET_ERR JET_API JetGetInstanceMiscInfo(
   JET_INSTANCE instance,
   void* pvResult,
   unsigned __LONG32 cbMax,
   unsigned __LONG32 InfoLevel
 );
-#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*(JET_VERSION >= 0x0600)*/
 
 JET_ERR JET_API JetGetLock(
   JET_SESID sesid,
@@ -2000,14 +2272,14 @@
   unsigned __LONG32 cbRecpos
 );
 
-#if (_WIN32_WINNT >= 0x0600)
+#if (JET_VERSION >= 0x0600)
 JET_ERR JET_API JetGetRecordSize(
   JET_SESID sesid,
   JET_TABLEID tableid,
   JET_RECSIZE* precsize,
   const JET_GRBIT grbit
 );
-#endif /* (_WIN32_WINNT >= 0x0600) */
+#endif /* (JET_VERSION >= 0x0600) */
 
 JET_ERR JET_API JetGetSecondaryIndexBookmark(
   JET_SESID sesid,
@@ -2174,7 +2446,7 @@
   JET_GRBIT grbit
 );
 
-#if (_WIN32_WINNT >= 0x0600)
+#if (JET_VERSION >= 0x0600)
 JET_ERR JET_API JetInit3A(
   JET_INSTANCE* pinstance,
   JET_RSTINFO_A* prstInfo,
@@ -2188,7 +2460,7 @@
 );
 
 #define JetInit3 __MINGW_NAME_AW(JetInit3)
-#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*(JET_VERSION >= 0x0600)*/
 
 JET_ERR JET_API JetIntersectIndexes(
   JET_SESID sesid,
@@ -2326,12 +2598,12 @@
   const JET_GRBIT grbit
 );
 
-#if (_WIN32_WINNT >= 0x0600)
+#if (JET_VERSION >= 0x0600)
 JET_ERR JET_API JetOSSnapshotEnd(
   const JET_OSSNAPID snapId,
   const JET_GRBIT grbit
 );
-#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*(JET_VERSION >= 0x0600)*/
 
 JET_ERR JET_API JetOSSnapshotFreezeA(
   const JET_OSSNAPID snapId,
@@ -2349,7 +2621,7 @@
 
 #define JetOSSnapshotFreeze __MINGW_NAME_AW(JetOSSnapshotFreeze)
 
-#if (_WIN32_WINNT >= 0x0600)
+#if (JET_VERSION >= 0x0600)
 JET_ERR JET_API JetOSSnapshotGetFreezeInfoA(
   const JET_OSSNAPID snapId,
   unsigned __LONG32* pcInstanceInfo,
@@ -2364,27 +2636,27 @@
   const JET_GRBIT grbit
 );
 #define JetOSSnapshotGetFreezeInfo __MINGW_NAME_AW(JetOSSnapshotGetFreezeInfo)
-#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*(JET_VERSION >= 0x0600)*/
 
 JET_ERR JET_API JetOSSnapshotPrepare(
   JET_OSSNAPID* psnapId,
   const JET_GRBIT grbit
 );
 
-#if (_WIN32_WINNT >= 0x0600)
+#if (JET_VERSION >= 0x0600)
 JET_ERR JET_API JetOSSnapshotPrepareInstance(
   JET_OSSNAPID snapId,
   JET_INSTANCE instance,
   const JET_GRBIT grbit
 );
-#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*(JET_VERSION >= 0x0600)*/
 
 JET_ERR JET_API JetOSSnapshotThaw(
   const JET_OSSNAPID snapId,
   const JET_GRBIT grbit
 );
 
-#if (_WIN32_WINNT >= 0x0600)
+#if (JET_VERSION >= 0x0600)
 JET_ERR JET_API JetOSSnapshotTruncateLog(
   const JET_OSSNAPID snapId,
   const JET_GRBIT grbit
@@ -2395,7 +2667,7 @@
   JET_INSTANCE instance,
   const JET_GRBIT grbit
 );
-#endif /*(_WIN32_WINNT >= 0x0600)*/
+#endif /*(JET_VERSION >= 0x0600)*/
 
 JET_ERR JET_API JetPrepareUpdate(
   JET_SESID sesid,
diff --git a/x86_64-w64-mingw32/include/evntprov.h b/x86_64-w64-mingw32/include/evntprov.h
index 59e1ac4..ae4bafa 100644
--- a/x86_64-w64-mingw32/include/evntprov.h
+++ b/x86_64-w64-mingw32/include/evntprov.h
@@ -1,6 +1,6 @@
-/**
- * This file is part of the mingw-w64 runtime package.
- * No warranty is given; refer to the file DISCLAIMER within this package.
+/**
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
  */
 /*
  * evntprov.h
diff --git a/x86_64-w64-mingw32/include/exdisp.h b/x86_64-w64-mingw32/include/exdisp.h
index 985f096..3189953 100644
--- a/x86_64-w64-mingw32/include/exdisp.h
+++ b/x86_64-w64-mingw32/include/exdisp.h
@@ -1,72 +1,73 @@
-/**
- * This file has no copyright assigned and is placed in the Public Domain.
- * This file is part of the mingw-w64 runtime package.
- * No warranty is given; refer to the file DISCLAIMER.PD within this package.
- */
+/*** Autogenerated by WIDL 1.6 from include/exdisp.idl - Do not edit ***/
+
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 440
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
 #endif
 
-#include "rpc.h"
-#include "rpcndr.h"
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
 
 #ifndef __exdisp_h__
 #define __exdisp_h__
 
+/* Forward declarations */
+
 #ifndef __IWebBrowser_FWD_DEFINED__
 #define __IWebBrowser_FWD_DEFINED__
-typedef struct IWebBrowser IWebBrowser;
+typedef interface IWebBrowser IWebBrowser;
 #endif
 
 #ifndef __DWebBrowserEvents_FWD_DEFINED__
 #define __DWebBrowserEvents_FWD_DEFINED__
-typedef struct DWebBrowserEvents DWebBrowserEvents;
+typedef interface DWebBrowserEvents DWebBrowserEvents;
 #endif
 
 #ifndef __IWebBrowserApp_FWD_DEFINED__
 #define __IWebBrowserApp_FWD_DEFINED__
-typedef struct IWebBrowserApp IWebBrowserApp;
+typedef interface IWebBrowserApp IWebBrowserApp;
 #endif
 
 #ifndef __IWebBrowser2_FWD_DEFINED__
 #define __IWebBrowser2_FWD_DEFINED__
-typedef struct IWebBrowser2 IWebBrowser2;
+typedef interface IWebBrowser2 IWebBrowser2;
 #endif
 
 #ifndef __DWebBrowserEvents2_FWD_DEFINED__
 #define __DWebBrowserEvents2_FWD_DEFINED__
-typedef struct DWebBrowserEvents2 DWebBrowserEvents2;
+typedef interface DWebBrowserEvents2 DWebBrowserEvents2;
 #endif
 
 #ifndef __WebBrowser_V1_FWD_DEFINED__
 #define __WebBrowser_V1_FWD_DEFINED__
-
 #ifdef __cplusplus
 typedef class WebBrowser_V1 WebBrowser_V1;
 #else
 typedef struct WebBrowser_V1 WebBrowser_V1;
-#endif
-#endif
+#endif /* defined __cplusplus */
+#endif /* defined __WebBrowser_V1_FWD_DEFINED__ */
 
 #ifndef __WebBrowser_FWD_DEFINED__
 #define __WebBrowser_FWD_DEFINED__
-
 #ifdef __cplusplus
 typedef class WebBrowser WebBrowser;
 #else
 typedef struct WebBrowser WebBrowser;
-#endif
-#endif
+#endif /* defined __cplusplus */
+#endif /* defined __WebBrowser_FWD_DEFINED__ */
 
 #ifndef __InternetExplorer_FWD_DEFINED__
 #define __InternetExplorer_FWD_DEFINED__
-
 #ifdef __cplusplus
 typedef class InternetExplorer InternetExplorer;
 #else
 typedef struct InternetExplorer InternetExplorer;
-#endif
-#endif
+#endif /* defined __cplusplus */
+#endif /* defined __InternetExplorer_FWD_DEFINED__ */
 
 #ifndef __ShellBrowserWindow_FWD_DEFINED__
 #define __ShellBrowserWindow_FWD_DEFINED__
@@ -74,17 +75,17 @@
 typedef class ShellBrowserWindow ShellBrowserWindow;
 #else
 typedef struct ShellBrowserWindow ShellBrowserWindow;
-#endif
-#endif
+#endif /* defined __cplusplus */
+#endif /* defined __ShellBrowserWindow_FWD_DEFINED__ */
 
 #ifndef __DShellWindowsEvents_FWD_DEFINED__
 #define __DShellWindowsEvents_FWD_DEFINED__
-typedef struct DShellWindowsEvents DShellWindowsEvents;
+typedef interface DShellWindowsEvents DShellWindowsEvents;
 #endif
 
 #ifndef __IShellWindows_FWD_DEFINED__
 #define __IShellWindows_FWD_DEFINED__
-typedef struct IShellWindows IShellWindows;
+typedef interface IShellWindows IShellWindows;
 #endif
 
 #ifndef __ShellWindows_FWD_DEFINED__
@@ -93,12 +94,17 @@
 typedef class ShellWindows ShellWindows;
 #else
 typedef struct ShellWindows ShellWindows;
-#endif
-#endif
+#endif /* defined __cplusplus */
+#endif /* defined __ShellWindows_FWD_DEFINED__ */
 
 #ifndef __IShellUIHelper_FWD_DEFINED__
 #define __IShellUIHelper_FWD_DEFINED__
-typedef struct IShellUIHelper IShellUIHelper;
+typedef interface IShellUIHelper IShellUIHelper;
+#endif
+
+#ifndef __IShellUIHelper2_FWD_DEFINED__
+#define __IShellUIHelper2_FWD_DEFINED__
+typedef interface IShellUIHelper2 IShellUIHelper2;
 #endif
 
 #ifndef __ShellUIHelper_FWD_DEFINED__
@@ -107,37 +113,45 @@
 typedef class ShellUIHelper ShellUIHelper;
 #else
 typedef struct ShellUIHelper ShellUIHelper;
-#endif
-#endif
+#endif /* defined __cplusplus */
+#endif /* defined __ShellUIHelper_FWD_DEFINED__ */
 
 #ifndef __DShellNameSpaceEvents_FWD_DEFINED__
 #define __DShellNameSpaceEvents_FWD_DEFINED__
-typedef struct DShellNameSpaceEvents DShellNameSpaceEvents;
+typedef interface DShellNameSpaceEvents DShellNameSpaceEvents;
 #endif
 
 #ifndef __IShellFavoritesNameSpace_FWD_DEFINED__
 #define __IShellFavoritesNameSpace_FWD_DEFINED__
-typedef struct IShellFavoritesNameSpace IShellFavoritesNameSpace;
+typedef interface IShellFavoritesNameSpace IShellFavoritesNameSpace;
 #endif
 
 #ifndef __IShellNameSpace_FWD_DEFINED__
 #define __IShellNameSpace_FWD_DEFINED__
-typedef struct IShellNameSpace IShellNameSpace;
+typedef interface IShellNameSpace IShellNameSpace;
 #endif
 
+#ifndef __ShellShellNameSpace_FWD_DEFINED__
+#define __ShellShellNameSpace_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class ShellShellNameSpace ShellShellNameSpace;
+#else
+typedef struct ShellShellNameSpace ShellShellNameSpace;
+#endif /* defined __cplusplus */
+#endif /* defined __ShellShellNameSpace_FWD_DEFINED__ */
+
 #ifndef __ShellNameSpace_FWD_DEFINED__
 #define __ShellNameSpace_FWD_DEFINED__
-
 #ifdef __cplusplus
 typedef class ShellNameSpace ShellNameSpace;
 #else
 typedef struct ShellNameSpace ShellNameSpace;
-#endif
-#endif
+#endif /* defined __cplusplus */
+#endif /* defined __ShellNameSpace_FWD_DEFINED__ */
 
 #ifndef __IScriptErrorList_FWD_DEFINED__
 #define __IScriptErrorList_FWD_DEFINED__
-typedef struct IScriptErrorList IScriptErrorList;
+typedef interface IScriptErrorList IScriptErrorList;
 #endif
 
 #ifndef __CScriptErrorList_FWD_DEFINED__
@@ -146,173 +160,344 @@
 typedef class CScriptErrorList CScriptErrorList;
 #else
 typedef struct CScriptErrorList CScriptErrorList;
-#endif
-#endif
+#endif /* defined __cplusplus */
+#endif /* defined __CScriptErrorList_FWD_DEFINED__ */
 
 #ifndef __ISearch_FWD_DEFINED__
 #define __ISearch_FWD_DEFINED__
-typedef struct ISearch ISearch;
+typedef interface ISearch ISearch;
 #endif
 
 #ifndef __ISearches_FWD_DEFINED__
 #define __ISearches_FWD_DEFINED__
-typedef struct ISearches ISearches;
+typedef interface ISearches ISearches;
 #endif
 
 #ifndef __ISearchAssistantOC_FWD_DEFINED__
 #define __ISearchAssistantOC_FWD_DEFINED__
-typedef struct ISearchAssistantOC ISearchAssistantOC;
+typedef interface ISearchAssistantOC ISearchAssistantOC;
 #endif
 
 #ifndef __ISearchAssistantOC2_FWD_DEFINED__
 #define __ISearchAssistantOC2_FWD_DEFINED__
-typedef struct ISearchAssistantOC2 ISearchAssistantOC2;
+typedef interface ISearchAssistantOC2 ISearchAssistantOC2;
 #endif
 
 #ifndef __ISearchAssistantOC3_FWD_DEFINED__
 #define __ISearchAssistantOC3_FWD_DEFINED__
-typedef struct ISearchAssistantOC3 ISearchAssistantOC3;
+typedef interface ISearchAssistantOC3 ISearchAssistantOC3;
 #endif
 
 #ifndef ___SearchAssistantEvents_FWD_DEFINED__
 #define ___SearchAssistantEvents_FWD_DEFINED__
-typedef struct _SearchAssistantEvents _SearchAssistantEvents;
+typedef interface _SearchAssistantEvents _SearchAssistantEvents;
 #endif
 
+#ifndef __ShellSearchAssistantOC_FWD_DEFINED__
+#define __ShellSearchAssistantOC_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class ShellSearchAssistantOC ShellSearchAssistantOC;
+#else
+typedef struct ShellSearchAssistantOC ShellSearchAssistantOC;
+#endif /* defined __cplusplus */
+#endif /* defined __ShellSearchAssistantOC_FWD_DEFINED__ */
+
 #ifndef __SearchAssistantOC_FWD_DEFINED__
 #define __SearchAssistantOC_FWD_DEFINED__
 #ifdef __cplusplus
 typedef class SearchAssistantOC SearchAssistantOC;
 #else
 typedef struct SearchAssistantOC SearchAssistantOC;
-#endif
-#endif
+#endif /* defined __cplusplus */
+#endif /* defined __SearchAssistantOC_FWD_DEFINED__ */
 
-#include "ocidl.h"
-#include "docobj.h"
+/* Headers for imported files */
+
+#include <ocidl.h>
+#include <docobj.h>
 
 #ifdef __cplusplus
-extern "C"{
+extern "C" {
 #endif
 
-#ifndef __MIDL_user_allocate_free_DEFINED__
-#define __MIDL_user_allocate_free_DEFINED__
-  void *__RPC_API MIDL_user_allocate(size_t);
-  void __RPC_API MIDL_user_free(void *);
+#ifdef WINE_NO_UNICODE_MACROS
+#undef FindText
 #endif
 
-#ifndef __SHDocVw_LIBRARY_DEFINED__
-#define __SHDocVw_LIBRARY_DEFINED__
+DEFINE_GUID(LIBID_SHDocVw, 0xeab22ac0, 0x30c1, 0x11cf, 0xa7,0xeb, 0x00,0x00,0xc0,0x5b,0xae,0x0b);
 
-  typedef enum CommandStateChangeConstants {
-    CSC_UPDATECOMMANDS = 0xffffffff,CSC_NAVIGATEFORWARD = 0x1,CSC_NAVIGATEBACK = 0x2
-  } CommandStateChangeConstants;
-
-  typedef enum SecureLockIconConstants {
-    secureLockIconUnsecure = 0,secureLockIconMixed = 0x1,secureLockIconSecureUnknownBits = 0x2,secureLockIconSecure40Bit = 0x3,
-    secureLockIconSecure56Bit = 0x4,secureLockIconSecureFortezza = 0x5,secureLockIconSecure128Bit = 0x6
-  } SecureLockIconConstants;
-
-  typedef enum ShellWindowTypeConstants {
-    SWC_EXPLORER = 0,SWC_BROWSER = 0x1,SWC_3RDPARTY = 0x2,SWC_CALLBACK = 0x4
-  } ShellWindowTypeConstants;
-
-  typedef enum ShellWindowFindWindowOptions {
-    SWFO_NEEDDISPATCH = 0x1,SWFO_INCLUDEPENDING = 0x2,SWFO_COOKIEPASSED = 0x4
-  } ShellWindowFindWindowOptions;
-
-  EXTERN_C const IID LIBID_SHDocVw;
-
+/*****************************************************************************
+ * IWebBrowser interface
+ */
 #ifndef __IWebBrowser_INTERFACE_DEFINED__
 #define __IWebBrowser_INTERFACE_DEFINED__
-  typedef enum BrowserNavConstants {
-    navOpenInNewWindow = 0x1,navNoHistory = 0x2,navNoReadFromCache = 0x4,navNoWriteToCache = 0x8,navAllowAutosearch = 0x10,
-    navBrowserBar = 0x20,navHyperlink = 0x40,navEnforceRestricted = 0x80,navNewWindowsManaged = 0x100,navUntrustedForDownload = 0x200,
-    navTrustedForActiveX = 0x400
-  } BrowserNavConstants;
 
-  typedef enum RefreshConstants {
-    REFRESH_NORMAL = 0,REFRESH_IFEXPIRED = 1,REFRESH_COMPLETELY = 3
-  } RefreshConstants;
-
-  EXTERN_C const IID IID_IWebBrowser;
+typedef enum BrowserNavConstants {
+    navOpenInNewWindow = 0x1,
+    navNoHistory = 0x2,
+    navNoReadFromCache = 0x4,
+    navNoWriteToCache = 0x8,
+    navAllowAutosearch = 0x10,
+    navBrowserBar = 0x20,
+    navHyperlink = 0x40,
+    navEnforceRestricted = 0x80
+} BrowserNavConstants;
+typedef enum RefreshConstants {
+    REFRESH_NORMAL = 0,
+    REFRESH_IFEXPIRED = 1,
+    REFRESH_COMPLETELY = 3
+} RefreshConstants;
+DEFINE_GUID(IID_IWebBrowser, 0xeab22ac1, 0x30c1, 0x11cf, 0xa7,0xeb, 0x00,0x00,0xc0,0x5b,0xae,0x0b);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-  struct IWebBrowser : public IDispatch {
-  public:
-    virtual HRESULT WINAPI GoBack(void) = 0;
-    virtual HRESULT WINAPI GoForward(void) = 0;
-    virtual HRESULT WINAPI GoHome(void) = 0;
-    virtual HRESULT WINAPI GoSearch(void) = 0;
-    virtual HRESULT WINAPI Navigate(BSTR URL,VARIANT *Flags,VARIANT *TargetFrameName,VARIANT *PostData,VARIANT *Headers) = 0;
-    virtual HRESULT WINAPI Refresh(void) = 0;
-    virtual HRESULT WINAPI Refresh2(VARIANT *Level) = 0;
-    virtual HRESULT WINAPI Stop(void) = 0;
-    virtual HRESULT WINAPI get_Application(IDispatch **ppDisp) = 0;
-    virtual HRESULT WINAPI get_Parent(IDispatch **ppDisp) = 0;
-    virtual HRESULT WINAPI get_Container(IDispatch **ppDisp) = 0;
-    virtual HRESULT WINAPI get_Document(IDispatch **ppDisp) = 0;
-    virtual HRESULT WINAPI get_TopLevelContainer(VARIANT_BOOL *pBool) = 0;
-    virtual HRESULT WINAPI get_Type(BSTR *Type) = 0;
-    virtual HRESULT WINAPI get_Left(__LONG32 *pl) = 0;
-    virtual HRESULT WINAPI put_Left(__LONG32 Left) = 0;
-    virtual HRESULT WINAPI get_Top(__LONG32 *pl) = 0;
-    virtual HRESULT WINAPI put_Top(__LONG32 Top) = 0;
-    virtual HRESULT WINAPI get_Width(__LONG32 *pl) = 0;
-    virtual HRESULT WINAPI put_Width(__LONG32 Width) = 0;
-    virtual HRESULT WINAPI get_Height(__LONG32 *pl) = 0;
-    virtual HRESULT WINAPI put_Height(__LONG32 Height) = 0;
-    virtual HRESULT WINAPI get_LocationName(BSTR *LocationName) = 0;
-    virtual HRESULT WINAPI get_LocationURL(BSTR *LocationURL) = 0;
-    virtual HRESULT WINAPI get_Busy(VARIANT_BOOL *pBool) = 0;
-  };
+MIDL_INTERFACE("eab22ac1-30c1-11cf-a7eb-0000c05bae0b")
+IWebBrowser : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE GoBack(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GoForward(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GoHome(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GoSearch(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Navigate(
+        BSTR URL,
+        VARIANT *Flags,
+        VARIANT *TargetFrameName,
+        VARIANT *PostData,
+        VARIANT *Headers) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Refresh(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Refresh2(
+        VARIANT *Level) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Stop(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Application(
+        IDispatch **ppDisp) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Parent(
+        IDispatch **ppDisp) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Container(
+        IDispatch **ppDisp) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Document(
+        IDispatch **ppDisp) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_TopLevelContainer(
+        VARIANT_BOOL *pBool) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Type(
+        BSTR *Type) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Left(
+        LONG *pl) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Left(
+        LONG Left) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Top(
+        LONG *pl) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Top(
+        LONG Top) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Width(
+        LONG *pl) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Width(
+        LONG Width) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Height(
+        LONG *pl) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Height(
+        LONG Height) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_LocationName(
+        BSTR *LocationName) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_LocationURL(
+        BSTR *LocationURL) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Busy(
+        VARIANT_BOOL *pBool) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IWebBrowser, 0xeab22ac1, 0x30c1, 0x11cf, 0xa7,0xeb, 0x00,0x00,0xc0,0x5b,0xae,0x0b)
+#endif
 #else
-  typedef struct IWebBrowserVtbl {
+typedef struct IWebBrowserVtbl {
     BEGIN_INTERFACE
-      HRESULT (WINAPI *QueryInterface)(IWebBrowser *This,REFIID riid,void **ppvObject);
-      ULONG (WINAPI *AddRef)(IWebBrowser *This);
-      ULONG (WINAPI *Release)(IWebBrowser *This);
-      HRESULT (WINAPI *GetTypeInfoCount)(IWebBrowser *This,UINT *pctinfo);
-      HRESULT (WINAPI *GetTypeInfo)(IWebBrowser *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
-      HRESULT (WINAPI *GetIDsOfNames)(IWebBrowser *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
-      HRESULT (WINAPI *Invoke)(IWebBrowser *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
-      HRESULT (WINAPI *GoBack)(IWebBrowser *This);
-      HRESULT (WINAPI *GoForward)(IWebBrowser *This);
-      HRESULT (WINAPI *GoHome)(IWebBrowser *This);
-      HRESULT (WINAPI *GoSearch)(IWebBrowser *This);
-      HRESULT (WINAPI *Navigate)(IWebBrowser *This,BSTR URL,VARIANT *Flags,VARIANT *TargetFrameName,VARIANT *PostData,VARIANT *Headers);
-      HRESULT (WINAPI *Refresh)(IWebBrowser *This);
-      HRESULT (WINAPI *Refresh2)(IWebBrowser *This,VARIANT *Level);
-      HRESULT (WINAPI *Stop)(IWebBrowser *This);
-      HRESULT (WINAPI *get_Application)(IWebBrowser *This,IDispatch **ppDisp);
-      HRESULT (WINAPI *get_Parent)(IWebBrowser *This,IDispatch **ppDisp);
-      HRESULT (WINAPI *get_Container)(IWebBrowser *This,IDispatch **ppDisp);
-      HRESULT (WINAPI *get_Document)(IWebBrowser *This,IDispatch **ppDisp);
-      HRESULT (WINAPI *get_TopLevelContainer)(IWebBrowser *This,VARIANT_BOOL *pBool);
-      HRESULT (WINAPI *get_Type)(IWebBrowser *This,BSTR *Type);
-      HRESULT (WINAPI *get_Left)(IWebBrowser *This,__LONG32 *pl);
-      HRESULT (WINAPI *put_Left)(IWebBrowser *This,__LONG32 Left);
-      HRESULT (WINAPI *get_Top)(IWebBrowser *This,__LONG32 *pl);
-      HRESULT (WINAPI *put_Top)(IWebBrowser *This,__LONG32 Top);
-      HRESULT (WINAPI *get_Width)(IWebBrowser *This,__LONG32 *pl);
-      HRESULT (WINAPI *put_Width)(IWebBrowser *This,__LONG32 Width);
-      HRESULT (WINAPI *get_Height)(IWebBrowser *This,__LONG32 *pl);
-      HRESULT (WINAPI *put_Height)(IWebBrowser *This,__LONG32 Height);
-      HRESULT (WINAPI *get_LocationName)(IWebBrowser *This,BSTR *LocationName);
-      HRESULT (WINAPI *get_LocationURL)(IWebBrowser *This,BSTR *LocationURL);
-      HRESULT (WINAPI *get_Busy)(IWebBrowser *This,VARIANT_BOOL *pBool);
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWebBrowser* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWebBrowser* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWebBrowser* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IWebBrowser* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IWebBrowser* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IWebBrowser* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IWebBrowser* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IWebBrowser methods ***/
+    HRESULT (STDMETHODCALLTYPE *GoBack)(
+        IWebBrowser* This);
+
+    HRESULT (STDMETHODCALLTYPE *GoForward)(
+        IWebBrowser* This);
+
+    HRESULT (STDMETHODCALLTYPE *GoHome)(
+        IWebBrowser* This);
+
+    HRESULT (STDMETHODCALLTYPE *GoSearch)(
+        IWebBrowser* This);
+
+    HRESULT (STDMETHODCALLTYPE *Navigate)(
+        IWebBrowser* This,
+        BSTR URL,
+        VARIANT *Flags,
+        VARIANT *TargetFrameName,
+        VARIANT *PostData,
+        VARIANT *Headers);
+
+    HRESULT (STDMETHODCALLTYPE *Refresh)(
+        IWebBrowser* This);
+
+    HRESULT (STDMETHODCALLTYPE *Refresh2)(
+        IWebBrowser* This,
+        VARIANT *Level);
+
+    HRESULT (STDMETHODCALLTYPE *Stop)(
+        IWebBrowser* This);
+
+    HRESULT (STDMETHODCALLTYPE *get_Application)(
+        IWebBrowser* This,
+        IDispatch **ppDisp);
+
+    HRESULT (STDMETHODCALLTYPE *get_Parent)(
+        IWebBrowser* This,
+        IDispatch **ppDisp);
+
+    HRESULT (STDMETHODCALLTYPE *get_Container)(
+        IWebBrowser* This,
+        IDispatch **ppDisp);
+
+    HRESULT (STDMETHODCALLTYPE *get_Document)(
+        IWebBrowser* This,
+        IDispatch **ppDisp);
+
+    HRESULT (STDMETHODCALLTYPE *get_TopLevelContainer)(
+        IWebBrowser* This,
+        VARIANT_BOOL *pBool);
+
+    HRESULT (STDMETHODCALLTYPE *get_Type)(
+        IWebBrowser* This,
+        BSTR *Type);
+
+    HRESULT (STDMETHODCALLTYPE *get_Left)(
+        IWebBrowser* This,
+        LONG *pl);
+
+    HRESULT (STDMETHODCALLTYPE *put_Left)(
+        IWebBrowser* This,
+        LONG Left);
+
+    HRESULT (STDMETHODCALLTYPE *get_Top)(
+        IWebBrowser* This,
+        LONG *pl);
+
+    HRESULT (STDMETHODCALLTYPE *put_Top)(
+        IWebBrowser* This,
+        LONG Top);
+
+    HRESULT (STDMETHODCALLTYPE *get_Width)(
+        IWebBrowser* This,
+        LONG *pl);
+
+    HRESULT (STDMETHODCALLTYPE *put_Width)(
+        IWebBrowser* This,
+        LONG Width);
+
+    HRESULT (STDMETHODCALLTYPE *get_Height)(
+        IWebBrowser* This,
+        LONG *pl);
+
+    HRESULT (STDMETHODCALLTYPE *put_Height)(
+        IWebBrowser* This,
+        LONG Height);
+
+    HRESULT (STDMETHODCALLTYPE *get_LocationName)(
+        IWebBrowser* This,
+        BSTR *LocationName);
+
+    HRESULT (STDMETHODCALLTYPE *get_LocationURL)(
+        IWebBrowser* This,
+        BSTR *LocationURL);
+
+    HRESULT (STDMETHODCALLTYPE *get_Busy)(
+        IWebBrowser* This,
+        VARIANT_BOOL *pBool);
+
     END_INTERFACE
-  } IWebBrowserVtbl;
-  struct IWebBrowser {
-    CONST_VTBL struct IWebBrowserVtbl *lpVtbl;
-  };
+} IWebBrowserVtbl;
+interface IWebBrowser {
+    CONST_VTBL IWebBrowserVtbl* lpVtbl;
+};
+
 #ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
 #define IWebBrowser_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define IWebBrowser_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define IWebBrowser_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
 #define IWebBrowser_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
 #define IWebBrowser_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
 #define IWebBrowser_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
 #define IWebBrowser_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IWebBrowser methods ***/
 #define IWebBrowser_GoBack(This) (This)->lpVtbl->GoBack(This)
 #define IWebBrowser_GoForward(This) (This)->lpVtbl->GoForward(This)
 #define IWebBrowser_GoHome(This) (This)->lpVtbl->GoHome(This)
@@ -338,188 +523,750 @@
 #define IWebBrowser_get_LocationName(This,LocationName) (This)->lpVtbl->get_LocationName(This,LocationName)
 #define IWebBrowser_get_LocationURL(This,LocationURL) (This)->lpVtbl->get_LocationURL(This,LocationURL)
 #define IWebBrowser_get_Busy(This,pBool) (This)->lpVtbl->get_Busy(This,pBool)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IWebBrowser_QueryInterface(IWebBrowser* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IWebBrowser_AddRef(IWebBrowser* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IWebBrowser_Release(IWebBrowser* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IWebBrowser_GetTypeInfoCount(IWebBrowser* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IWebBrowser_GetTypeInfo(IWebBrowser* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IWebBrowser_GetIDsOfNames(IWebBrowser* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IWebBrowser_Invoke(IWebBrowser* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IWebBrowser methods ***/
+static FORCEINLINE HRESULT IWebBrowser_GoBack(IWebBrowser* This) {
+    return This->lpVtbl->GoBack(This);
+}
+static FORCEINLINE HRESULT IWebBrowser_GoForward(IWebBrowser* This) {
+    return This->lpVtbl->GoForward(This);
+}
+static FORCEINLINE HRESULT IWebBrowser_GoHome(IWebBrowser* This) {
+    return This->lpVtbl->GoHome(This);
+}
+static FORCEINLINE HRESULT IWebBrowser_GoSearch(IWebBrowser* This) {
+    return This->lpVtbl->GoSearch(This);
+}
+static FORCEINLINE HRESULT IWebBrowser_Navigate(IWebBrowser* This,BSTR URL,VARIANT *Flags,VARIANT *TargetFrameName,VARIANT *PostData,VARIANT *Headers) {
+    return This->lpVtbl->Navigate(This,URL,Flags,TargetFrameName,PostData,Headers);
+}
+static FORCEINLINE HRESULT IWebBrowser_Refresh(IWebBrowser* This) {
+    return This->lpVtbl->Refresh(This);
+}
+static FORCEINLINE HRESULT IWebBrowser_Refresh2(IWebBrowser* This,VARIANT *Level) {
+    return This->lpVtbl->Refresh2(This,Level);
+}
+static FORCEINLINE HRESULT IWebBrowser_Stop(IWebBrowser* This) {
+    return This->lpVtbl->Stop(This);
+}
+static FORCEINLINE HRESULT IWebBrowser_get_Application(IWebBrowser* This,IDispatch **ppDisp) {
+    return This->lpVtbl->get_Application(This,ppDisp);
+}
+static FORCEINLINE HRESULT IWebBrowser_get_Parent(IWebBrowser* This,IDispatch **ppDisp) {
+    return This->lpVtbl->get_Parent(This,ppDisp);
+}
+static FORCEINLINE HRESULT IWebBrowser_get_Container(IWebBrowser* This,IDispatch **ppDisp) {
+    return This->lpVtbl->get_Container(This,ppDisp);
+}
+static FORCEINLINE HRESULT IWebBrowser_get_Document(IWebBrowser* This,IDispatch **ppDisp) {
+    return This->lpVtbl->get_Document(This,ppDisp);
+}
+static FORCEINLINE HRESULT IWebBrowser_get_TopLevelContainer(IWebBrowser* This,VARIANT_BOOL *pBool) {
+    return This->lpVtbl->get_TopLevelContainer(This,pBool);
+}
+static FORCEINLINE HRESULT IWebBrowser_get_Type(IWebBrowser* This,BSTR *Type) {
+    return This->lpVtbl->get_Type(This,Type);
+}
+static FORCEINLINE HRESULT IWebBrowser_get_Left(IWebBrowser* This,LONG *pl) {
+    return This->lpVtbl->get_Left(This,pl);
+}
+static FORCEINLINE HRESULT IWebBrowser_put_Left(IWebBrowser* This,LONG Left) {
+    return This->lpVtbl->put_Left(This,Left);
+}
+static FORCEINLINE HRESULT IWebBrowser_get_Top(IWebBrowser* This,LONG *pl) {
+    return This->lpVtbl->get_Top(This,pl);
+}
+static FORCEINLINE HRESULT IWebBrowser_put_Top(IWebBrowser* This,LONG Top) {
+    return This->lpVtbl->put_Top(This,Top);
+}
+static FORCEINLINE HRESULT IWebBrowser_get_Width(IWebBrowser* This,LONG *pl) {
+    return This->lpVtbl->get_Width(This,pl);
+}
+static FORCEINLINE HRESULT IWebBrowser_put_Width(IWebBrowser* This,LONG Width) {
+    return This->lpVtbl->put_Width(This,Width);
+}
+static FORCEINLINE HRESULT IWebBrowser_get_Height(IWebBrowser* This,LONG *pl) {
+    return This->lpVtbl->get_Height(This,pl);
+}
+static FORCEINLINE HRESULT IWebBrowser_put_Height(IWebBrowser* This,LONG Height) {
+    return This->lpVtbl->put_Height(This,Height);
+}
+static FORCEINLINE HRESULT IWebBrowser_get_LocationName(IWebBrowser* This,BSTR *LocationName) {
+    return This->lpVtbl->get_LocationName(This,LocationName);
+}
+static FORCEINLINE HRESULT IWebBrowser_get_LocationURL(IWebBrowser* This,BSTR *LocationURL) {
+    return This->lpVtbl->get_LocationURL(This,LocationURL);
+}
+static FORCEINLINE HRESULT IWebBrowser_get_Busy(IWebBrowser* This,VARIANT_BOOL *pBool) {
+    return This->lpVtbl->get_Busy(This,pBool);
+}
 #endif
 #endif
-  HRESULT WINAPI IWebBrowser_GoBack_Proxy(IWebBrowser *This);
-  void __RPC_STUB IWebBrowser_GoBack_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser_GoForward_Proxy(IWebBrowser *This);
-  void __RPC_STUB IWebBrowser_GoForward_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser_GoHome_Proxy(IWebBrowser *This);
-  void __RPC_STUB IWebBrowser_GoHome_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser_GoSearch_Proxy(IWebBrowser *This);
-  void __RPC_STUB IWebBrowser_GoSearch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser_Navigate_Proxy(IWebBrowser *This,BSTR URL,VARIANT *Flags,VARIANT *TargetFrameName,VARIANT *PostData,VARIANT *Headers);
-  void __RPC_STUB IWebBrowser_Navigate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser_Refresh_Proxy(IWebBrowser *This);
-  void __RPC_STUB IWebBrowser_Refresh_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser_Refresh2_Proxy(IWebBrowser *This,VARIANT *Level);
-  void __RPC_STUB IWebBrowser_Refresh2_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser_Stop_Proxy(IWebBrowser *This);
-  void __RPC_STUB IWebBrowser_Stop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser_get_Application_Proxy(IWebBrowser *This,IDispatch **ppDisp);
-  void __RPC_STUB IWebBrowser_get_Application_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser_get_Parent_Proxy(IWebBrowser *This,IDispatch **ppDisp);
-  void __RPC_STUB IWebBrowser_get_Parent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser_get_Container_Proxy(IWebBrowser *This,IDispatch **ppDisp);
-  void __RPC_STUB IWebBrowser_get_Container_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser_get_Document_Proxy(IWebBrowser *This,IDispatch **ppDisp);
-  void __RPC_STUB IWebBrowser_get_Document_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser_get_TopLevelContainer_Proxy(IWebBrowser *This,VARIANT_BOOL *pBool);
-  void __RPC_STUB IWebBrowser_get_TopLevelContainer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser_get_Type_Proxy(IWebBrowser *This,BSTR *Type);
-  void __RPC_STUB IWebBrowser_get_Type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser_get_Left_Proxy(IWebBrowser *This,__LONG32 *pl);
-  void __RPC_STUB IWebBrowser_get_Left_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser_put_Left_Proxy(IWebBrowser *This,__LONG32 Left);
-  void __RPC_STUB IWebBrowser_put_Left_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser_get_Top_Proxy(IWebBrowser *This,__LONG32 *pl);
-  void __RPC_STUB IWebBrowser_get_Top_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser_put_Top_Proxy(IWebBrowser *This,__LONG32 Top);
-  void __RPC_STUB IWebBrowser_put_Top_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser_get_Width_Proxy(IWebBrowser *This,__LONG32 *pl);
-  void __RPC_STUB IWebBrowser_get_Width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser_put_Width_Proxy(IWebBrowser *This,__LONG32 Width);
-  void __RPC_STUB IWebBrowser_put_Width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser_get_Height_Proxy(IWebBrowser *This,__LONG32 *pl);
-  void __RPC_STUB IWebBrowser_get_Height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser_put_Height_Proxy(IWebBrowser *This,__LONG32 Height);
-  void __RPC_STUB IWebBrowser_put_Height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser_get_LocationName_Proxy(IWebBrowser *This,BSTR *LocationName);
-  void __RPC_STUB IWebBrowser_get_LocationName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser_get_LocationURL_Proxy(IWebBrowser *This,BSTR *LocationURL);
-  void __RPC_STUB IWebBrowser_get_LocationURL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser_get_Busy_Proxy(IWebBrowser *This,VARIANT_BOOL *pBool);
-  void __RPC_STUB IWebBrowser_get_Busy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-#endif
 
+#endif
+
+HRESULT STDMETHODCALLTYPE IWebBrowser_GoBack_Proxy(
+    IWebBrowser* This);
+void __RPC_STUB IWebBrowser_GoBack_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser_GoForward_Proxy(
+    IWebBrowser* This);
+void __RPC_STUB IWebBrowser_GoForward_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser_GoHome_Proxy(
+    IWebBrowser* This);
+void __RPC_STUB IWebBrowser_GoHome_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser_GoSearch_Proxy(
+    IWebBrowser* This);
+void __RPC_STUB IWebBrowser_GoSearch_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser_Navigate_Proxy(
+    IWebBrowser* This,
+    BSTR URL,
+    VARIANT *Flags,
+    VARIANT *TargetFrameName,
+    VARIANT *PostData,
+    VARIANT *Headers);
+void __RPC_STUB IWebBrowser_Navigate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser_Refresh_Proxy(
+    IWebBrowser* This);
+void __RPC_STUB IWebBrowser_Refresh_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser_Refresh2_Proxy(
+    IWebBrowser* This,
+    VARIANT *Level);
+void __RPC_STUB IWebBrowser_Refresh2_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser_Stop_Proxy(
+    IWebBrowser* This);
+void __RPC_STUB IWebBrowser_Stop_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser_get_Application_Proxy(
+    IWebBrowser* This,
+    IDispatch **ppDisp);
+void __RPC_STUB IWebBrowser_get_Application_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser_get_Parent_Proxy(
+    IWebBrowser* This,
+    IDispatch **ppDisp);
+void __RPC_STUB IWebBrowser_get_Parent_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser_get_Container_Proxy(
+    IWebBrowser* This,
+    IDispatch **ppDisp);
+void __RPC_STUB IWebBrowser_get_Container_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser_get_Document_Proxy(
+    IWebBrowser* This,
+    IDispatch **ppDisp);
+void __RPC_STUB IWebBrowser_get_Document_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser_get_TopLevelContainer_Proxy(
+    IWebBrowser* This,
+    VARIANT_BOOL *pBool);
+void __RPC_STUB IWebBrowser_get_TopLevelContainer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser_get_Type_Proxy(
+    IWebBrowser* This,
+    BSTR *Type);
+void __RPC_STUB IWebBrowser_get_Type_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser_get_Left_Proxy(
+    IWebBrowser* This,
+    LONG *pl);
+void __RPC_STUB IWebBrowser_get_Left_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser_put_Left_Proxy(
+    IWebBrowser* This,
+    LONG Left);
+void __RPC_STUB IWebBrowser_put_Left_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser_get_Top_Proxy(
+    IWebBrowser* This,
+    LONG *pl);
+void __RPC_STUB IWebBrowser_get_Top_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser_put_Top_Proxy(
+    IWebBrowser* This,
+    LONG Top);
+void __RPC_STUB IWebBrowser_put_Top_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser_get_Width_Proxy(
+    IWebBrowser* This,
+    LONG *pl);
+void __RPC_STUB IWebBrowser_get_Width_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser_put_Width_Proxy(
+    IWebBrowser* This,
+    LONG Width);
+void __RPC_STUB IWebBrowser_put_Width_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser_get_Height_Proxy(
+    IWebBrowser* This,
+    LONG *pl);
+void __RPC_STUB IWebBrowser_get_Height_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser_put_Height_Proxy(
+    IWebBrowser* This,
+    LONG Height);
+void __RPC_STUB IWebBrowser_put_Height_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser_get_LocationName_Proxy(
+    IWebBrowser* This,
+    BSTR *LocationName);
+void __RPC_STUB IWebBrowser_get_LocationName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser_get_LocationURL_Proxy(
+    IWebBrowser* This,
+    BSTR *LocationURL);
+void __RPC_STUB IWebBrowser_get_LocationURL_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser_get_Busy_Proxy(
+    IWebBrowser* This,
+    VARIANT_BOOL *pBool);
+void __RPC_STUB IWebBrowser_get_Busy_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWebBrowser_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * DWebBrowserEvents dispinterface
+ */
 #ifndef __DWebBrowserEvents_DISPINTERFACE_DEFINED__
 #define __DWebBrowserEvents_DISPINTERFACE_DEFINED__
-  EXTERN_C const IID DIID_DWebBrowserEvents;
+
+DEFINE_GUID(DIID_DWebBrowserEvents, 0xeab22ac2, 0x30c1, 0x11cf, 0xa7,0xeb, 0x00,0x00,0xc0,0x5b,0xae,0x0b);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-  struct DWebBrowserEvents : public IDispatch {
-  };
+MIDL_INTERFACE("eab22ac2-30c1-11cf-a7eb-0000c05bae0b")
+DWebBrowserEvents : public IDispatch
+{
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(DWebBrowserEvents, 0xeab22ac2, 0x30c1, 0x11cf, 0xa7,0xeb, 0x00,0x00,0xc0,0x5b,0xae,0x0b)
+#endif
 #else
-  typedef struct DWebBrowserEventsVtbl {
+typedef struct DWebBrowserEventsVtbl {
     BEGIN_INTERFACE
-      HRESULT (WINAPI *QueryInterface)(DWebBrowserEvents *This,REFIID riid,void **ppvObject);
-      ULONG (WINAPI *AddRef)(DWebBrowserEvents *This);
-      ULONG (WINAPI *Release)(DWebBrowserEvents *This);
-      HRESULT (WINAPI *GetTypeInfoCount)(DWebBrowserEvents *This,UINT *pctinfo);
-      HRESULT (WINAPI *GetTypeInfo)(DWebBrowserEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
-      HRESULT (WINAPI *GetIDsOfNames)(DWebBrowserEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
-      HRESULT (WINAPI *Invoke)(DWebBrowserEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        DWebBrowserEvents* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        DWebBrowserEvents* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        DWebBrowserEvents* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        DWebBrowserEvents* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        DWebBrowserEvents* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        DWebBrowserEvents* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        DWebBrowserEvents* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
     END_INTERFACE
-  } DWebBrowserEventsVtbl;
-  struct DWebBrowserEvents {
-    CONST_VTBL struct DWebBrowserEventsVtbl *lpVtbl;
-  };
+} DWebBrowserEventsVtbl;
+interface DWebBrowserEvents {
+    CONST_VTBL DWebBrowserEventsVtbl* lpVtbl;
+};
+
 #ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
 #define DWebBrowserEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define DWebBrowserEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define DWebBrowserEvents_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
 #define DWebBrowserEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
 #define DWebBrowserEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
 #define DWebBrowserEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
 #define DWebBrowserEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
-#endif
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT DWebBrowserEvents_QueryInterface(DWebBrowserEvents* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG DWebBrowserEvents_AddRef(DWebBrowserEvents* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG DWebBrowserEvents_Release(DWebBrowserEvents* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT DWebBrowserEvents_GetTypeInfoCount(DWebBrowserEvents* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT DWebBrowserEvents_GetTypeInfo(DWebBrowserEvents* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT DWebBrowserEvents_GetIDsOfNames(DWebBrowserEvents* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT DWebBrowserEvents_Invoke(DWebBrowserEvents* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
 #endif
 #endif
 
+#endif
+
+#endif  /* __DWebBrowserEvents_DISPINTERFACE_DEFINED__ */
+
+typedef enum CommandStateChangeConstants {
+    CSC_UPDATECOMMANDS = -1,
+    CSC_NAVIGATEFORWARD = 1,
+    CSC_NAVIGATEBACK = 2
+} CommandStateChangeConstants;
+/*****************************************************************************
+ * IWebBrowserApp interface
+ */
 #ifndef __IWebBrowserApp_INTERFACE_DEFINED__
 #define __IWebBrowserApp_INTERFACE_DEFINED__
-  EXTERN_C const IID IID_IWebBrowserApp;
+
+DEFINE_GUID(IID_IWebBrowserApp, 0x0002df05, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-  struct IWebBrowserApp : public IWebBrowser {
-  public:
-    virtual HRESULT WINAPI Quit(void) = 0;
-    virtual HRESULT WINAPI ClientToWindow(int *pcx,int *pcy) = 0;
-    virtual HRESULT WINAPI PutProperty(BSTR Property,VARIANT vtValue) = 0;
-    virtual HRESULT WINAPI GetProperty(BSTR Property,VARIANT *pvtValue) = 0;
-    virtual HRESULT WINAPI get_Name(BSTR *Name) = 0;
-    virtual HRESULT WINAPI get_HWND(SHANDLE_PTR *pHWND) = 0;
-    virtual HRESULT WINAPI get_FullName(BSTR *FullName) = 0;
-    virtual HRESULT WINAPI get_Path(BSTR *Path) = 0;
-    virtual HRESULT WINAPI get_Visible(VARIANT_BOOL *pBool) = 0;
-    virtual HRESULT WINAPI put_Visible(VARIANT_BOOL Value) = 0;
-    virtual HRESULT WINAPI get_StatusBar(VARIANT_BOOL *pBool) = 0;
-    virtual HRESULT WINAPI put_StatusBar(VARIANT_BOOL Value) = 0;
-    virtual HRESULT WINAPI get_StatusText(BSTR *StatusText) = 0;
-    virtual HRESULT WINAPI put_StatusText(BSTR StatusText) = 0;
-    virtual HRESULT WINAPI get_ToolBar(int *Value) = 0;
-    virtual HRESULT WINAPI put_ToolBar(int Value) = 0;
-    virtual HRESULT WINAPI get_MenuBar(VARIANT_BOOL *Value) = 0;
-    virtual HRESULT WINAPI put_MenuBar(VARIANT_BOOL Value) = 0;
-    virtual HRESULT WINAPI get_FullScreen(VARIANT_BOOL *pbFullScreen) = 0;
-    virtual HRESULT WINAPI put_FullScreen(VARIANT_BOOL bFullScreen) = 0;
-  };
+MIDL_INTERFACE("0002df05-0000-0000-c000-000000000046")
+IWebBrowserApp : public IWebBrowser
+{
+    virtual HRESULT STDMETHODCALLTYPE Quit(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ClientToWindow(
+        int *pcx,
+        int *pcy) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PutProperty(
+        BSTR Property,
+        VARIANT vtValue) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetProperty(
+        BSTR Property,
+        VARIANT *pvtValue) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Name(
+        BSTR *Name) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_HWND(
+        SHANDLE_PTR *pHWND) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_FullName(
+        BSTR *FullName) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Path(
+        BSTR *Path) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Visible(
+        VARIANT_BOOL *pBool) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Visible(
+        VARIANT_BOOL Value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_StatusBar(
+        VARIANT_BOOL *pBool) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_StatusBar(
+        VARIANT_BOOL Value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_StatusText(
+        BSTR *StatusText) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_StatusText(
+        BSTR StatusText) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ToolBar(
+        int *Value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_ToolBar(
+        int Value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_MenuBar(
+        VARIANT_BOOL *Value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_MenuBar(
+        VARIANT_BOOL Value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_FullScreen(
+        VARIANT_BOOL *pbFullScreen) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_FullScreen(
+        VARIANT_BOOL bFullScreen) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IWebBrowserApp, 0x0002df05, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46)
+#endif
 #else
-  typedef struct IWebBrowserAppVtbl {
+typedef struct IWebBrowserAppVtbl {
     BEGIN_INTERFACE
-      HRESULT (WINAPI *QueryInterface)(IWebBrowserApp *This,REFIID riid,void **ppvObject);
-      ULONG (WINAPI *AddRef)(IWebBrowserApp *This);
-      ULONG (WINAPI *Release)(IWebBrowserApp *This);
-      HRESULT (WINAPI *GetTypeInfoCount)(IWebBrowserApp *This,UINT *pctinfo);
-      HRESULT (WINAPI *GetTypeInfo)(IWebBrowserApp *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
-      HRESULT (WINAPI *GetIDsOfNames)(IWebBrowserApp *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
-      HRESULT (WINAPI *Invoke)(IWebBrowserApp *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
-      HRESULT (WINAPI *GoBack)(IWebBrowserApp *This);
-      HRESULT (WINAPI *GoForward)(IWebBrowserApp *This);
-      HRESULT (WINAPI *GoHome)(IWebBrowserApp *This);
-      HRESULT (WINAPI *GoSearch)(IWebBrowserApp *This);
-      HRESULT (WINAPI *Navigate)(IWebBrowserApp *This,BSTR URL,VARIANT *Flags,VARIANT *TargetFrameName,VARIANT *PostData,VARIANT *Headers);
-      HRESULT (WINAPI *Refresh)(IWebBrowserApp *This);
-      HRESULT (WINAPI *Refresh2)(IWebBrowserApp *This,VARIANT *Level);
-      HRESULT (WINAPI *Stop)(IWebBrowserApp *This);
-      HRESULT (WINAPI *get_Application)(IWebBrowserApp *This,IDispatch **ppDisp);
-      HRESULT (WINAPI *get_Parent)(IWebBrowserApp *This,IDispatch **ppDisp);
-      HRESULT (WINAPI *get_Container)(IWebBrowserApp *This,IDispatch **ppDisp);
-      HRESULT (WINAPI *get_Document)(IWebBrowserApp *This,IDispatch **ppDisp);
-      HRESULT (WINAPI *get_TopLevelContainer)(IWebBrowserApp *This,VARIANT_BOOL *pBool);
-      HRESULT (WINAPI *get_Type)(IWebBrowserApp *This,BSTR *Type);
-      HRESULT (WINAPI *get_Left)(IWebBrowserApp *This,__LONG32 *pl);
-      HRESULT (WINAPI *put_Left)(IWebBrowserApp *This,__LONG32 Left);
-      HRESULT (WINAPI *get_Top)(IWebBrowserApp *This,__LONG32 *pl);
-      HRESULT (WINAPI *put_Top)(IWebBrowserApp *This,__LONG32 Top);
-      HRESULT (WINAPI *get_Width)(IWebBrowserApp *This,__LONG32 *pl);
-      HRESULT (WINAPI *put_Width)(IWebBrowserApp *This,__LONG32 Width);
-      HRESULT (WINAPI *get_Height)(IWebBrowserApp *This,__LONG32 *pl);
-      HRESULT (WINAPI *put_Height)(IWebBrowserApp *This,__LONG32 Height);
-      HRESULT (WINAPI *get_LocationName)(IWebBrowserApp *This,BSTR *LocationName);
-      HRESULT (WINAPI *get_LocationURL)(IWebBrowserApp *This,BSTR *LocationURL);
-      HRESULT (WINAPI *get_Busy)(IWebBrowserApp *This,VARIANT_BOOL *pBool);
-      HRESULT (WINAPI *Quit)(IWebBrowserApp *This);
-      HRESULT (WINAPI *ClientToWindow)(IWebBrowserApp *This,int *pcx,int *pcy);
-      HRESULT (WINAPI *PutProperty)(IWebBrowserApp *This,BSTR Property,VARIANT vtValue);
-      HRESULT (WINAPI *GetProperty)(IWebBrowserApp *This,BSTR Property,VARIANT *pvtValue);
-      HRESULT (WINAPI *get_Name)(IWebBrowserApp *This,BSTR *Name);
-      HRESULT (WINAPI *get_HWND)(IWebBrowserApp *This,SHANDLE_PTR *pHWND);
-      HRESULT (WINAPI *get_FullName)(IWebBrowserApp *This,BSTR *FullName);
-      HRESULT (WINAPI *get_Path)(IWebBrowserApp *This,BSTR *Path);
-      HRESULT (WINAPI *get_Visible)(IWebBrowserApp *This,VARIANT_BOOL *pBool);
-      HRESULT (WINAPI *put_Visible)(IWebBrowserApp *This,VARIANT_BOOL Value);
-      HRESULT (WINAPI *get_StatusBar)(IWebBrowserApp *This,VARIANT_BOOL *pBool);
-      HRESULT (WINAPI *put_StatusBar)(IWebBrowserApp *This,VARIANT_BOOL Value);
-      HRESULT (WINAPI *get_StatusText)(IWebBrowserApp *This,BSTR *StatusText);
-      HRESULT (WINAPI *put_StatusText)(IWebBrowserApp *This,BSTR StatusText);
-      HRESULT (WINAPI *get_ToolBar)(IWebBrowserApp *This,int *Value);
-      HRESULT (WINAPI *put_ToolBar)(IWebBrowserApp *This,int Value);
-      HRESULT (WINAPI *get_MenuBar)(IWebBrowserApp *This,VARIANT_BOOL *Value);
-      HRESULT (WINAPI *put_MenuBar)(IWebBrowserApp *This,VARIANT_BOOL Value);
-      HRESULT (WINAPI *get_FullScreen)(IWebBrowserApp *This,VARIANT_BOOL *pbFullScreen);
-      HRESULT (WINAPI *put_FullScreen)(IWebBrowserApp *This,VARIANT_BOOL bFullScreen);
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWebBrowserApp* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWebBrowserApp* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWebBrowserApp* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IWebBrowserApp* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IWebBrowserApp* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IWebBrowserApp* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IWebBrowserApp* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IWebBrowser methods ***/
+    HRESULT (STDMETHODCALLTYPE *GoBack)(
+        IWebBrowserApp* This);
+
+    HRESULT (STDMETHODCALLTYPE *GoForward)(
+        IWebBrowserApp* This);
+
+    HRESULT (STDMETHODCALLTYPE *GoHome)(
+        IWebBrowserApp* This);
+
+    HRESULT (STDMETHODCALLTYPE *GoSearch)(
+        IWebBrowserApp* This);
+
+    HRESULT (STDMETHODCALLTYPE *Navigate)(
+        IWebBrowserApp* This,
+        BSTR URL,
+        VARIANT *Flags,
+        VARIANT *TargetFrameName,
+        VARIANT *PostData,
+        VARIANT *Headers);
+
+    HRESULT (STDMETHODCALLTYPE *Refresh)(
+        IWebBrowserApp* This);
+
+    HRESULT (STDMETHODCALLTYPE *Refresh2)(
+        IWebBrowserApp* This,
+        VARIANT *Level);
+
+    HRESULT (STDMETHODCALLTYPE *Stop)(
+        IWebBrowserApp* This);
+
+    HRESULT (STDMETHODCALLTYPE *get_Application)(
+        IWebBrowserApp* This,
+        IDispatch **ppDisp);
+
+    HRESULT (STDMETHODCALLTYPE *get_Parent)(
+        IWebBrowserApp* This,
+        IDispatch **ppDisp);
+
+    HRESULT (STDMETHODCALLTYPE *get_Container)(
+        IWebBrowserApp* This,
+        IDispatch **ppDisp);
+
+    HRESULT (STDMETHODCALLTYPE *get_Document)(
+        IWebBrowserApp* This,
+        IDispatch **ppDisp);
+
+    HRESULT (STDMETHODCALLTYPE *get_TopLevelContainer)(
+        IWebBrowserApp* This,
+        VARIANT_BOOL *pBool);
+
+    HRESULT (STDMETHODCALLTYPE *get_Type)(
+        IWebBrowserApp* This,
+        BSTR *Type);
+
+    HRESULT (STDMETHODCALLTYPE *get_Left)(
+        IWebBrowserApp* This,
+        LONG *pl);
+
+    HRESULT (STDMETHODCALLTYPE *put_Left)(
+        IWebBrowserApp* This,
+        LONG Left);
+
+    HRESULT (STDMETHODCALLTYPE *get_Top)(
+        IWebBrowserApp* This,
+        LONG *pl);
+
+    HRESULT (STDMETHODCALLTYPE *put_Top)(
+        IWebBrowserApp* This,
+        LONG Top);
+
+    HRESULT (STDMETHODCALLTYPE *get_Width)(
+        IWebBrowserApp* This,
+        LONG *pl);
+
+    HRESULT (STDMETHODCALLTYPE *put_Width)(
+        IWebBrowserApp* This,
+        LONG Width);
+
+    HRESULT (STDMETHODCALLTYPE *get_Height)(
+        IWebBrowserApp* This,
+        LONG *pl);
+
+    HRESULT (STDMETHODCALLTYPE *put_Height)(
+        IWebBrowserApp* This,
+        LONG Height);
+
+    HRESULT (STDMETHODCALLTYPE *get_LocationName)(
+        IWebBrowserApp* This,
+        BSTR *LocationName);
+
+    HRESULT (STDMETHODCALLTYPE *get_LocationURL)(
+        IWebBrowserApp* This,
+        BSTR *LocationURL);
+
+    HRESULT (STDMETHODCALLTYPE *get_Busy)(
+        IWebBrowserApp* This,
+        VARIANT_BOOL *pBool);
+
+    /*** IWebBrowserApp methods ***/
+    HRESULT (STDMETHODCALLTYPE *Quit)(
+        IWebBrowserApp* This);
+
+    HRESULT (STDMETHODCALLTYPE *ClientToWindow)(
+        IWebBrowserApp* This,
+        int *pcx,
+        int *pcy);
+
+    HRESULT (STDMETHODCALLTYPE *PutProperty)(
+        IWebBrowserApp* This,
+        BSTR Property,
+        VARIANT vtValue);
+
+    HRESULT (STDMETHODCALLTYPE *GetProperty)(
+        IWebBrowserApp* This,
+        BSTR Property,
+        VARIANT *pvtValue);
+
+    HRESULT (STDMETHODCALLTYPE *get_Name)(
+        IWebBrowserApp* This,
+        BSTR *Name);
+
+    HRESULT (STDMETHODCALLTYPE *get_HWND)(
+        IWebBrowserApp* This,
+        SHANDLE_PTR *pHWND);
+
+    HRESULT (STDMETHODCALLTYPE *get_FullName)(
+        IWebBrowserApp* This,
+        BSTR *FullName);
+
+    HRESULT (STDMETHODCALLTYPE *get_Path)(
+        IWebBrowserApp* This,
+        BSTR *Path);
+
+    HRESULT (STDMETHODCALLTYPE *get_Visible)(
+        IWebBrowserApp* This,
+        VARIANT_BOOL *pBool);
+
+    HRESULT (STDMETHODCALLTYPE *put_Visible)(
+        IWebBrowserApp* This,
+        VARIANT_BOOL Value);
+
+    HRESULT (STDMETHODCALLTYPE *get_StatusBar)(
+        IWebBrowserApp* This,
+        VARIANT_BOOL *pBool);
+
+    HRESULT (STDMETHODCALLTYPE *put_StatusBar)(
+        IWebBrowserApp* This,
+        VARIANT_BOOL Value);
+
+    HRESULT (STDMETHODCALLTYPE *get_StatusText)(
+        IWebBrowserApp* This,
+        BSTR *StatusText);
+
+    HRESULT (STDMETHODCALLTYPE *put_StatusText)(
+        IWebBrowserApp* This,
+        BSTR StatusText);
+
+    HRESULT (STDMETHODCALLTYPE *get_ToolBar)(
+        IWebBrowserApp* This,
+        int *Value);
+
+    HRESULT (STDMETHODCALLTYPE *put_ToolBar)(
+        IWebBrowserApp* This,
+        int Value);
+
+    HRESULT (STDMETHODCALLTYPE *get_MenuBar)(
+        IWebBrowserApp* This,
+        VARIANT_BOOL *Value);
+
+    HRESULT (STDMETHODCALLTYPE *put_MenuBar)(
+        IWebBrowserApp* This,
+        VARIANT_BOOL Value);
+
+    HRESULT (STDMETHODCALLTYPE *get_FullScreen)(
+        IWebBrowserApp* This,
+        VARIANT_BOOL *pbFullScreen);
+
+    HRESULT (STDMETHODCALLTYPE *put_FullScreen)(
+        IWebBrowserApp* This,
+        VARIANT_BOOL bFullScreen);
+
     END_INTERFACE
-  } IWebBrowserAppVtbl;
-  struct IWebBrowserApp {
-    CONST_VTBL struct IWebBrowserAppVtbl *lpVtbl;
-  };
+} IWebBrowserAppVtbl;
+interface IWebBrowserApp {
+    CONST_VTBL IWebBrowserAppVtbl* lpVtbl;
+};
+
 #ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
 #define IWebBrowserApp_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define IWebBrowserApp_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define IWebBrowserApp_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
 #define IWebBrowserApp_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
 #define IWebBrowserApp_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
 #define IWebBrowserApp_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
 #define IWebBrowserApp_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IWebBrowser methods ***/
 #define IWebBrowserApp_GoBack(This) (This)->lpVtbl->GoBack(This)
 #define IWebBrowserApp_GoForward(This) (This)->lpVtbl->GoForward(This)
 #define IWebBrowserApp_GoHome(This) (This)->lpVtbl->GoHome(This)
@@ -545,6 +1292,7 @@
 #define IWebBrowserApp_get_LocationName(This,LocationName) (This)->lpVtbl->get_LocationName(This,LocationName)
 #define IWebBrowserApp_get_LocationURL(This,LocationURL) (This)->lpVtbl->get_LocationURL(This,LocationURL)
 #define IWebBrowserApp_get_Busy(This,pBool) (This)->lpVtbl->get_Busy(This,pBool)
+/*** IWebBrowserApp methods ***/
 #define IWebBrowserApp_Quit(This) (This)->lpVtbl->Quit(This)
 #define IWebBrowserApp_ClientToWindow(This,pcx,pcy) (This)->lpVtbl->ClientToWindow(This,pcx,pcy)
 #define IWebBrowserApp_PutProperty(This,Property,vtValue) (This)->lpVtbl->PutProperty(This,Property,vtValue)
@@ -565,163 +1313,752 @@
 #define IWebBrowserApp_put_MenuBar(This,Value) (This)->lpVtbl->put_MenuBar(This,Value)
 #define IWebBrowserApp_get_FullScreen(This,pbFullScreen) (This)->lpVtbl->get_FullScreen(This,pbFullScreen)
 #define IWebBrowserApp_put_FullScreen(This,bFullScreen) (This)->lpVtbl->put_FullScreen(This,bFullScreen)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IWebBrowserApp_QueryInterface(IWebBrowserApp* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IWebBrowserApp_AddRef(IWebBrowserApp* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IWebBrowserApp_Release(IWebBrowserApp* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IWebBrowserApp_GetTypeInfoCount(IWebBrowserApp* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_GetTypeInfo(IWebBrowserApp* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_GetIDsOfNames(IWebBrowserApp* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_Invoke(IWebBrowserApp* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IWebBrowser methods ***/
+static FORCEINLINE HRESULT IWebBrowserApp_GoBack(IWebBrowserApp* This) {
+    return This->lpVtbl->GoBack(This);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_GoForward(IWebBrowserApp* This) {
+    return This->lpVtbl->GoForward(This);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_GoHome(IWebBrowserApp* This) {
+    return This->lpVtbl->GoHome(This);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_GoSearch(IWebBrowserApp* This) {
+    return This->lpVtbl->GoSearch(This);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_Navigate(IWebBrowserApp* This,BSTR URL,VARIANT *Flags,VARIANT *TargetFrameName,VARIANT *PostData,VARIANT *Headers) {
+    return This->lpVtbl->Navigate(This,URL,Flags,TargetFrameName,PostData,Headers);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_Refresh(IWebBrowserApp* This) {
+    return This->lpVtbl->Refresh(This);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_Refresh2(IWebBrowserApp* This,VARIANT *Level) {
+    return This->lpVtbl->Refresh2(This,Level);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_Stop(IWebBrowserApp* This) {
+    return This->lpVtbl->Stop(This);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_get_Application(IWebBrowserApp* This,IDispatch **ppDisp) {
+    return This->lpVtbl->get_Application(This,ppDisp);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_get_Parent(IWebBrowserApp* This,IDispatch **ppDisp) {
+    return This->lpVtbl->get_Parent(This,ppDisp);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_get_Container(IWebBrowserApp* This,IDispatch **ppDisp) {
+    return This->lpVtbl->get_Container(This,ppDisp);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_get_Document(IWebBrowserApp* This,IDispatch **ppDisp) {
+    return This->lpVtbl->get_Document(This,ppDisp);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_get_TopLevelContainer(IWebBrowserApp* This,VARIANT_BOOL *pBool) {
+    return This->lpVtbl->get_TopLevelContainer(This,pBool);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_get_Type(IWebBrowserApp* This,BSTR *Type) {
+    return This->lpVtbl->get_Type(This,Type);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_get_Left(IWebBrowserApp* This,LONG *pl) {
+    return This->lpVtbl->get_Left(This,pl);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_put_Left(IWebBrowserApp* This,LONG Left) {
+    return This->lpVtbl->put_Left(This,Left);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_get_Top(IWebBrowserApp* This,LONG *pl) {
+    return This->lpVtbl->get_Top(This,pl);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_put_Top(IWebBrowserApp* This,LONG Top) {
+    return This->lpVtbl->put_Top(This,Top);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_get_Width(IWebBrowserApp* This,LONG *pl) {
+    return This->lpVtbl->get_Width(This,pl);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_put_Width(IWebBrowserApp* This,LONG Width) {
+    return This->lpVtbl->put_Width(This,Width);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_get_Height(IWebBrowserApp* This,LONG *pl) {
+    return This->lpVtbl->get_Height(This,pl);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_put_Height(IWebBrowserApp* This,LONG Height) {
+    return This->lpVtbl->put_Height(This,Height);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_get_LocationName(IWebBrowserApp* This,BSTR *LocationName) {
+    return This->lpVtbl->get_LocationName(This,LocationName);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_get_LocationURL(IWebBrowserApp* This,BSTR *LocationURL) {
+    return This->lpVtbl->get_LocationURL(This,LocationURL);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_get_Busy(IWebBrowserApp* This,VARIANT_BOOL *pBool) {
+    return This->lpVtbl->get_Busy(This,pBool);
+}
+/*** IWebBrowserApp methods ***/
+static FORCEINLINE HRESULT IWebBrowserApp_Quit(IWebBrowserApp* This) {
+    return This->lpVtbl->Quit(This);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_ClientToWindow(IWebBrowserApp* This,int *pcx,int *pcy) {
+    return This->lpVtbl->ClientToWindow(This,pcx,pcy);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_PutProperty(IWebBrowserApp* This,BSTR Property,VARIANT vtValue) {
+    return This->lpVtbl->PutProperty(This,Property,vtValue);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_GetProperty(IWebBrowserApp* This,BSTR Property,VARIANT *pvtValue) {
+    return This->lpVtbl->GetProperty(This,Property,pvtValue);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_get_Name(IWebBrowserApp* This,BSTR *Name) {
+    return This->lpVtbl->get_Name(This,Name);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_get_HWND(IWebBrowserApp* This,SHANDLE_PTR *pHWND) {
+    return This->lpVtbl->get_HWND(This,pHWND);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_get_FullName(IWebBrowserApp* This,BSTR *FullName) {
+    return This->lpVtbl->get_FullName(This,FullName);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_get_Path(IWebBrowserApp* This,BSTR *Path) {
+    return This->lpVtbl->get_Path(This,Path);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_get_Visible(IWebBrowserApp* This,VARIANT_BOOL *pBool) {
+    return This->lpVtbl->get_Visible(This,pBool);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_put_Visible(IWebBrowserApp* This,VARIANT_BOOL Value) {
+    return This->lpVtbl->put_Visible(This,Value);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_get_StatusBar(IWebBrowserApp* This,VARIANT_BOOL *pBool) {
+    return This->lpVtbl->get_StatusBar(This,pBool);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_put_StatusBar(IWebBrowserApp* This,VARIANT_BOOL Value) {
+    return This->lpVtbl->put_StatusBar(This,Value);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_get_StatusText(IWebBrowserApp* This,BSTR *StatusText) {
+    return This->lpVtbl->get_StatusText(This,StatusText);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_put_StatusText(IWebBrowserApp* This,BSTR StatusText) {
+    return This->lpVtbl->put_StatusText(This,StatusText);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_get_ToolBar(IWebBrowserApp* This,int *Value) {
+    return This->lpVtbl->get_ToolBar(This,Value);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_put_ToolBar(IWebBrowserApp* This,int Value) {
+    return This->lpVtbl->put_ToolBar(This,Value);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_get_MenuBar(IWebBrowserApp* This,VARIANT_BOOL *Value) {
+    return This->lpVtbl->get_MenuBar(This,Value);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_put_MenuBar(IWebBrowserApp* This,VARIANT_BOOL Value) {
+    return This->lpVtbl->put_MenuBar(This,Value);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_get_FullScreen(IWebBrowserApp* This,VARIANT_BOOL *pbFullScreen) {
+    return This->lpVtbl->get_FullScreen(This,pbFullScreen);
+}
+static FORCEINLINE HRESULT IWebBrowserApp_put_FullScreen(IWebBrowserApp* This,VARIANT_BOOL bFullScreen) {
+    return This->lpVtbl->put_FullScreen(This,bFullScreen);
+}
 #endif
 #endif
-  HRESULT WINAPI IWebBrowserApp_Quit_Proxy(IWebBrowserApp *This);
-  void __RPC_STUB IWebBrowserApp_Quit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowserApp_ClientToWindow_Proxy(IWebBrowserApp *This,int *pcx,int *pcy);
-  void __RPC_STUB IWebBrowserApp_ClientToWindow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowserApp_PutProperty_Proxy(IWebBrowserApp *This,BSTR Property,VARIANT vtValue);
-  void __RPC_STUB IWebBrowserApp_PutProperty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowserApp_GetProperty_Proxy(IWebBrowserApp *This,BSTR Property,VARIANT *pvtValue);
-  void __RPC_STUB IWebBrowserApp_GetProperty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowserApp_get_Name_Proxy(IWebBrowserApp *This,BSTR *Name);
-  void __RPC_STUB IWebBrowserApp_get_Name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowserApp_get_HWND_Proxy(IWebBrowserApp *This,SHANDLE_PTR *pHWND);
-  void __RPC_STUB IWebBrowserApp_get_HWND_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowserApp_get_FullName_Proxy(IWebBrowserApp *This,BSTR *FullName);
-  void __RPC_STUB IWebBrowserApp_get_FullName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowserApp_get_Path_Proxy(IWebBrowserApp *This,BSTR *Path);
-  void __RPC_STUB IWebBrowserApp_get_Path_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowserApp_get_Visible_Proxy(IWebBrowserApp *This,VARIANT_BOOL *pBool);
-  void __RPC_STUB IWebBrowserApp_get_Visible_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowserApp_put_Visible_Proxy(IWebBrowserApp *This,VARIANT_BOOL Value);
-  void __RPC_STUB IWebBrowserApp_put_Visible_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowserApp_get_StatusBar_Proxy(IWebBrowserApp *This,VARIANT_BOOL *pBool);
-  void __RPC_STUB IWebBrowserApp_get_StatusBar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowserApp_put_StatusBar_Proxy(IWebBrowserApp *This,VARIANT_BOOL Value);
-  void __RPC_STUB IWebBrowserApp_put_StatusBar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowserApp_get_StatusText_Proxy(IWebBrowserApp *This,BSTR *StatusText);
-  void __RPC_STUB IWebBrowserApp_get_StatusText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowserApp_put_StatusText_Proxy(IWebBrowserApp *This,BSTR StatusText);
-  void __RPC_STUB IWebBrowserApp_put_StatusText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowserApp_get_ToolBar_Proxy(IWebBrowserApp *This,int *Value);
-  void __RPC_STUB IWebBrowserApp_get_ToolBar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowserApp_put_ToolBar_Proxy(IWebBrowserApp *This,int Value);
-  void __RPC_STUB IWebBrowserApp_put_ToolBar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowserApp_get_MenuBar_Proxy(IWebBrowserApp *This,VARIANT_BOOL *Value);
-  void __RPC_STUB IWebBrowserApp_get_MenuBar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowserApp_put_MenuBar_Proxy(IWebBrowserApp *This,VARIANT_BOOL Value);
-  void __RPC_STUB IWebBrowserApp_put_MenuBar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowserApp_get_FullScreen_Proxy(IWebBrowserApp *This,VARIANT_BOOL *pbFullScreen);
-  void __RPC_STUB IWebBrowserApp_get_FullScreen_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowserApp_put_FullScreen_Proxy(IWebBrowserApp *This,VARIANT_BOOL bFullScreen);
-  void __RPC_STUB IWebBrowserApp_put_FullScreen_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-#endif
 
+#endif
+
+HRESULT STDMETHODCALLTYPE IWebBrowserApp_Quit_Proxy(
+    IWebBrowserApp* This);
+void __RPC_STUB IWebBrowserApp_Quit_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowserApp_ClientToWindow_Proxy(
+    IWebBrowserApp* This,
+    int *pcx,
+    int *pcy);
+void __RPC_STUB IWebBrowserApp_ClientToWindow_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowserApp_PutProperty_Proxy(
+    IWebBrowserApp* This,
+    BSTR Property,
+    VARIANT vtValue);
+void __RPC_STUB IWebBrowserApp_PutProperty_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowserApp_GetProperty_Proxy(
+    IWebBrowserApp* This,
+    BSTR Property,
+    VARIANT *pvtValue);
+void __RPC_STUB IWebBrowserApp_GetProperty_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowserApp_get_Name_Proxy(
+    IWebBrowserApp* This,
+    BSTR *Name);
+void __RPC_STUB IWebBrowserApp_get_Name_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowserApp_get_HWND_Proxy(
+    IWebBrowserApp* This,
+    SHANDLE_PTR *pHWND);
+void __RPC_STUB IWebBrowserApp_get_HWND_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowserApp_get_FullName_Proxy(
+    IWebBrowserApp* This,
+    BSTR *FullName);
+void __RPC_STUB IWebBrowserApp_get_FullName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowserApp_get_Path_Proxy(
+    IWebBrowserApp* This,
+    BSTR *Path);
+void __RPC_STUB IWebBrowserApp_get_Path_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowserApp_get_Visible_Proxy(
+    IWebBrowserApp* This,
+    VARIANT_BOOL *pBool);
+void __RPC_STUB IWebBrowserApp_get_Visible_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowserApp_put_Visible_Proxy(
+    IWebBrowserApp* This,
+    VARIANT_BOOL Value);
+void __RPC_STUB IWebBrowserApp_put_Visible_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowserApp_get_StatusBar_Proxy(
+    IWebBrowserApp* This,
+    VARIANT_BOOL *pBool);
+void __RPC_STUB IWebBrowserApp_get_StatusBar_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowserApp_put_StatusBar_Proxy(
+    IWebBrowserApp* This,
+    VARIANT_BOOL Value);
+void __RPC_STUB IWebBrowserApp_put_StatusBar_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowserApp_get_StatusText_Proxy(
+    IWebBrowserApp* This,
+    BSTR *StatusText);
+void __RPC_STUB IWebBrowserApp_get_StatusText_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowserApp_put_StatusText_Proxy(
+    IWebBrowserApp* This,
+    BSTR StatusText);
+void __RPC_STUB IWebBrowserApp_put_StatusText_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowserApp_get_ToolBar_Proxy(
+    IWebBrowserApp* This,
+    int *Value);
+void __RPC_STUB IWebBrowserApp_get_ToolBar_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowserApp_put_ToolBar_Proxy(
+    IWebBrowserApp* This,
+    int Value);
+void __RPC_STUB IWebBrowserApp_put_ToolBar_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowserApp_get_MenuBar_Proxy(
+    IWebBrowserApp* This,
+    VARIANT_BOOL *Value);
+void __RPC_STUB IWebBrowserApp_get_MenuBar_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowserApp_put_MenuBar_Proxy(
+    IWebBrowserApp* This,
+    VARIANT_BOOL Value);
+void __RPC_STUB IWebBrowserApp_put_MenuBar_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowserApp_get_FullScreen_Proxy(
+    IWebBrowserApp* This,
+    VARIANT_BOOL *pbFullScreen);
+void __RPC_STUB IWebBrowserApp_get_FullScreen_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowserApp_put_FullScreen_Proxy(
+    IWebBrowserApp* This,
+    VARIANT_BOOL bFullScreen);
+void __RPC_STUB IWebBrowserApp_put_FullScreen_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWebBrowserApp_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWebBrowser2 interface
+ */
 #ifndef __IWebBrowser2_INTERFACE_DEFINED__
 #define __IWebBrowser2_INTERFACE_DEFINED__
-  EXTERN_C const IID IID_IWebBrowser2;
+
+DEFINE_GUID(IID_IWebBrowser2, 0xd30c1661, 0xcdaf, 0x11d0, 0x8a,0x3e, 0x00,0xc0,0x4f,0xc9,0xe2,0x6e);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-  struct IWebBrowser2 : public IWebBrowserApp {
-  public:
-    virtual HRESULT WINAPI Navigate2(VARIANT *URL,VARIANT *Flags,VARIANT *TargetFrameName,VARIANT *PostData,VARIANT *Headers) = 0;
-    virtual HRESULT WINAPI QueryStatusWB(OLECMDID cmdID,OLECMDF *pcmdf) = 0;
-    virtual HRESULT WINAPI ExecWB(OLECMDID cmdID,OLECMDEXECOPT cmdexecopt,VARIANT *pvaIn,VARIANT *pvaOut) = 0;
-    virtual HRESULT WINAPI ShowBrowserBar(VARIANT *pvaClsid,VARIANT *pvarShow,VARIANT *pvarSize) = 0;
-    virtual HRESULT WINAPI get_ReadyState(READYSTATE *plReadyState) = 0;
-    virtual HRESULT WINAPI get_Offline(VARIANT_BOOL *pbOffline) = 0;
-    virtual HRESULT WINAPI put_Offline(VARIANT_BOOL bOffline) = 0;
-    virtual HRESULT WINAPI get_Silent(VARIANT_BOOL *pbSilent) = 0;
-    virtual HRESULT WINAPI put_Silent(VARIANT_BOOL bSilent) = 0;
-    virtual HRESULT WINAPI get_RegisterAsBrowser(VARIANT_BOOL *pbRegister) = 0;
-    virtual HRESULT WINAPI put_RegisterAsBrowser(VARIANT_BOOL bRegister) = 0;
-    virtual HRESULT WINAPI get_RegisterAsDropTarget(VARIANT_BOOL *pbRegister) = 0;
-    virtual HRESULT WINAPI put_RegisterAsDropTarget(VARIANT_BOOL bRegister) = 0;
-    virtual HRESULT WINAPI get_TheaterMode(VARIANT_BOOL *pbRegister) = 0;
-    virtual HRESULT WINAPI put_TheaterMode(VARIANT_BOOL bRegister) = 0;
-    virtual HRESULT WINAPI get_AddressBar(VARIANT_BOOL *Value) = 0;
-    virtual HRESULT WINAPI put_AddressBar(VARIANT_BOOL Value) = 0;
-    virtual HRESULT WINAPI get_Resizable(VARIANT_BOOL *Value) = 0;
-    virtual HRESULT WINAPI put_Resizable(VARIANT_BOOL Value) = 0;
-  };
+MIDL_INTERFACE("d30c1661-cdaf-11d0-8a3e-00c04fc9e26e")
+IWebBrowser2 : public IWebBrowserApp
+{
+    virtual HRESULT STDMETHODCALLTYPE Navigate2(
+        VARIANT *URL,
+        VARIANT *Flags,
+        VARIANT *TargetFrameName,
+        VARIANT *PostData,
+        VARIANT *Headers) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE QueryStatusWB(
+        OLECMDID cmdID,
+        OLECMDF *pcmdf) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ExecWB(
+        OLECMDID cmdID,
+        OLECMDEXECOPT cmdexecopt,
+        VARIANT *pvaIn,
+        VARIANT *pvaOut) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ShowBrowserBar(
+        VARIANT *pvaClsid,
+        VARIANT *pvarShow,
+        VARIANT *pvarSize) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ReadyState(
+        READYSTATE *plReadyState) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Offline(
+        VARIANT_BOOL *pbOffline) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Offline(
+        VARIANT_BOOL bOffline) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Silent(
+        VARIANT_BOOL *pbSilent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Silent(
+        VARIANT_BOOL bSilent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_RegisterAsBrowser(
+        VARIANT_BOOL *pbRegister) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_RegisterAsBrowser(
+        VARIANT_BOOL bRegister) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_RegisterAsDropTarget(
+        VARIANT_BOOL *pbRegister) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_RegisterAsDropTarget(
+        VARIANT_BOOL bRegister) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_TheaterMode(
+        VARIANT_BOOL *pbRegister) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_TheaterMode(
+        VARIANT_BOOL bRegister) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_AddressBar(
+        VARIANT_BOOL *Value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_AddressBar(
+        VARIANT_BOOL Value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Resizable(
+        VARIANT_BOOL *Value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Resizable(
+        VARIANT_BOOL Value) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IWebBrowser2, 0xd30c1661, 0xcdaf, 0x11d0, 0x8a,0x3e, 0x00,0xc0,0x4f,0xc9,0xe2,0x6e)
+#endif
 #else
-  typedef struct IWebBrowser2Vtbl {
+typedef struct IWebBrowser2Vtbl {
     BEGIN_INTERFACE
-      HRESULT (WINAPI *QueryInterface)(IWebBrowser2 *This,REFIID riid,void **ppvObject);
-      ULONG (WINAPI *AddRef)(IWebBrowser2 *This);
-      ULONG (WINAPI *Release)(IWebBrowser2 *This);
-      HRESULT (WINAPI *GetTypeInfoCount)(IWebBrowser2 *This,UINT *pctinfo);
-      HRESULT (WINAPI *GetTypeInfo)(IWebBrowser2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
-      HRESULT (WINAPI *GetIDsOfNames)(IWebBrowser2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
-      HRESULT (WINAPI *Invoke)(IWebBrowser2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
-      HRESULT (WINAPI *GoBack)(IWebBrowser2 *This);
-      HRESULT (WINAPI *GoForward)(IWebBrowser2 *This);
-      HRESULT (WINAPI *GoHome)(IWebBrowser2 *This);
-      HRESULT (WINAPI *GoSearch)(IWebBrowser2 *This);
-      HRESULT (WINAPI *Navigate)(IWebBrowser2 *This,BSTR URL,VARIANT *Flags,VARIANT *TargetFrameName,VARIANT *PostData,VARIANT *Headers);
-      HRESULT (WINAPI *Refresh)(IWebBrowser2 *This);
-      HRESULT (WINAPI *Refresh2)(IWebBrowser2 *This,VARIANT *Level);
-      HRESULT (WINAPI *Stop)(IWebBrowser2 *This);
-      HRESULT (WINAPI *get_Application)(IWebBrowser2 *This,IDispatch **ppDisp);
-      HRESULT (WINAPI *get_Parent)(IWebBrowser2 *This,IDispatch **ppDisp);
-      HRESULT (WINAPI *get_Container)(IWebBrowser2 *This,IDispatch **ppDisp);
-      HRESULT (WINAPI *get_Document)(IWebBrowser2 *This,IDispatch **ppDisp);
-      HRESULT (WINAPI *get_TopLevelContainer)(IWebBrowser2 *This,VARIANT_BOOL *pBool);
-      HRESULT (WINAPI *get_Type)(IWebBrowser2 *This,BSTR *Type);
-      HRESULT (WINAPI *get_Left)(IWebBrowser2 *This,__LONG32 *pl);
-      HRESULT (WINAPI *put_Left)(IWebBrowser2 *This,__LONG32 Left);
-      HRESULT (WINAPI *get_Top)(IWebBrowser2 *This,__LONG32 *pl);
-      HRESULT (WINAPI *put_Top)(IWebBrowser2 *This,__LONG32 Top);
-      HRESULT (WINAPI *get_Width)(IWebBrowser2 *This,__LONG32 *pl);
-      HRESULT (WINAPI *put_Width)(IWebBrowser2 *This,__LONG32 Width);
-      HRESULT (WINAPI *get_Height)(IWebBrowser2 *This,__LONG32 *pl);
-      HRESULT (WINAPI *put_Height)(IWebBrowser2 *This,__LONG32 Height);
-      HRESULT (WINAPI *get_LocationName)(IWebBrowser2 *This,BSTR *LocationName);
-      HRESULT (WINAPI *get_LocationURL)(IWebBrowser2 *This,BSTR *LocationURL);
-      HRESULT (WINAPI *get_Busy)(IWebBrowser2 *This,VARIANT_BOOL *pBool);
-      HRESULT (WINAPI *Quit)(IWebBrowser2 *This);
-      HRESULT (WINAPI *ClientToWindow)(IWebBrowser2 *This,int *pcx,int *pcy);
-      HRESULT (WINAPI *PutProperty)(IWebBrowser2 *This,BSTR Property,VARIANT vtValue);
-      HRESULT (WINAPI *GetProperty)(IWebBrowser2 *This,BSTR Property,VARIANT *pvtValue);
-      HRESULT (WINAPI *get_Name)(IWebBrowser2 *This,BSTR *Name);
-      HRESULT (WINAPI *get_HWND)(IWebBrowser2 *This,SHANDLE_PTR *pHWND);
-      HRESULT (WINAPI *get_FullName)(IWebBrowser2 *This,BSTR *FullName);
-      HRESULT (WINAPI *get_Path)(IWebBrowser2 *This,BSTR *Path);
-      HRESULT (WINAPI *get_Visible)(IWebBrowser2 *This,VARIANT_BOOL *pBool);
-      HRESULT (WINAPI *put_Visible)(IWebBrowser2 *This,VARIANT_BOOL Value);
-      HRESULT (WINAPI *get_StatusBar)(IWebBrowser2 *This,VARIANT_BOOL *pBool);
-      HRESULT (WINAPI *put_StatusBar)(IWebBrowser2 *This,VARIANT_BOOL Value);
-      HRESULT (WINAPI *get_StatusText)(IWebBrowser2 *This,BSTR *StatusText);
-      HRESULT (WINAPI *put_StatusText)(IWebBrowser2 *This,BSTR StatusText);
-      HRESULT (WINAPI *get_ToolBar)(IWebBrowser2 *This,int *Value);
-      HRESULT (WINAPI *put_ToolBar)(IWebBrowser2 *This,int Value);
-      HRESULT (WINAPI *get_MenuBar)(IWebBrowser2 *This,VARIANT_BOOL *Value);
-      HRESULT (WINAPI *put_MenuBar)(IWebBrowser2 *This,VARIANT_BOOL Value);
-      HRESULT (WINAPI *get_FullScreen)(IWebBrowser2 *This,VARIANT_BOOL *pbFullScreen);
-      HRESULT (WINAPI *put_FullScreen)(IWebBrowser2 *This,VARIANT_BOOL bFullScreen);
-      HRESULT (WINAPI *Navigate2)(IWebBrowser2 *This,VARIANT *URL,VARIANT *Flags,VARIANT *TargetFrameName,VARIANT *PostData,VARIANT *Headers);
-      HRESULT (WINAPI *QueryStatusWB)(IWebBrowser2 *This,OLECMDID cmdID,OLECMDF *pcmdf);
-      HRESULT (WINAPI *ExecWB)(IWebBrowser2 *This,OLECMDID cmdID,OLECMDEXECOPT cmdexecopt,VARIANT *pvaIn,VARIANT *pvaOut);
-      HRESULT (WINAPI *ShowBrowserBar)(IWebBrowser2 *This,VARIANT *pvaClsid,VARIANT *pvarShow,VARIANT *pvarSize);
-      HRESULT (WINAPI *get_ReadyState)(IWebBrowser2 *This,READYSTATE *plReadyState);
-      HRESULT (WINAPI *get_Offline)(IWebBrowser2 *This,VARIANT_BOOL *pbOffline);
-      HRESULT (WINAPI *put_Offline)(IWebBrowser2 *This,VARIANT_BOOL bOffline);
-      HRESULT (WINAPI *get_Silent)(IWebBrowser2 *This,VARIANT_BOOL *pbSilent);
-      HRESULT (WINAPI *put_Silent)(IWebBrowser2 *This,VARIANT_BOOL bSilent);
-      HRESULT (WINAPI *get_RegisterAsBrowser)(IWebBrowser2 *This,VARIANT_BOOL *pbRegister);
-      HRESULT (WINAPI *put_RegisterAsBrowser)(IWebBrowser2 *This,VARIANT_BOOL bRegister);
-      HRESULT (WINAPI *get_RegisterAsDropTarget)(IWebBrowser2 *This,VARIANT_BOOL *pbRegister);
-      HRESULT (WINAPI *put_RegisterAsDropTarget)(IWebBrowser2 *This,VARIANT_BOOL bRegister);
-      HRESULT (WINAPI *get_TheaterMode)(IWebBrowser2 *This,VARIANT_BOOL *pbRegister);
-      HRESULT (WINAPI *put_TheaterMode)(IWebBrowser2 *This,VARIANT_BOOL bRegister);
-      HRESULT (WINAPI *get_AddressBar)(IWebBrowser2 *This,VARIANT_BOOL *Value);
-      HRESULT (WINAPI *put_AddressBar)(IWebBrowser2 *This,VARIANT_BOOL Value);
-      HRESULT (WINAPI *get_Resizable)(IWebBrowser2 *This,VARIANT_BOOL *Value);
-      HRESULT (WINAPI *put_Resizable)(IWebBrowser2 *This,VARIANT_BOOL Value);
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWebBrowser2* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWebBrowser2* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWebBrowser2* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IWebBrowser2* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IWebBrowser2* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IWebBrowser2* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IWebBrowser2* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IWebBrowser methods ***/
+    HRESULT (STDMETHODCALLTYPE *GoBack)(
+        IWebBrowser2* This);
+
+    HRESULT (STDMETHODCALLTYPE *GoForward)(
+        IWebBrowser2* This);
+
+    HRESULT (STDMETHODCALLTYPE *GoHome)(
+        IWebBrowser2* This);
+
+    HRESULT (STDMETHODCALLTYPE *GoSearch)(
+        IWebBrowser2* This);
+
+    HRESULT (STDMETHODCALLTYPE *Navigate)(
+        IWebBrowser2* This,
+        BSTR URL,
+        VARIANT *Flags,
+        VARIANT *TargetFrameName,
+        VARIANT *PostData,
+        VARIANT *Headers);
+
+    HRESULT (STDMETHODCALLTYPE *Refresh)(
+        IWebBrowser2* This);
+
+    HRESULT (STDMETHODCALLTYPE *Refresh2)(
+        IWebBrowser2* This,
+        VARIANT *Level);
+
+    HRESULT (STDMETHODCALLTYPE *Stop)(
+        IWebBrowser2* This);
+
+    HRESULT (STDMETHODCALLTYPE *get_Application)(
+        IWebBrowser2* This,
+        IDispatch **ppDisp);
+
+    HRESULT (STDMETHODCALLTYPE *get_Parent)(
+        IWebBrowser2* This,
+        IDispatch **ppDisp);
+
+    HRESULT (STDMETHODCALLTYPE *get_Container)(
+        IWebBrowser2* This,
+        IDispatch **ppDisp);
+
+    HRESULT (STDMETHODCALLTYPE *get_Document)(
+        IWebBrowser2* This,
+        IDispatch **ppDisp);
+
+    HRESULT (STDMETHODCALLTYPE *get_TopLevelContainer)(
+        IWebBrowser2* This,
+        VARIANT_BOOL *pBool);
+
+    HRESULT (STDMETHODCALLTYPE *get_Type)(
+        IWebBrowser2* This,
+        BSTR *Type);
+
+    HRESULT (STDMETHODCALLTYPE *get_Left)(
+        IWebBrowser2* This,
+        LONG *pl);
+
+    HRESULT (STDMETHODCALLTYPE *put_Left)(
+        IWebBrowser2* This,
+        LONG Left);
+
+    HRESULT (STDMETHODCALLTYPE *get_Top)(
+        IWebBrowser2* This,
+        LONG *pl);
+
+    HRESULT (STDMETHODCALLTYPE *put_Top)(
+        IWebBrowser2* This,
+        LONG Top);
+
+    HRESULT (STDMETHODCALLTYPE *get_Width)(
+        IWebBrowser2* This,
+        LONG *pl);
+
+    HRESULT (STDMETHODCALLTYPE *put_Width)(
+        IWebBrowser2* This,
+        LONG Width);
+
+    HRESULT (STDMETHODCALLTYPE *get_Height)(
+        IWebBrowser2* This,
+        LONG *pl);
+
+    HRESULT (STDMETHODCALLTYPE *put_Height)(
+        IWebBrowser2* This,
+        LONG Height);
+
+    HRESULT (STDMETHODCALLTYPE *get_LocationName)(
+        IWebBrowser2* This,
+        BSTR *LocationName);
+
+    HRESULT (STDMETHODCALLTYPE *get_LocationURL)(
+        IWebBrowser2* This,
+        BSTR *LocationURL);
+
+    HRESULT (STDMETHODCALLTYPE *get_Busy)(
+        IWebBrowser2* This,
+        VARIANT_BOOL *pBool);
+
+    /*** IWebBrowserApp methods ***/
+    HRESULT (STDMETHODCALLTYPE *Quit)(
+        IWebBrowser2* This);
+
+    HRESULT (STDMETHODCALLTYPE *ClientToWindow)(
+        IWebBrowser2* This,
+        int *pcx,
+        int *pcy);
+
+    HRESULT (STDMETHODCALLTYPE *PutProperty)(
+        IWebBrowser2* This,
+        BSTR Property,
+        VARIANT vtValue);
+
+    HRESULT (STDMETHODCALLTYPE *GetProperty)(
+        IWebBrowser2* This,
+        BSTR Property,
+        VARIANT *pvtValue);
+
+    HRESULT (STDMETHODCALLTYPE *get_Name)(
+        IWebBrowser2* This,
+        BSTR *Name);
+
+    HRESULT (STDMETHODCALLTYPE *get_HWND)(
+        IWebBrowser2* This,
+        SHANDLE_PTR *pHWND);
+
+    HRESULT (STDMETHODCALLTYPE *get_FullName)(
+        IWebBrowser2* This,
+        BSTR *FullName);
+
+    HRESULT (STDMETHODCALLTYPE *get_Path)(
+        IWebBrowser2* This,
+        BSTR *Path);
+
+    HRESULT (STDMETHODCALLTYPE *get_Visible)(
+        IWebBrowser2* This,
+        VARIANT_BOOL *pBool);
+
+    HRESULT (STDMETHODCALLTYPE *put_Visible)(
+        IWebBrowser2* This,
+        VARIANT_BOOL Value);
+
+    HRESULT (STDMETHODCALLTYPE *get_StatusBar)(
+        IWebBrowser2* This,
+        VARIANT_BOOL *pBool);
+
+    HRESULT (STDMETHODCALLTYPE *put_StatusBar)(
+        IWebBrowser2* This,
+        VARIANT_BOOL Value);
+
+    HRESULT (STDMETHODCALLTYPE *get_StatusText)(
+        IWebBrowser2* This,
+        BSTR *StatusText);
+
+    HRESULT (STDMETHODCALLTYPE *put_StatusText)(
+        IWebBrowser2* This,
+        BSTR StatusText);
+
+    HRESULT (STDMETHODCALLTYPE *get_ToolBar)(
+        IWebBrowser2* This,
+        int *Value);
+
+    HRESULT (STDMETHODCALLTYPE *put_ToolBar)(
+        IWebBrowser2* This,
+        int Value);
+
+    HRESULT (STDMETHODCALLTYPE *get_MenuBar)(
+        IWebBrowser2* This,
+        VARIANT_BOOL *Value);
+
+    HRESULT (STDMETHODCALLTYPE *put_MenuBar)(
+        IWebBrowser2* This,
+        VARIANT_BOOL Value);
+
+    HRESULT (STDMETHODCALLTYPE *get_FullScreen)(
+        IWebBrowser2* This,
+        VARIANT_BOOL *pbFullScreen);
+
+    HRESULT (STDMETHODCALLTYPE *put_FullScreen)(
+        IWebBrowser2* This,
+        VARIANT_BOOL bFullScreen);
+
+    /*** IWebBrowser2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *Navigate2)(
+        IWebBrowser2* This,
+        VARIANT *URL,
+        VARIANT *Flags,
+        VARIANT *TargetFrameName,
+        VARIANT *PostData,
+        VARIANT *Headers);
+
+    HRESULT (STDMETHODCALLTYPE *QueryStatusWB)(
+        IWebBrowser2* This,
+        OLECMDID cmdID,
+        OLECMDF *pcmdf);
+
+    HRESULT (STDMETHODCALLTYPE *ExecWB)(
+        IWebBrowser2* This,
+        OLECMDID cmdID,
+        OLECMDEXECOPT cmdexecopt,
+        VARIANT *pvaIn,
+        VARIANT *pvaOut);
+
+    HRESULT (STDMETHODCALLTYPE *ShowBrowserBar)(
+        IWebBrowser2* This,
+        VARIANT *pvaClsid,
+        VARIANT *pvarShow,
+        VARIANT *pvarSize);
+
+    HRESULT (STDMETHODCALLTYPE *get_ReadyState)(
+        IWebBrowser2* This,
+        READYSTATE *plReadyState);
+
+    HRESULT (STDMETHODCALLTYPE *get_Offline)(
+        IWebBrowser2* This,
+        VARIANT_BOOL *pbOffline);
+
+    HRESULT (STDMETHODCALLTYPE *put_Offline)(
+        IWebBrowser2* This,
+        VARIANT_BOOL bOffline);
+
+    HRESULT (STDMETHODCALLTYPE *get_Silent)(
+        IWebBrowser2* This,
+        VARIANT_BOOL *pbSilent);
+
+    HRESULT (STDMETHODCALLTYPE *put_Silent)(
+        IWebBrowser2* This,
+        VARIANT_BOOL bSilent);
+
+    HRESULT (STDMETHODCALLTYPE *get_RegisterAsBrowser)(
+        IWebBrowser2* This,
+        VARIANT_BOOL *pbRegister);
+
+    HRESULT (STDMETHODCALLTYPE *put_RegisterAsBrowser)(
+        IWebBrowser2* This,
+        VARIANT_BOOL bRegister);
+
+    HRESULT (STDMETHODCALLTYPE *get_RegisterAsDropTarget)(
+        IWebBrowser2* This,
+        VARIANT_BOOL *pbRegister);
+
+    HRESULT (STDMETHODCALLTYPE *put_RegisterAsDropTarget)(
+        IWebBrowser2* This,
+        VARIANT_BOOL bRegister);
+
+    HRESULT (STDMETHODCALLTYPE *get_TheaterMode)(
+        IWebBrowser2* This,
+        VARIANT_BOOL *pbRegister);
+
+    HRESULT (STDMETHODCALLTYPE *put_TheaterMode)(
+        IWebBrowser2* This,
+        VARIANT_BOOL bRegister);
+
+    HRESULT (STDMETHODCALLTYPE *get_AddressBar)(
+        IWebBrowser2* This,
+        VARIANT_BOOL *Value);
+
+    HRESULT (STDMETHODCALLTYPE *put_AddressBar)(
+        IWebBrowser2* This,
+        VARIANT_BOOL Value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Resizable)(
+        IWebBrowser2* This,
+        VARIANT_BOOL *Value);
+
+    HRESULT (STDMETHODCALLTYPE *put_Resizable)(
+        IWebBrowser2* This,
+        VARIANT_BOOL Value);
+
     END_INTERFACE
-  } IWebBrowser2Vtbl;
-  struct IWebBrowser2 {
-    CONST_VTBL struct IWebBrowser2Vtbl *lpVtbl;
-  };
+} IWebBrowser2Vtbl;
+interface IWebBrowser2 {
+    CONST_VTBL IWebBrowser2Vtbl* lpVtbl;
+};
+
 #ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
 #define IWebBrowser2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define IWebBrowser2_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define IWebBrowser2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
 #define IWebBrowser2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
 #define IWebBrowser2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
 #define IWebBrowser2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
 #define IWebBrowser2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IWebBrowser methods ***/
 #define IWebBrowser2_GoBack(This) (This)->lpVtbl->GoBack(This)
 #define IWebBrowser2_GoForward(This) (This)->lpVtbl->GoForward(This)
 #define IWebBrowser2_GoHome(This) (This)->lpVtbl->GoHome(This)
@@ -747,6 +2084,7 @@
 #define IWebBrowser2_get_LocationName(This,LocationName) (This)->lpVtbl->get_LocationName(This,LocationName)
 #define IWebBrowser2_get_LocationURL(This,LocationURL) (This)->lpVtbl->get_LocationURL(This,LocationURL)
 #define IWebBrowser2_get_Busy(This,pBool) (This)->lpVtbl->get_Busy(This,pBool)
+/*** IWebBrowserApp methods ***/
 #define IWebBrowser2_Quit(This) (This)->lpVtbl->Quit(This)
 #define IWebBrowser2_ClientToWindow(This,pcx,pcy) (This)->lpVtbl->ClientToWindow(This,pcx,pcy)
 #define IWebBrowser2_PutProperty(This,Property,vtValue) (This)->lpVtbl->PutProperty(This,Property,vtValue)
@@ -767,6 +2105,7 @@
 #define IWebBrowser2_put_MenuBar(This,Value) (This)->lpVtbl->put_MenuBar(This,Value)
 #define IWebBrowser2_get_FullScreen(This,pbFullScreen) (This)->lpVtbl->get_FullScreen(This,pbFullScreen)
 #define IWebBrowser2_put_FullScreen(This,bFullScreen) (This)->lpVtbl->put_FullScreen(This,bFullScreen)
+/*** IWebBrowser2 methods ***/
 #define IWebBrowser2_Navigate2(This,URL,Flags,TargetFrameName,PostData,Headers) (This)->lpVtbl->Navigate2(This,URL,Flags,TargetFrameName,PostData,Headers)
 #define IWebBrowser2_QueryStatusWB(This,cmdID,pcmdf) (This)->lpVtbl->QueryStatusWB(This,cmdID,pcmdf)
 #define IWebBrowser2_ExecWB(This,cmdID,cmdexecopt,pvaIn,pvaOut) (This)->lpVtbl->ExecWB(This,cmdID,cmdexecopt,pvaIn,pvaOut)
@@ -786,187 +2125,879 @@
 #define IWebBrowser2_put_AddressBar(This,Value) (This)->lpVtbl->put_AddressBar(This,Value)
 #define IWebBrowser2_get_Resizable(This,Value) (This)->lpVtbl->get_Resizable(This,Value)
 #define IWebBrowser2_put_Resizable(This,Value) (This)->lpVtbl->put_Resizable(This,Value)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IWebBrowser2_QueryInterface(IWebBrowser2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IWebBrowser2_AddRef(IWebBrowser2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IWebBrowser2_Release(IWebBrowser2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IWebBrowser2_GetTypeInfoCount(IWebBrowser2* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IWebBrowser2_GetTypeInfo(IWebBrowser2* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IWebBrowser2_GetIDsOfNames(IWebBrowser2* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IWebBrowser2_Invoke(IWebBrowser2* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IWebBrowser methods ***/
+static FORCEINLINE HRESULT IWebBrowser2_GoBack(IWebBrowser2* This) {
+    return This->lpVtbl->GoBack(This);
+}
+static FORCEINLINE HRESULT IWebBrowser2_GoForward(IWebBrowser2* This) {
+    return This->lpVtbl->GoForward(This);
+}
+static FORCEINLINE HRESULT IWebBrowser2_GoHome(IWebBrowser2* This) {
+    return This->lpVtbl->GoHome(This);
+}
+static FORCEINLINE HRESULT IWebBrowser2_GoSearch(IWebBrowser2* This) {
+    return This->lpVtbl->GoSearch(This);
+}
+static FORCEINLINE HRESULT IWebBrowser2_Navigate(IWebBrowser2* This,BSTR URL,VARIANT *Flags,VARIANT *TargetFrameName,VARIANT *PostData,VARIANT *Headers) {
+    return This->lpVtbl->Navigate(This,URL,Flags,TargetFrameName,PostData,Headers);
+}
+static FORCEINLINE HRESULT IWebBrowser2_Refresh(IWebBrowser2* This) {
+    return This->lpVtbl->Refresh(This);
+}
+static FORCEINLINE HRESULT IWebBrowser2_Refresh2(IWebBrowser2* This,VARIANT *Level) {
+    return This->lpVtbl->Refresh2(This,Level);
+}
+static FORCEINLINE HRESULT IWebBrowser2_Stop(IWebBrowser2* This) {
+    return This->lpVtbl->Stop(This);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_Application(IWebBrowser2* This,IDispatch **ppDisp) {
+    return This->lpVtbl->get_Application(This,ppDisp);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_Parent(IWebBrowser2* This,IDispatch **ppDisp) {
+    return This->lpVtbl->get_Parent(This,ppDisp);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_Container(IWebBrowser2* This,IDispatch **ppDisp) {
+    return This->lpVtbl->get_Container(This,ppDisp);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_Document(IWebBrowser2* This,IDispatch **ppDisp) {
+    return This->lpVtbl->get_Document(This,ppDisp);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_TopLevelContainer(IWebBrowser2* This,VARIANT_BOOL *pBool) {
+    return This->lpVtbl->get_TopLevelContainer(This,pBool);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_Type(IWebBrowser2* This,BSTR *Type) {
+    return This->lpVtbl->get_Type(This,Type);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_Left(IWebBrowser2* This,LONG *pl) {
+    return This->lpVtbl->get_Left(This,pl);
+}
+static FORCEINLINE HRESULT IWebBrowser2_put_Left(IWebBrowser2* This,LONG Left) {
+    return This->lpVtbl->put_Left(This,Left);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_Top(IWebBrowser2* This,LONG *pl) {
+    return This->lpVtbl->get_Top(This,pl);
+}
+static FORCEINLINE HRESULT IWebBrowser2_put_Top(IWebBrowser2* This,LONG Top) {
+    return This->lpVtbl->put_Top(This,Top);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_Width(IWebBrowser2* This,LONG *pl) {
+    return This->lpVtbl->get_Width(This,pl);
+}
+static FORCEINLINE HRESULT IWebBrowser2_put_Width(IWebBrowser2* This,LONG Width) {
+    return This->lpVtbl->put_Width(This,Width);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_Height(IWebBrowser2* This,LONG *pl) {
+    return This->lpVtbl->get_Height(This,pl);
+}
+static FORCEINLINE HRESULT IWebBrowser2_put_Height(IWebBrowser2* This,LONG Height) {
+    return This->lpVtbl->put_Height(This,Height);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_LocationName(IWebBrowser2* This,BSTR *LocationName) {
+    return This->lpVtbl->get_LocationName(This,LocationName);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_LocationURL(IWebBrowser2* This,BSTR *LocationURL) {
+    return This->lpVtbl->get_LocationURL(This,LocationURL);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_Busy(IWebBrowser2* This,VARIANT_BOOL *pBool) {
+    return This->lpVtbl->get_Busy(This,pBool);
+}
+/*** IWebBrowserApp methods ***/
+static FORCEINLINE HRESULT IWebBrowser2_Quit(IWebBrowser2* This) {
+    return This->lpVtbl->Quit(This);
+}
+static FORCEINLINE HRESULT IWebBrowser2_ClientToWindow(IWebBrowser2* This,int *pcx,int *pcy) {
+    return This->lpVtbl->ClientToWindow(This,pcx,pcy);
+}
+static FORCEINLINE HRESULT IWebBrowser2_PutProperty(IWebBrowser2* This,BSTR Property,VARIANT vtValue) {
+    return This->lpVtbl->PutProperty(This,Property,vtValue);
+}
+static FORCEINLINE HRESULT IWebBrowser2_GetProperty(IWebBrowser2* This,BSTR Property,VARIANT *pvtValue) {
+    return This->lpVtbl->GetProperty(This,Property,pvtValue);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_Name(IWebBrowser2* This,BSTR *Name) {
+    return This->lpVtbl->get_Name(This,Name);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_HWND(IWebBrowser2* This,SHANDLE_PTR *pHWND) {
+    return This->lpVtbl->get_HWND(This,pHWND);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_FullName(IWebBrowser2* This,BSTR *FullName) {
+    return This->lpVtbl->get_FullName(This,FullName);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_Path(IWebBrowser2* This,BSTR *Path) {
+    return This->lpVtbl->get_Path(This,Path);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_Visible(IWebBrowser2* This,VARIANT_BOOL *pBool) {
+    return This->lpVtbl->get_Visible(This,pBool);
+}
+static FORCEINLINE HRESULT IWebBrowser2_put_Visible(IWebBrowser2* This,VARIANT_BOOL Value) {
+    return This->lpVtbl->put_Visible(This,Value);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_StatusBar(IWebBrowser2* This,VARIANT_BOOL *pBool) {
+    return This->lpVtbl->get_StatusBar(This,pBool);
+}
+static FORCEINLINE HRESULT IWebBrowser2_put_StatusBar(IWebBrowser2* This,VARIANT_BOOL Value) {
+    return This->lpVtbl->put_StatusBar(This,Value);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_StatusText(IWebBrowser2* This,BSTR *StatusText) {
+    return This->lpVtbl->get_StatusText(This,StatusText);
+}
+static FORCEINLINE HRESULT IWebBrowser2_put_StatusText(IWebBrowser2* This,BSTR StatusText) {
+    return This->lpVtbl->put_StatusText(This,StatusText);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_ToolBar(IWebBrowser2* This,int *Value) {
+    return This->lpVtbl->get_ToolBar(This,Value);
+}
+static FORCEINLINE HRESULT IWebBrowser2_put_ToolBar(IWebBrowser2* This,int Value) {
+    return This->lpVtbl->put_ToolBar(This,Value);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_MenuBar(IWebBrowser2* This,VARIANT_BOOL *Value) {
+    return This->lpVtbl->get_MenuBar(This,Value);
+}
+static FORCEINLINE HRESULT IWebBrowser2_put_MenuBar(IWebBrowser2* This,VARIANT_BOOL Value) {
+    return This->lpVtbl->put_MenuBar(This,Value);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_FullScreen(IWebBrowser2* This,VARIANT_BOOL *pbFullScreen) {
+    return This->lpVtbl->get_FullScreen(This,pbFullScreen);
+}
+static FORCEINLINE HRESULT IWebBrowser2_put_FullScreen(IWebBrowser2* This,VARIANT_BOOL bFullScreen) {
+    return This->lpVtbl->put_FullScreen(This,bFullScreen);
+}
+/*** IWebBrowser2 methods ***/
+static FORCEINLINE HRESULT IWebBrowser2_Navigate2(IWebBrowser2* This,VARIANT *URL,VARIANT *Flags,VARIANT *TargetFrameName,VARIANT *PostData,VARIANT *Headers) {
+    return This->lpVtbl->Navigate2(This,URL,Flags,TargetFrameName,PostData,Headers);
+}
+static FORCEINLINE HRESULT IWebBrowser2_QueryStatusWB(IWebBrowser2* This,OLECMDID cmdID,OLECMDF *pcmdf) {
+    return This->lpVtbl->QueryStatusWB(This,cmdID,pcmdf);
+}
+static FORCEINLINE HRESULT IWebBrowser2_ExecWB(IWebBrowser2* This,OLECMDID cmdID,OLECMDEXECOPT cmdexecopt,VARIANT *pvaIn,VARIANT *pvaOut) {
+    return This->lpVtbl->ExecWB(This,cmdID,cmdexecopt,pvaIn,pvaOut);
+}
+static FORCEINLINE HRESULT IWebBrowser2_ShowBrowserBar(IWebBrowser2* This,VARIANT *pvaClsid,VARIANT *pvarShow,VARIANT *pvarSize) {
+    return This->lpVtbl->ShowBrowserBar(This,pvaClsid,pvarShow,pvarSize);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_ReadyState(IWebBrowser2* This,READYSTATE *plReadyState) {
+    return This->lpVtbl->get_ReadyState(This,plReadyState);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_Offline(IWebBrowser2* This,VARIANT_BOOL *pbOffline) {
+    return This->lpVtbl->get_Offline(This,pbOffline);
+}
+static FORCEINLINE HRESULT IWebBrowser2_put_Offline(IWebBrowser2* This,VARIANT_BOOL bOffline) {
+    return This->lpVtbl->put_Offline(This,bOffline);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_Silent(IWebBrowser2* This,VARIANT_BOOL *pbSilent) {
+    return This->lpVtbl->get_Silent(This,pbSilent);
+}
+static FORCEINLINE HRESULT IWebBrowser2_put_Silent(IWebBrowser2* This,VARIANT_BOOL bSilent) {
+    return This->lpVtbl->put_Silent(This,bSilent);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_RegisterAsBrowser(IWebBrowser2* This,VARIANT_BOOL *pbRegister) {
+    return This->lpVtbl->get_RegisterAsBrowser(This,pbRegister);
+}
+static FORCEINLINE HRESULT IWebBrowser2_put_RegisterAsBrowser(IWebBrowser2* This,VARIANT_BOOL bRegister) {
+    return This->lpVtbl->put_RegisterAsBrowser(This,bRegister);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_RegisterAsDropTarget(IWebBrowser2* This,VARIANT_BOOL *pbRegister) {
+    return This->lpVtbl->get_RegisterAsDropTarget(This,pbRegister);
+}
+static FORCEINLINE HRESULT IWebBrowser2_put_RegisterAsDropTarget(IWebBrowser2* This,VARIANT_BOOL bRegister) {
+    return This->lpVtbl->put_RegisterAsDropTarget(This,bRegister);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_TheaterMode(IWebBrowser2* This,VARIANT_BOOL *pbRegister) {
+    return This->lpVtbl->get_TheaterMode(This,pbRegister);
+}
+static FORCEINLINE HRESULT IWebBrowser2_put_TheaterMode(IWebBrowser2* This,VARIANT_BOOL bRegister) {
+    return This->lpVtbl->put_TheaterMode(This,bRegister);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_AddressBar(IWebBrowser2* This,VARIANT_BOOL *Value) {
+    return This->lpVtbl->get_AddressBar(This,Value);
+}
+static FORCEINLINE HRESULT IWebBrowser2_put_AddressBar(IWebBrowser2* This,VARIANT_BOOL Value) {
+    return This->lpVtbl->put_AddressBar(This,Value);
+}
+static FORCEINLINE HRESULT IWebBrowser2_get_Resizable(IWebBrowser2* This,VARIANT_BOOL *Value) {
+    return This->lpVtbl->get_Resizable(This,Value);
+}
+static FORCEINLINE HRESULT IWebBrowser2_put_Resizable(IWebBrowser2* This,VARIANT_BOOL Value) {
+    return This->lpVtbl->put_Resizable(This,Value);
+}
 #endif
 #endif
-  HRESULT WINAPI IWebBrowser2_Navigate2_Proxy(IWebBrowser2 *This,VARIANT *URL,VARIANT *Flags,VARIANT *TargetFrameName,VARIANT *PostData,VARIANT *Headers);
-  void __RPC_STUB IWebBrowser2_Navigate2_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser2_QueryStatusWB_Proxy(IWebBrowser2 *This,OLECMDID cmdID,OLECMDF *pcmdf);
-  void __RPC_STUB IWebBrowser2_QueryStatusWB_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser2_ExecWB_Proxy(IWebBrowser2 *This,OLECMDID cmdID,OLECMDEXECOPT cmdexecopt,VARIANT *pvaIn,VARIANT *pvaOut);
-  void __RPC_STUB IWebBrowser2_ExecWB_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser2_ShowBrowserBar_Proxy(IWebBrowser2 *This,VARIANT *pvaClsid,VARIANT *pvarShow,VARIANT *pvarSize);
-  void __RPC_STUB IWebBrowser2_ShowBrowserBar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser2_get_ReadyState_Proxy(IWebBrowser2 *This,READYSTATE *plReadyState);
-  void __RPC_STUB IWebBrowser2_get_ReadyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser2_get_Offline_Proxy(IWebBrowser2 *This,VARIANT_BOOL *pbOffline);
-  void __RPC_STUB IWebBrowser2_get_Offline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser2_put_Offline_Proxy(IWebBrowser2 *This,VARIANT_BOOL bOffline);
-  void __RPC_STUB IWebBrowser2_put_Offline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser2_get_Silent_Proxy(IWebBrowser2 *This,VARIANT_BOOL *pbSilent);
-  void __RPC_STUB IWebBrowser2_get_Silent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser2_put_Silent_Proxy(IWebBrowser2 *This,VARIANT_BOOL bSilent);
-  void __RPC_STUB IWebBrowser2_put_Silent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser2_get_RegisterAsBrowser_Proxy(IWebBrowser2 *This,VARIANT_BOOL *pbRegister);
-  void __RPC_STUB IWebBrowser2_get_RegisterAsBrowser_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser2_put_RegisterAsBrowser_Proxy(IWebBrowser2 *This,VARIANT_BOOL bRegister);
-  void __RPC_STUB IWebBrowser2_put_RegisterAsBrowser_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser2_get_RegisterAsDropTarget_Proxy(IWebBrowser2 *This,VARIANT_BOOL *pbRegister);
-  void __RPC_STUB IWebBrowser2_get_RegisterAsDropTarget_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser2_put_RegisterAsDropTarget_Proxy(IWebBrowser2 *This,VARIANT_BOOL bRegister);
-  void __RPC_STUB IWebBrowser2_put_RegisterAsDropTarget_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser2_get_TheaterMode_Proxy(IWebBrowser2 *This,VARIANT_BOOL *pbRegister);
-  void __RPC_STUB IWebBrowser2_get_TheaterMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser2_put_TheaterMode_Proxy(IWebBrowser2 *This,VARIANT_BOOL bRegister);
-  void __RPC_STUB IWebBrowser2_put_TheaterMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser2_get_AddressBar_Proxy(IWebBrowser2 *This,VARIANT_BOOL *Value);
-  void __RPC_STUB IWebBrowser2_get_AddressBar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser2_put_AddressBar_Proxy(IWebBrowser2 *This,VARIANT_BOOL Value);
-  void __RPC_STUB IWebBrowser2_put_AddressBar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser2_get_Resizable_Proxy(IWebBrowser2 *This,VARIANT_BOOL *Value);
-  void __RPC_STUB IWebBrowser2_get_Resizable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IWebBrowser2_put_Resizable_Proxy(IWebBrowser2 *This,VARIANT_BOOL Value);
-  void __RPC_STUB IWebBrowser2_put_Resizable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-#endif
 
+#endif
+
+HRESULT STDMETHODCALLTYPE IWebBrowser2_Navigate2_Proxy(
+    IWebBrowser2* This,
+    VARIANT *URL,
+    VARIANT *Flags,
+    VARIANT *TargetFrameName,
+    VARIANT *PostData,
+    VARIANT *Headers);
+void __RPC_STUB IWebBrowser2_Navigate2_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser2_QueryStatusWB_Proxy(
+    IWebBrowser2* This,
+    OLECMDID cmdID,
+    OLECMDF *pcmdf);
+void __RPC_STUB IWebBrowser2_QueryStatusWB_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser2_ExecWB_Proxy(
+    IWebBrowser2* This,
+    OLECMDID cmdID,
+    OLECMDEXECOPT cmdexecopt,
+    VARIANT *pvaIn,
+    VARIANT *pvaOut);
+void __RPC_STUB IWebBrowser2_ExecWB_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser2_ShowBrowserBar_Proxy(
+    IWebBrowser2* This,
+    VARIANT *pvaClsid,
+    VARIANT *pvarShow,
+    VARIANT *pvarSize);
+void __RPC_STUB IWebBrowser2_ShowBrowserBar_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser2_get_ReadyState_Proxy(
+    IWebBrowser2* This,
+    READYSTATE *plReadyState);
+void __RPC_STUB IWebBrowser2_get_ReadyState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser2_get_Offline_Proxy(
+    IWebBrowser2* This,
+    VARIANT_BOOL *pbOffline);
+void __RPC_STUB IWebBrowser2_get_Offline_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser2_put_Offline_Proxy(
+    IWebBrowser2* This,
+    VARIANT_BOOL bOffline);
+void __RPC_STUB IWebBrowser2_put_Offline_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser2_get_Silent_Proxy(
+    IWebBrowser2* This,
+    VARIANT_BOOL *pbSilent);
+void __RPC_STUB IWebBrowser2_get_Silent_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser2_put_Silent_Proxy(
+    IWebBrowser2* This,
+    VARIANT_BOOL bSilent);
+void __RPC_STUB IWebBrowser2_put_Silent_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser2_get_RegisterAsBrowser_Proxy(
+    IWebBrowser2* This,
+    VARIANT_BOOL *pbRegister);
+void __RPC_STUB IWebBrowser2_get_RegisterAsBrowser_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser2_put_RegisterAsBrowser_Proxy(
+    IWebBrowser2* This,
+    VARIANT_BOOL bRegister);
+void __RPC_STUB IWebBrowser2_put_RegisterAsBrowser_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser2_get_RegisterAsDropTarget_Proxy(
+    IWebBrowser2* This,
+    VARIANT_BOOL *pbRegister);
+void __RPC_STUB IWebBrowser2_get_RegisterAsDropTarget_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser2_put_RegisterAsDropTarget_Proxy(
+    IWebBrowser2* This,
+    VARIANT_BOOL bRegister);
+void __RPC_STUB IWebBrowser2_put_RegisterAsDropTarget_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser2_get_TheaterMode_Proxy(
+    IWebBrowser2* This,
+    VARIANT_BOOL *pbRegister);
+void __RPC_STUB IWebBrowser2_get_TheaterMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser2_put_TheaterMode_Proxy(
+    IWebBrowser2* This,
+    VARIANT_BOOL bRegister);
+void __RPC_STUB IWebBrowser2_put_TheaterMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser2_get_AddressBar_Proxy(
+    IWebBrowser2* This,
+    VARIANT_BOOL *Value);
+void __RPC_STUB IWebBrowser2_get_AddressBar_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser2_put_AddressBar_Proxy(
+    IWebBrowser2* This,
+    VARIANT_BOOL Value);
+void __RPC_STUB IWebBrowser2_put_AddressBar_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser2_get_Resizable_Proxy(
+    IWebBrowser2* This,
+    VARIANT_BOOL *Value);
+void __RPC_STUB IWebBrowser2_get_Resizable_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWebBrowser2_put_Resizable_Proxy(
+    IWebBrowser2* This,
+    VARIANT_BOOL Value);
+void __RPC_STUB IWebBrowser2_put_Resizable_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWebBrowser2_INTERFACE_DEFINED__ */
+
+typedef enum SecureLockIconConstants {
+    secureLockIconUnsecure = 0,
+    secureLockIconMixed = 1,
+    secureLockIconSecureUnknownBits = 2,
+    secureLockIconSecure40Bit = 3,
+    secureLockIconSecure56Bit = 4,
+    secureLockIconSecureFortezza = 5,
+    secureLockIconSecure128Bit = 6
+} SecureLockIconConstants;
+/*****************************************************************************
+ * DWebBrowserEvents2 dispinterface
+ */
 #ifndef __DWebBrowserEvents2_DISPINTERFACE_DEFINED__
 #define __DWebBrowserEvents2_DISPINTERFACE_DEFINED__
-  EXTERN_C const IID DIID_DWebBrowserEvents2;
+
+DEFINE_GUID(DIID_DWebBrowserEvents2, 0x34a715a0, 0x6587, 0x11d0, 0x92,0x4a, 0x00,0x20,0xaf,0xc7,0xac,0x4d);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-  struct DWebBrowserEvents2 : public IDispatch {
-  };
+MIDL_INTERFACE("34a715a0-6587-11d0-924a-0020afc7ac4d")
+DWebBrowserEvents2 : public IDispatch
+{
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(DWebBrowserEvents2, 0x34a715a0, 0x6587, 0x11d0, 0x92,0x4a, 0x00,0x20,0xaf,0xc7,0xac,0x4d)
+#endif
 #else
-  typedef struct DWebBrowserEvents2Vtbl {
+typedef struct DWebBrowserEvents2Vtbl {
     BEGIN_INTERFACE
-      HRESULT (WINAPI *QueryInterface)(DWebBrowserEvents2 *This,REFIID riid,void **ppvObject);
-      ULONG (WINAPI *AddRef)(DWebBrowserEvents2 *This);
-      ULONG (WINAPI *Release)(DWebBrowserEvents2 *This);
-      HRESULT (WINAPI *GetTypeInfoCount)(DWebBrowserEvents2 *This,UINT *pctinfo);
-      HRESULT (WINAPI *GetTypeInfo)(DWebBrowserEvents2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
-      HRESULT (WINAPI *GetIDsOfNames)(DWebBrowserEvents2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
-      HRESULT (WINAPI *Invoke)(DWebBrowserEvents2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        DWebBrowserEvents2* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        DWebBrowserEvents2* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        DWebBrowserEvents2* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        DWebBrowserEvents2* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        DWebBrowserEvents2* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        DWebBrowserEvents2* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        DWebBrowserEvents2* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
     END_INTERFACE
-  } DWebBrowserEvents2Vtbl;
-  struct DWebBrowserEvents2 {
-    CONST_VTBL struct DWebBrowserEvents2Vtbl *lpVtbl;
-  };
+} DWebBrowserEvents2Vtbl;
+interface DWebBrowserEvents2 {
+    CONST_VTBL DWebBrowserEvents2Vtbl* lpVtbl;
+};
+
 #ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
 #define DWebBrowserEvents2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define DWebBrowserEvents2_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define DWebBrowserEvents2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
 #define DWebBrowserEvents2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
 #define DWebBrowserEvents2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
 #define DWebBrowserEvents2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
 #define DWebBrowserEvents2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
-#endif
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT DWebBrowserEvents2_QueryInterface(DWebBrowserEvents2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG DWebBrowserEvents2_AddRef(DWebBrowserEvents2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG DWebBrowserEvents2_Release(DWebBrowserEvents2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT DWebBrowserEvents2_GetTypeInfoCount(DWebBrowserEvents2* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT DWebBrowserEvents2_GetTypeInfo(DWebBrowserEvents2* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT DWebBrowserEvents2_GetIDsOfNames(DWebBrowserEvents2* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT DWebBrowserEvents2_Invoke(DWebBrowserEvents2* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
 #endif
 #endif
 
-  EXTERN_C const CLSID CLSID_WebBrowser_V1;
-#ifdef __cplusplus
-  class WebBrowser_V1;
-#endif
-  EXTERN_C const CLSID CLSID_WebBrowser;
-#ifdef __cplusplus
-  class WebBrowser;
-#endif
-  EXTERN_C const CLSID CLSID_InternetExplorer;
-#ifdef __cplusplus
-  class InternetExplorer;
-#endif
-  EXTERN_C const CLSID CLSID_ShellBrowserWindow;
-#ifdef __cplusplus
-  class ShellBrowserWindow;
 #endif
 
+#endif  /* __DWebBrowserEvents2_DISPINTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * WebBrowser_V1 coclass
+ */
+
+DEFINE_GUID(CLSID_WebBrowser_V1, 0xeab22ac3, 0x30c1, 0x11cf, 0xa7,0xeb, 0x00,0x00,0xc0,0x5b,0xae,0x0b);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("eab22ac3-30c1-11cf-a7eb-0000c05bae0b") WebBrowser_V1;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(WebBrowser_V1, 0xeab22ac3, 0x30c1, 0x11cf, 0xa7,0xeb, 0x00,0x00,0xc0,0x5b,0xae,0x0b)
+#endif
+#endif
+
+/*****************************************************************************
+ * WebBrowser coclass
+ */
+
+DEFINE_GUID(CLSID_WebBrowser, 0x8856f961, 0x340a, 0x11d0, 0xa9,0x6b, 0x00,0xc0,0x4f,0xd7,0x05,0xa2);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("8856f961-340a-11d0-a96b-00c04fd705a2") WebBrowser;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(WebBrowser, 0x8856f961, 0x340a, 0x11d0, 0xa9,0x6b, 0x00,0xc0,0x4f,0xd7,0x05,0xa2)
+#endif
+#endif
+
+/*****************************************************************************
+ * InternetExplorer coclass
+ */
+
+DEFINE_GUID(CLSID_InternetExplorer, 0x0002df01, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("0002df01-0000-0000-c000-000000000046") InternetExplorer;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(InternetExplorer, 0x0002df01, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46)
+#endif
+#endif
+
+/*****************************************************************************
+ * ShellBrowserWindow coclass
+ */
+
+DEFINE_GUID(CLSID_ShellBrowserWindow, 0xc08afd90, 0xf2a1, 0x11d1, 0x84,0x55, 0x00,0xa0,0xc9,0x1f,0x38,0x80);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("c08afd90-f2a1-11d1-8455-00a0c91f3880") ShellBrowserWindow;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ShellBrowserWindow, 0xc08afd90, 0xf2a1, 0x11d1, 0x84,0x55, 0x00,0xa0,0xc9,0x1f,0x38,0x80)
+#endif
+#endif
+
+typedef enum ShellWindowTypeConstants {
+    SWC_EXPLORER = 0,
+    SWC_BROWSER = 1,
+    SWC_3RDPARTY = 2,
+    SWC_CALLBACK = 4,
+    SWC_DESKTOP = 8
+} ShellWindowTypeConstants;
+typedef enum ShellWindowFindWindowOptions {
+    SWFO_NEEDDISPATCH = 1,
+    SWFO_INCLUDEPENDING = 2,
+    SWFO_COOKIEPASSED = 4
+} ShellWindowFindWindowOptions;
+/*****************************************************************************
+ * DShellWindowsEvents dispinterface
+ */
 #ifndef __DShellWindowsEvents_DISPINTERFACE_DEFINED__
 #define __DShellWindowsEvents_DISPINTERFACE_DEFINED__
-  EXTERN_C const IID DIID_DShellWindowsEvents;
+
+DEFINE_GUID(DIID_DShellWindowsEvents, 0xfe4106e0, 0x399a, 0x11d0, 0xa4,0x8c, 0x00,0xa0,0xc9,0x0a,0x8f,0x39);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-  struct DShellWindowsEvents : public IDispatch {
-  };
+MIDL_INTERFACE("fe4106e0-399a-11d0-a48c-00a0c90a8f39")
+DShellWindowsEvents : public IDispatch
+{
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(DShellWindowsEvents, 0xfe4106e0, 0x399a, 0x11d0, 0xa4,0x8c, 0x00,0xa0,0xc9,0x0a,0x8f,0x39)
+#endif
 #else
-  typedef struct DShellWindowsEventsVtbl {
+typedef struct DShellWindowsEventsVtbl {
     BEGIN_INTERFACE
-      HRESULT (WINAPI *QueryInterface)(DShellWindowsEvents *This,REFIID riid,void **ppvObject);
-      ULONG (WINAPI *AddRef)(DShellWindowsEvents *This);
-      ULONG (WINAPI *Release)(DShellWindowsEvents *This);
-      HRESULT (WINAPI *GetTypeInfoCount)(DShellWindowsEvents *This,UINT *pctinfo);
-      HRESULT (WINAPI *GetTypeInfo)(DShellWindowsEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
-      HRESULT (WINAPI *GetIDsOfNames)(DShellWindowsEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
-      HRESULT (WINAPI *Invoke)(DShellWindowsEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        DShellWindowsEvents* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        DShellWindowsEvents* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        DShellWindowsEvents* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        DShellWindowsEvents* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        DShellWindowsEvents* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        DShellWindowsEvents* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        DShellWindowsEvents* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
     END_INTERFACE
-  } DShellWindowsEventsVtbl;
-  struct DShellWindowsEvents {
-    CONST_VTBL struct DShellWindowsEventsVtbl *lpVtbl;
-  };
+} DShellWindowsEventsVtbl;
+interface DShellWindowsEvents {
+    CONST_VTBL DShellWindowsEventsVtbl* lpVtbl;
+};
+
 #ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
 #define DShellWindowsEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define DShellWindowsEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define DShellWindowsEvents_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
 #define DShellWindowsEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
 #define DShellWindowsEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
 #define DShellWindowsEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
 #define DShellWindowsEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
-#endif
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT DShellWindowsEvents_QueryInterface(DShellWindowsEvents* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG DShellWindowsEvents_AddRef(DShellWindowsEvents* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG DShellWindowsEvents_Release(DShellWindowsEvents* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT DShellWindowsEvents_GetTypeInfoCount(DShellWindowsEvents* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT DShellWindowsEvents_GetTypeInfo(DShellWindowsEvents* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT DShellWindowsEvents_GetIDsOfNames(DShellWindowsEvents* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT DShellWindowsEvents_Invoke(DShellWindowsEvents* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
 #endif
 #endif
 
+#endif
+
+#endif  /* __DShellWindowsEvents_DISPINTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IShellWindows interface
+ */
 #ifndef __IShellWindows_INTERFACE_DEFINED__
 #define __IShellWindows_INTERFACE_DEFINED__
-  EXTERN_C const IID IID_IShellWindows;
+
+DEFINE_GUID(IID_IShellWindows, 0x85cb6900, 0x4d95, 0x11cf, 0x96,0x0c, 0x00,0x80,0xc7,0xf4,0xee,0x85);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-  struct IShellWindows : public IDispatch {
-  public:
-    virtual HRESULT WINAPI get_Count(__LONG32 *Count) = 0;
-    virtual HRESULT WINAPI Item(VARIANT index,IDispatch **Folder) = 0;
-    virtual HRESULT WINAPI _NewEnum(IUnknown **ppunk) = 0;
-    virtual HRESULT WINAPI Register(IDispatch *pid,__LONG32 hwnd,int swClass,__LONG32 *plCookie) = 0;
-    virtual HRESULT WINAPI RegisterPending(__LONG32 lThreadId,VARIANT *pvarloc,VARIANT *pvarlocRoot,int swClass,__LONG32 *plCookie) = 0;
-    virtual HRESULT WINAPI Revoke(__LONG32 lCookie) = 0;
-    virtual HRESULT WINAPI OnNavigate(__LONG32 lCookie,VARIANT *pvarLoc) = 0;
-    virtual HRESULT WINAPI OnActivated(__LONG32 lCookie,VARIANT_BOOL fActive) = 0;
-    virtual HRESULT WINAPI FindWindowSW(VARIANT *pvarLoc,VARIANT *pvarLocRoot,int swClass,__LONG32 *phwnd,int swfwOptions,IDispatch **ppdispOut) = 0;
-    virtual HRESULT WINAPI OnCreated(__LONG32 lCookie,IUnknown *punk) = 0;
-    virtual HRESULT WINAPI ProcessAttachDetach(VARIANT_BOOL fAttach) = 0;
-  };
+MIDL_INTERFACE("85cb6900-4d95-11cf-960c-0080c7f4ee85")
+IShellWindows : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Count(
+        LONG *Count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Item(
+        VARIANT index,
+        IDispatch **Folder) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE _NewEnum(
+        IUnknown **ppunk) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Register(
+        IDispatch *pid,
+        LONG hWnd,
+        int swClass,
+        LONG *plCookie) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RegisterPending(
+        LONG lThreadId,
+        VARIANT *pvarloc,
+        VARIANT *pvarlocRoot,
+        int swClass,
+        LONG *plCookie) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Revoke(
+        LONG lCookie) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnNavigate(
+        LONG lCookie,
+        VARIANT *pvarLoc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnActivated(
+        LONG lCookie,
+        VARIANT_BOOL fActive) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE FindWindowSW(
+        VARIANT *pvarLoc,
+        VARIANT *pvarLocRoot,
+        int swClass,
+        LONG *phwnd,
+        int swfwOptions,
+        IDispatch **ppdispOut) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnCreated(
+        LONG lCookie,
+        IUnknown *punk) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ProcessAttachDetach(
+        VARIANT_BOOL fAttach) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IShellWindows, 0x85cb6900, 0x4d95, 0x11cf, 0x96,0x0c, 0x00,0x80,0xc7,0xf4,0xee,0x85)
+#endif
 #else
-  typedef struct IShellWindowsVtbl {
+typedef struct IShellWindowsVtbl {
     BEGIN_INTERFACE
-      HRESULT (WINAPI *QueryInterface)(IShellWindows *This,REFIID riid,void **ppvObject);
-      ULONG (WINAPI *AddRef)(IShellWindows *This);
-      ULONG (WINAPI *Release)(IShellWindows *This);
-      HRESULT (WINAPI *GetTypeInfoCount)(IShellWindows *This,UINT *pctinfo);
-      HRESULT (WINAPI *GetTypeInfo)(IShellWindows *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
-      HRESULT (WINAPI *GetIDsOfNames)(IShellWindows *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
-      HRESULT (WINAPI *Invoke)(IShellWindows *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
-      HRESULT (WINAPI *get_Count)(IShellWindows *This,__LONG32 *Count);
-      HRESULT (WINAPI *Item)(IShellWindows *This,VARIANT index,IDispatch **Folder);
-      HRESULT (WINAPI *_NewEnum)(IShellWindows *This,IUnknown **ppunk);
-      HRESULT (WINAPI *Register)(IShellWindows *This,IDispatch *pid,__LONG32 hwnd,int swClass,__LONG32 *plCookie);
-      HRESULT (WINAPI *RegisterPending)(IShellWindows *This,__LONG32 lThreadId,VARIANT *pvarloc,VARIANT *pvarlocRoot,int swClass,__LONG32 *plCookie);
-      HRESULT (WINAPI *Revoke)(IShellWindows *This,__LONG32 lCookie);
-      HRESULT (WINAPI *OnNavigate)(IShellWindows *This,__LONG32 lCookie,VARIANT *pvarLoc);
-      HRESULT (WINAPI *OnActivated)(IShellWindows *This,__LONG32 lCookie,VARIANT_BOOL fActive);
-      HRESULT (WINAPI *FindWindowSW)(IShellWindows *This,VARIANT *pvarLoc,VARIANT *pvarLocRoot,int swClass,__LONG32 *phwnd,int swfwOptions,IDispatch **ppdispOut);
-      HRESULT (WINAPI *OnCreated)(IShellWindows *This,__LONG32 lCookie,IUnknown *punk);
-      HRESULT (WINAPI *ProcessAttachDetach)(IShellWindows *This,VARIANT_BOOL fAttach);
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IShellWindows* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IShellWindows* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IShellWindows* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IShellWindows* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IShellWindows* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IShellWindows* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IShellWindows* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IShellWindows methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Count)(
+        IShellWindows* This,
+        LONG *Count);
+
+    HRESULT (STDMETHODCALLTYPE *Item)(
+        IShellWindows* This,
+        VARIANT index,
+        IDispatch **Folder);
+
+    HRESULT (STDMETHODCALLTYPE *_NewEnum)(
+        IShellWindows* This,
+        IUnknown **ppunk);
+
+    HRESULT (STDMETHODCALLTYPE *Register)(
+        IShellWindows* This,
+        IDispatch *pid,
+        LONG hWnd,
+        int swClass,
+        LONG *plCookie);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterPending)(
+        IShellWindows* This,
+        LONG lThreadId,
+        VARIANT *pvarloc,
+        VARIANT *pvarlocRoot,
+        int swClass,
+        LONG *plCookie);
+
+    HRESULT (STDMETHODCALLTYPE *Revoke)(
+        IShellWindows* This,
+        LONG lCookie);
+
+    HRESULT (STDMETHODCALLTYPE *OnNavigate)(
+        IShellWindows* This,
+        LONG lCookie,
+        VARIANT *pvarLoc);
+
+    HRESULT (STDMETHODCALLTYPE *OnActivated)(
+        IShellWindows* This,
+        LONG lCookie,
+        VARIANT_BOOL fActive);
+
+    HRESULT (STDMETHODCALLTYPE *FindWindowSW)(
+        IShellWindows* This,
+        VARIANT *pvarLoc,
+        VARIANT *pvarLocRoot,
+        int swClass,
+        LONG *phwnd,
+        int swfwOptions,
+        IDispatch **ppdispOut);
+
+    HRESULT (STDMETHODCALLTYPE *OnCreated)(
+        IShellWindows* This,
+        LONG lCookie,
+        IUnknown *punk);
+
+    HRESULT (STDMETHODCALLTYPE *ProcessAttachDetach)(
+        IShellWindows* This,
+        VARIANT_BOOL fAttach);
+
     END_INTERFACE
-  } IShellWindowsVtbl;
-  struct IShellWindows {
-    CONST_VTBL struct IShellWindowsVtbl *lpVtbl;
-  };
+} IShellWindowsVtbl;
+interface IShellWindows {
+    CONST_VTBL IShellWindowsVtbl* lpVtbl;
+};
+
 #ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
 #define IShellWindows_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define IShellWindows_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define IShellWindows_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
 #define IShellWindows_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
 #define IShellWindows_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
 #define IShellWindows_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
 #define IShellWindows_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IShellWindows methods ***/
 #define IShellWindows_get_Count(This,Count) (This)->lpVtbl->get_Count(This,Count)
 #define IShellWindows_Item(This,index,Folder) (This)->lpVtbl->Item(This,index,Folder)
 #define IShellWindows__NewEnum(This,ppunk) (This)->lpVtbl->_NewEnum(This,ppunk)
-#define IShellWindows_Register(This,pid,hwnd,swClass,plCookie) (This)->lpVtbl->Register(This,pid,hwnd,swClass,plCookie)
+#define IShellWindows_Register(This,pid,hWnd,swClass,plCookie) (This)->lpVtbl->Register(This,pid,hWnd,swClass,plCookie)
 #define IShellWindows_RegisterPending(This,lThreadId,pvarloc,pvarlocRoot,swClass,plCookie) (This)->lpVtbl->RegisterPending(This,lThreadId,pvarloc,pvarlocRoot,swClass,plCookie)
 #define IShellWindows_Revoke(This,lCookie) (This)->lpVtbl->Revoke(This,lCookie)
 #define IShellWindows_OnNavigate(This,lCookie,pvarLoc) (This)->lpVtbl->OnNavigate(This,lCookie,pvarLoc)
@@ -974,93 +3005,385 @@
 #define IShellWindows_FindWindowSW(This,pvarLoc,pvarLocRoot,swClass,phwnd,swfwOptions,ppdispOut) (This)->lpVtbl->FindWindowSW(This,pvarLoc,pvarLocRoot,swClass,phwnd,swfwOptions,ppdispOut)
 #define IShellWindows_OnCreated(This,lCookie,punk) (This)->lpVtbl->OnCreated(This,lCookie,punk)
 #define IShellWindows_ProcessAttachDetach(This,fAttach) (This)->lpVtbl->ProcessAttachDetach(This,fAttach)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IShellWindows_QueryInterface(IShellWindows* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IShellWindows_AddRef(IShellWindows* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IShellWindows_Release(IShellWindows* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IShellWindows_GetTypeInfoCount(IShellWindows* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IShellWindows_GetTypeInfo(IShellWindows* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IShellWindows_GetIDsOfNames(IShellWindows* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IShellWindows_Invoke(IShellWindows* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IShellWindows methods ***/
+static FORCEINLINE HRESULT IShellWindows_get_Count(IShellWindows* This,LONG *Count) {
+    return This->lpVtbl->get_Count(This,Count);
+}
+static FORCEINLINE HRESULT IShellWindows_Item(IShellWindows* This,VARIANT index,IDispatch **Folder) {
+    return This->lpVtbl->Item(This,index,Folder);
+}
+static FORCEINLINE HRESULT IShellWindows__NewEnum(IShellWindows* This,IUnknown **ppunk) {
+    return This->lpVtbl->_NewEnum(This,ppunk);
+}
+static FORCEINLINE HRESULT IShellWindows_Register(IShellWindows* This,IDispatch *pid,LONG hWnd,int swClass,LONG *plCookie) {
+    return This->lpVtbl->Register(This,pid,hWnd,swClass,plCookie);
+}
+static FORCEINLINE HRESULT IShellWindows_RegisterPending(IShellWindows* This,LONG lThreadId,VARIANT *pvarloc,VARIANT *pvarlocRoot,int swClass,LONG *plCookie) {
+    return This->lpVtbl->RegisterPending(This,lThreadId,pvarloc,pvarlocRoot,swClass,plCookie);
+}
+static FORCEINLINE HRESULT IShellWindows_Revoke(IShellWindows* This,LONG lCookie) {
+    return This->lpVtbl->Revoke(This,lCookie);
+}
+static FORCEINLINE HRESULT IShellWindows_OnNavigate(IShellWindows* This,LONG lCookie,VARIANT *pvarLoc) {
+    return This->lpVtbl->OnNavigate(This,lCookie,pvarLoc);
+}
+static FORCEINLINE HRESULT IShellWindows_OnActivated(IShellWindows* This,LONG lCookie,VARIANT_BOOL fActive) {
+    return This->lpVtbl->OnActivated(This,lCookie,fActive);
+}
+static FORCEINLINE HRESULT IShellWindows_FindWindowSW(IShellWindows* This,VARIANT *pvarLoc,VARIANT *pvarLocRoot,int swClass,LONG *phwnd,int swfwOptions,IDispatch **ppdispOut) {
+    return This->lpVtbl->FindWindowSW(This,pvarLoc,pvarLocRoot,swClass,phwnd,swfwOptions,ppdispOut);
+}
+static FORCEINLINE HRESULT IShellWindows_OnCreated(IShellWindows* This,LONG lCookie,IUnknown *punk) {
+    return This->lpVtbl->OnCreated(This,lCookie,punk);
+}
+static FORCEINLINE HRESULT IShellWindows_ProcessAttachDetach(IShellWindows* This,VARIANT_BOOL fAttach) {
+    return This->lpVtbl->ProcessAttachDetach(This,fAttach);
+}
 #endif
 #endif
-  HRESULT WINAPI IShellWindows_get_Count_Proxy(IShellWindows *This,__LONG32 *Count);
-  void __RPC_STUB IShellWindows_get_Count_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellWindows_Item_Proxy(IShellWindows *This,VARIANT index,IDispatch **Folder);
-  void __RPC_STUB IShellWindows_Item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellWindows__NewEnum_Proxy(IShellWindows *This,IUnknown **ppunk);
-  void __RPC_STUB IShellWindows__NewEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellWindows_Register_Proxy(IShellWindows *This,IDispatch *pid,__LONG32 hwnd,int swClass,__LONG32 *plCookie);
-  void __RPC_STUB IShellWindows_Register_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellWindows_RegisterPending_Proxy(IShellWindows *This,__LONG32 lThreadId,VARIANT *pvarloc,VARIANT *pvarlocRoot,int swClass,__LONG32 *plCookie);
-  void __RPC_STUB IShellWindows_RegisterPending_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellWindows_Revoke_Proxy(IShellWindows *This,__LONG32 lCookie);
-  void __RPC_STUB IShellWindows_Revoke_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellWindows_OnNavigate_Proxy(IShellWindows *This,__LONG32 lCookie,VARIANT *pvarLoc);
-  void __RPC_STUB IShellWindows_OnNavigate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellWindows_OnActivated_Proxy(IShellWindows *This,__LONG32 lCookie,VARIANT_BOOL fActive);
-  void __RPC_STUB IShellWindows_OnActivated_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellWindows_FindWindowSW_Proxy(IShellWindows *This,VARIANT *pvarLoc,VARIANT *pvarLocRoot,int swClass,__LONG32 *phwnd,int swfwOptions,IDispatch **ppdispOut);
-  void __RPC_STUB IShellWindows_FindWindowSW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellWindows_OnCreated_Proxy(IShellWindows *This,__LONG32 lCookie,IUnknown *punk);
-  void __RPC_STUB IShellWindows_OnCreated_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellWindows_ProcessAttachDetach_Proxy(IShellWindows *This,VARIANT_BOOL fAttach);
-  void __RPC_STUB IShellWindows_ProcessAttachDetach_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-#endif
 
-  EXTERN_C const CLSID CLSID_ShellWindows;
+#endif
+
+HRESULT STDMETHODCALLTYPE IShellWindows_get_Count_Proxy(
+    IShellWindows* This,
+    LONG *Count);
+void __RPC_STUB IShellWindows_get_Count_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellWindows_Item_Proxy(
+    IShellWindows* This,
+    VARIANT index,
+    IDispatch **Folder);
+void __RPC_STUB IShellWindows_Item_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellWindows__NewEnum_Proxy(
+    IShellWindows* This,
+    IUnknown **ppunk);
+void __RPC_STUB IShellWindows__NewEnum_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellWindows_Register_Proxy(
+    IShellWindows* This,
+    IDispatch *pid,
+    LONG hWnd,
+    int swClass,
+    LONG *plCookie);
+void __RPC_STUB IShellWindows_Register_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellWindows_RegisterPending_Proxy(
+    IShellWindows* This,
+    LONG lThreadId,
+    VARIANT *pvarloc,
+    VARIANT *pvarlocRoot,
+    int swClass,
+    LONG *plCookie);
+void __RPC_STUB IShellWindows_RegisterPending_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellWindows_Revoke_Proxy(
+    IShellWindows* This,
+    LONG lCookie);
+void __RPC_STUB IShellWindows_Revoke_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellWindows_OnNavigate_Proxy(
+    IShellWindows* This,
+    LONG lCookie,
+    VARIANT *pvarLoc);
+void __RPC_STUB IShellWindows_OnNavigate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellWindows_OnActivated_Proxy(
+    IShellWindows* This,
+    LONG lCookie,
+    VARIANT_BOOL fActive);
+void __RPC_STUB IShellWindows_OnActivated_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellWindows_FindWindowSW_Proxy(
+    IShellWindows* This,
+    VARIANT *pvarLoc,
+    VARIANT *pvarLocRoot,
+    int swClass,
+    LONG *phwnd,
+    int swfwOptions,
+    IDispatch **ppdispOut);
+void __RPC_STUB IShellWindows_FindWindowSW_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellWindows_OnCreated_Proxy(
+    IShellWindows* This,
+    LONG lCookie,
+    IUnknown *punk);
+void __RPC_STUB IShellWindows_OnCreated_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellWindows_ProcessAttachDetach_Proxy(
+    IShellWindows* This,
+    VARIANT_BOOL fAttach);
+void __RPC_STUB IShellWindows_ProcessAttachDetach_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IShellWindows_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ShellWindows coclass
+ */
+
+DEFINE_GUID(CLSID_ShellWindows, 0x9ba05972, 0xf6a8, 0x11cf, 0xa4,0x42, 0x00,0xa0,0xc9,0x0a,0x8f,0x39);
+
 #ifdef __cplusplus
-  class ShellWindows;
+class DECLSPEC_UUID("9ba05972-f6a8-11cf-a442-00a0c90a8f39") ShellWindows;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ShellWindows, 0x9ba05972, 0xf6a8, 0x11cf, 0xa4,0x42, 0x00,0xa0,0xc9,0x0a,0x8f,0x39)
+#endif
 #endif
 
+/*****************************************************************************
+ * IShellUIHelper interface
+ */
 #ifndef __IShellUIHelper_INTERFACE_DEFINED__
 #define __IShellUIHelper_INTERFACE_DEFINED__
-  EXTERN_C const IID IID_IShellUIHelper;
+
+DEFINE_GUID(IID_IShellUIHelper, 0x729fe2f8, 0x1ea8, 0x11d1, 0x8f,0x85, 0x00,0xc0,0x4f,0xc2,0xfb,0xe1);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-  struct IShellUIHelper : public IDispatch {
-  public:
-    virtual HRESULT WINAPI ResetFirstBootMode(void) = 0;
-    virtual HRESULT WINAPI ResetSafeMode(void) = 0;
-    virtual HRESULT WINAPI RefreshOfflineDesktop(void) = 0;
-    virtual HRESULT WINAPI AddFavorite(BSTR URL,VARIANT *Title) = 0;
-    virtual HRESULT WINAPI AddChannel(BSTR URL) = 0;
-    virtual HRESULT WINAPI AddDesktopComponent(BSTR URL,BSTR Type,VARIANT *Left,VARIANT *Top,VARIANT *Width,VARIANT *Height) = 0;
-    virtual HRESULT WINAPI IsSubscribed(BSTR URL,VARIANT_BOOL *pBool) = 0;
-    virtual HRESULT WINAPI NavigateAndFind(BSTR URL,BSTR strQuery,VARIANT *varTargetFrame) = 0;
-    virtual HRESULT WINAPI ImportExportFavorites(VARIANT_BOOL fImport,BSTR strImpExpPath) = 0;
-    virtual HRESULT WINAPI AutoCompleteSaveForm(VARIANT *Form) = 0;
-    virtual HRESULT WINAPI AutoScan(BSTR strSearch,BSTR strFailureUrl,VARIANT *pvarTargetFrame) = 0;
-    virtual HRESULT WINAPI AutoCompleteAttach(VARIANT *Reserved) = 0;
-    virtual HRESULT WINAPI ShowBrowserUI(BSTR bstrName,VARIANT *pvarIn,VARIANT *pvarOut) = 0;
-  };
+MIDL_INTERFACE("729fe2f8-1ea8-11d1-8f85-00c04fc2fbe1")
+IShellUIHelper : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE ResetFirstBootMode(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ResetSafeMode(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RefreshOfflineDesktop(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddFavorite(
+        BSTR URL,
+        VARIANT *Title) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddChannel(
+        BSTR URL) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddDesktopComponent(
+        BSTR URL,
+        BSTR Type,
+        VARIANT *Left,
+        VARIANT *Top,
+        VARIANT *Width,
+        VARIANT *Height) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsSubscribed(
+        BSTR URL,
+        VARIANT_BOOL *pBool) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE NavigateAndFind(
+        BSTR URL,
+        BSTR strQuery,
+        VARIANT *varTargetFrame) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ImportExportFavorites(
+        VARIANT_BOOL fImport,
+        BSTR strImpExpPath) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AutoCompleteSaveForm(
+        VARIANT *Form) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AutoScan(
+        BSTR strSearch,
+        BSTR strFailureUrl,
+        VARIANT *pvarTargetFrame) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AutoCompleteAttach(
+        VARIANT *Reserved) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ShowBrowserUI(
+        BSTR bstrName,
+        VARIANT *pvarIn,
+        VARIANT *pvarOut) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IShellUIHelper, 0x729fe2f8, 0x1ea8, 0x11d1, 0x8f,0x85, 0x00,0xc0,0x4f,0xc2,0xfb,0xe1)
+#endif
 #else
-  typedef struct IShellUIHelperVtbl {
+typedef struct IShellUIHelperVtbl {
     BEGIN_INTERFACE
-      HRESULT (WINAPI *QueryInterface)(IShellUIHelper *This,REFIID riid,void **ppvObject);
-      ULONG (WINAPI *AddRef)(IShellUIHelper *This);
-      ULONG (WINAPI *Release)(IShellUIHelper *This);
-      HRESULT (WINAPI *GetTypeInfoCount)(IShellUIHelper *This,UINT *pctinfo);
-      HRESULT (WINAPI *GetTypeInfo)(IShellUIHelper *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
-      HRESULT (WINAPI *GetIDsOfNames)(IShellUIHelper *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
-      HRESULT (WINAPI *Invoke)(IShellUIHelper *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
-      HRESULT (WINAPI *ResetFirstBootMode)(IShellUIHelper *This);
-      HRESULT (WINAPI *ResetSafeMode)(IShellUIHelper *This);
-      HRESULT (WINAPI *RefreshOfflineDesktop)(IShellUIHelper *This);
-      HRESULT (WINAPI *AddFavorite)(IShellUIHelper *This,BSTR URL,VARIANT *Title);
-      HRESULT (WINAPI *AddChannel)(IShellUIHelper *This,BSTR URL);
-      HRESULT (WINAPI *AddDesktopComponent)(IShellUIHelper *This,BSTR URL,BSTR Type,VARIANT *Left,VARIANT *Top,VARIANT *Width,VARIANT *Height);
-      HRESULT (WINAPI *IsSubscribed)(IShellUIHelper *This,BSTR URL,VARIANT_BOOL *pBool);
-      HRESULT (WINAPI *NavigateAndFind)(IShellUIHelper *This,BSTR URL,BSTR strQuery,VARIANT *varTargetFrame);
-      HRESULT (WINAPI *ImportExportFavorites)(IShellUIHelper *This,VARIANT_BOOL fImport,BSTR strImpExpPath);
-      HRESULT (WINAPI *AutoCompleteSaveForm)(IShellUIHelper *This,VARIANT *Form);
-      HRESULT (WINAPI *AutoScan)(IShellUIHelper *This,BSTR strSearch,BSTR strFailureUrl,VARIANT *pvarTargetFrame);
-      HRESULT (WINAPI *AutoCompleteAttach)(IShellUIHelper *This,VARIANT *Reserved);
-      HRESULT (WINAPI *ShowBrowserUI)(IShellUIHelper *This,BSTR bstrName,VARIANT *pvarIn,VARIANT *pvarOut);
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IShellUIHelper* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IShellUIHelper* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IShellUIHelper* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IShellUIHelper* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IShellUIHelper* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IShellUIHelper* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IShellUIHelper* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IShellUIHelper methods ***/
+    HRESULT (STDMETHODCALLTYPE *ResetFirstBootMode)(
+        IShellUIHelper* This);
+
+    HRESULT (STDMETHODCALLTYPE *ResetSafeMode)(
+        IShellUIHelper* This);
+
+    HRESULT (STDMETHODCALLTYPE *RefreshOfflineDesktop)(
+        IShellUIHelper* This);
+
+    HRESULT (STDMETHODCALLTYPE *AddFavorite)(
+        IShellUIHelper* This,
+        BSTR URL,
+        VARIANT *Title);
+
+    HRESULT (STDMETHODCALLTYPE *AddChannel)(
+        IShellUIHelper* This,
+        BSTR URL);
+
+    HRESULT (STDMETHODCALLTYPE *AddDesktopComponent)(
+        IShellUIHelper* This,
+        BSTR URL,
+        BSTR Type,
+        VARIANT *Left,
+        VARIANT *Top,
+        VARIANT *Width,
+        VARIANT *Height);
+
+    HRESULT (STDMETHODCALLTYPE *IsSubscribed)(
+        IShellUIHelper* This,
+        BSTR URL,
+        VARIANT_BOOL *pBool);
+
+    HRESULT (STDMETHODCALLTYPE *NavigateAndFind)(
+        IShellUIHelper* This,
+        BSTR URL,
+        BSTR strQuery,
+        VARIANT *varTargetFrame);
+
+    HRESULT (STDMETHODCALLTYPE *ImportExportFavorites)(
+        IShellUIHelper* This,
+        VARIANT_BOOL fImport,
+        BSTR strImpExpPath);
+
+    HRESULT (STDMETHODCALLTYPE *AutoCompleteSaveForm)(
+        IShellUIHelper* This,
+        VARIANT *Form);
+
+    HRESULT (STDMETHODCALLTYPE *AutoScan)(
+        IShellUIHelper* This,
+        BSTR strSearch,
+        BSTR strFailureUrl,
+        VARIANT *pvarTargetFrame);
+
+    HRESULT (STDMETHODCALLTYPE *AutoCompleteAttach)(
+        IShellUIHelper* This,
+        VARIANT *Reserved);
+
+    HRESULT (STDMETHODCALLTYPE *ShowBrowserUI)(
+        IShellUIHelper* This,
+        BSTR bstrName,
+        VARIANT *pvarIn,
+        VARIANT *pvarOut);
+
     END_INTERFACE
-  } IShellUIHelperVtbl;
-  struct IShellUIHelper {
-    CONST_VTBL struct IShellUIHelperVtbl *lpVtbl;
-  };
+} IShellUIHelperVtbl;
+interface IShellUIHelper {
+    CONST_VTBL IShellUIHelperVtbl* lpVtbl;
+};
+
 #ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
 #define IShellUIHelper_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define IShellUIHelper_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define IShellUIHelper_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
 #define IShellUIHelper_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
 #define IShellUIHelper_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
 #define IShellUIHelper_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
 #define IShellUIHelper_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IShellUIHelper methods ***/
 #define IShellUIHelper_ResetFirstBootMode(This) (This)->lpVtbl->ResetFirstBootMode(This)
 #define IShellUIHelper_ResetSafeMode(This) (This)->lpVtbl->ResetSafeMode(This)
 #define IShellUIHelper_RefreshOfflineDesktop(This) (This)->lpVtbl->RefreshOfflineDesktop(This)
@@ -1074,130 +3397,1014 @@
 #define IShellUIHelper_AutoScan(This,strSearch,strFailureUrl,pvarTargetFrame) (This)->lpVtbl->AutoScan(This,strSearch,strFailureUrl,pvarTargetFrame)
 #define IShellUIHelper_AutoCompleteAttach(This,Reserved) (This)->lpVtbl->AutoCompleteAttach(This,Reserved)
 #define IShellUIHelper_ShowBrowserUI(This,bstrName,pvarIn,pvarOut) (This)->lpVtbl->ShowBrowserUI(This,bstrName,pvarIn,pvarOut)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IShellUIHelper_QueryInterface(IShellUIHelper* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IShellUIHelper_AddRef(IShellUIHelper* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IShellUIHelper_Release(IShellUIHelper* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IShellUIHelper_GetTypeInfoCount(IShellUIHelper* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IShellUIHelper_GetTypeInfo(IShellUIHelper* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IShellUIHelper_GetIDsOfNames(IShellUIHelper* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IShellUIHelper_Invoke(IShellUIHelper* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IShellUIHelper methods ***/
+static FORCEINLINE HRESULT IShellUIHelper_ResetFirstBootMode(IShellUIHelper* This) {
+    return This->lpVtbl->ResetFirstBootMode(This);
+}
+static FORCEINLINE HRESULT IShellUIHelper_ResetSafeMode(IShellUIHelper* This) {
+    return This->lpVtbl->ResetSafeMode(This);
+}
+static FORCEINLINE HRESULT IShellUIHelper_RefreshOfflineDesktop(IShellUIHelper* This) {
+    return This->lpVtbl->RefreshOfflineDesktop(This);
+}
+static FORCEINLINE HRESULT IShellUIHelper_AddFavorite(IShellUIHelper* This,BSTR URL,VARIANT *Title) {
+    return This->lpVtbl->AddFavorite(This,URL,Title);
+}
+static FORCEINLINE HRESULT IShellUIHelper_AddChannel(IShellUIHelper* This,BSTR URL) {
+    return This->lpVtbl->AddChannel(This,URL);
+}
+static FORCEINLINE HRESULT IShellUIHelper_AddDesktopComponent(IShellUIHelper* This,BSTR URL,BSTR Type,VARIANT *Left,VARIANT *Top,VARIANT *Width,VARIANT *Height) {
+    return This->lpVtbl->AddDesktopComponent(This,URL,Type,Left,Top,Width,Height);
+}
+static FORCEINLINE HRESULT IShellUIHelper_IsSubscribed(IShellUIHelper* This,BSTR URL,VARIANT_BOOL *pBool) {
+    return This->lpVtbl->IsSubscribed(This,URL,pBool);
+}
+static FORCEINLINE HRESULT IShellUIHelper_NavigateAndFind(IShellUIHelper* This,BSTR URL,BSTR strQuery,VARIANT *varTargetFrame) {
+    return This->lpVtbl->NavigateAndFind(This,URL,strQuery,varTargetFrame);
+}
+static FORCEINLINE HRESULT IShellUIHelper_ImportExportFavorites(IShellUIHelper* This,VARIANT_BOOL fImport,BSTR strImpExpPath) {
+    return This->lpVtbl->ImportExportFavorites(This,fImport,strImpExpPath);
+}
+static FORCEINLINE HRESULT IShellUIHelper_AutoCompleteSaveForm(IShellUIHelper* This,VARIANT *Form) {
+    return This->lpVtbl->AutoCompleteSaveForm(This,Form);
+}
+static FORCEINLINE HRESULT IShellUIHelper_AutoScan(IShellUIHelper* This,BSTR strSearch,BSTR strFailureUrl,VARIANT *pvarTargetFrame) {
+    return This->lpVtbl->AutoScan(This,strSearch,strFailureUrl,pvarTargetFrame);
+}
+static FORCEINLINE HRESULT IShellUIHelper_AutoCompleteAttach(IShellUIHelper* This,VARIANT *Reserved) {
+    return This->lpVtbl->AutoCompleteAttach(This,Reserved);
+}
+static FORCEINLINE HRESULT IShellUIHelper_ShowBrowserUI(IShellUIHelper* This,BSTR bstrName,VARIANT *pvarIn,VARIANT *pvarOut) {
+    return This->lpVtbl->ShowBrowserUI(This,bstrName,pvarIn,pvarOut);
+}
 #endif
 #endif
-  HRESULT WINAPI IShellUIHelper_ResetFirstBootMode_Proxy(IShellUIHelper *This);
-  void __RPC_STUB IShellUIHelper_ResetFirstBootMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellUIHelper_ResetSafeMode_Proxy(IShellUIHelper *This);
-  void __RPC_STUB IShellUIHelper_ResetSafeMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellUIHelper_RefreshOfflineDesktop_Proxy(IShellUIHelper *This);
-  void __RPC_STUB IShellUIHelper_RefreshOfflineDesktop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellUIHelper_AddFavorite_Proxy(IShellUIHelper *This,BSTR URL,VARIANT *Title);
-  void __RPC_STUB IShellUIHelper_AddFavorite_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellUIHelper_AddChannel_Proxy(IShellUIHelper *This,BSTR URL);
-  void __RPC_STUB IShellUIHelper_AddChannel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellUIHelper_AddDesktopComponent_Proxy(IShellUIHelper *This,BSTR URL,BSTR Type,VARIANT *Left,VARIANT *Top,VARIANT *Width,VARIANT *Height);
-  void __RPC_STUB IShellUIHelper_AddDesktopComponent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellUIHelper_IsSubscribed_Proxy(IShellUIHelper *This,BSTR URL,VARIANT_BOOL *pBool);
-  void __RPC_STUB IShellUIHelper_IsSubscribed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellUIHelper_NavigateAndFind_Proxy(IShellUIHelper *This,BSTR URL,BSTR strQuery,VARIANT *varTargetFrame);
-  void __RPC_STUB IShellUIHelper_NavigateAndFind_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellUIHelper_ImportExportFavorites_Proxy(IShellUIHelper *This,VARIANT_BOOL fImport,BSTR strImpExpPath);
-  void __RPC_STUB IShellUIHelper_ImportExportFavorites_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellUIHelper_AutoCompleteSaveForm_Proxy(IShellUIHelper *This,VARIANT *Form);
-  void __RPC_STUB IShellUIHelper_AutoCompleteSaveForm_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellUIHelper_AutoScan_Proxy(IShellUIHelper *This,BSTR strSearch,BSTR strFailureUrl,VARIANT *pvarTargetFrame);
-  void __RPC_STUB IShellUIHelper_AutoScan_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellUIHelper_AutoCompleteAttach_Proxy(IShellUIHelper *This,VARIANT *Reserved);
-  void __RPC_STUB IShellUIHelper_AutoCompleteAttach_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellUIHelper_ShowBrowserUI_Proxy(IShellUIHelper *This,BSTR bstrName,VARIANT *pvarIn,VARIANT *pvarOut);
-  void __RPC_STUB IShellUIHelper_ShowBrowserUI_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-#endif
 
-  EXTERN_C const CLSID CLSID_ShellUIHelper;
+#endif
+
+HRESULT STDMETHODCALLTYPE IShellUIHelper_ResetFirstBootMode_Proxy(
+    IShellUIHelper* This);
+void __RPC_STUB IShellUIHelper_ResetFirstBootMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellUIHelper_ResetSafeMode_Proxy(
+    IShellUIHelper* This);
+void __RPC_STUB IShellUIHelper_ResetSafeMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellUIHelper_RefreshOfflineDesktop_Proxy(
+    IShellUIHelper* This);
+void __RPC_STUB IShellUIHelper_RefreshOfflineDesktop_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellUIHelper_AddFavorite_Proxy(
+    IShellUIHelper* This,
+    BSTR URL,
+    VARIANT *Title);
+void __RPC_STUB IShellUIHelper_AddFavorite_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellUIHelper_AddChannel_Proxy(
+    IShellUIHelper* This,
+    BSTR URL);
+void __RPC_STUB IShellUIHelper_AddChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellUIHelper_AddDesktopComponent_Proxy(
+    IShellUIHelper* This,
+    BSTR URL,
+    BSTR Type,
+    VARIANT *Left,
+    VARIANT *Top,
+    VARIANT *Width,
+    VARIANT *Height);
+void __RPC_STUB IShellUIHelper_AddDesktopComponent_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellUIHelper_IsSubscribed_Proxy(
+    IShellUIHelper* This,
+    BSTR URL,
+    VARIANT_BOOL *pBool);
+void __RPC_STUB IShellUIHelper_IsSubscribed_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellUIHelper_NavigateAndFind_Proxy(
+    IShellUIHelper* This,
+    BSTR URL,
+    BSTR strQuery,
+    VARIANT *varTargetFrame);
+void __RPC_STUB IShellUIHelper_NavigateAndFind_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellUIHelper_ImportExportFavorites_Proxy(
+    IShellUIHelper* This,
+    VARIANT_BOOL fImport,
+    BSTR strImpExpPath);
+void __RPC_STUB IShellUIHelper_ImportExportFavorites_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellUIHelper_AutoCompleteSaveForm_Proxy(
+    IShellUIHelper* This,
+    VARIANT *Form);
+void __RPC_STUB IShellUIHelper_AutoCompleteSaveForm_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellUIHelper_AutoScan_Proxy(
+    IShellUIHelper* This,
+    BSTR strSearch,
+    BSTR strFailureUrl,
+    VARIANT *pvarTargetFrame);
+void __RPC_STUB IShellUIHelper_AutoScan_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellUIHelper_AutoCompleteAttach_Proxy(
+    IShellUIHelper* This,
+    VARIANT *Reserved);
+void __RPC_STUB IShellUIHelper_AutoCompleteAttach_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellUIHelper_ShowBrowserUI_Proxy(
+    IShellUIHelper* This,
+    BSTR bstrName,
+    VARIANT *pvarIn,
+    VARIANT *pvarOut);
+void __RPC_STUB IShellUIHelper_ShowBrowserUI_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IShellUIHelper_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IShellUIHelper2 interface
+ */
+#ifndef __IShellUIHelper2_INTERFACE_DEFINED__
+#define __IShellUIHelper2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IShellUIHelper2, 0xa7fe6eda, 0x1932, 0x4281, 0xb8,0x81, 0x87,0xb3,0x1b,0x8b,0xc5,0x2c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("a7fe6eda-1932-4281-b881-87b31b8bc52c")
+IShellUIHelper2 : public IShellUIHelper
+{
+    virtual HRESULT STDMETHODCALLTYPE AddSearchProvider(
+        BSTR URL) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RunOnceShown(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SkipRunOnce(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CustomizeSettings(
+        VARIANT_BOOL fSQM,
+        VARIANT_BOOL fPhishing,
+        BSTR bstrLocale) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SqmEnabled(
+        VARIANT_BOOL *pfEnabled) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PhishingEnabled(
+        VARIANT_BOOL *pfEnabled) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE BrandImageUri(
+        BSTR *pbstrUri) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SkipTabsWelcome(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DiagnoseConnection(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CustomizeClearType(
+        VARIANT_BOOL fSet) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsSearchProviderInstalled(
+        BSTR URL,
+        DWORD *pdwResult) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsSearchMigrated(
+        VARIANT_BOOL *pfMigrated) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DefaultSearchProvider(
+        BSTR *pbstrName) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RunOnceRequiredSettingsComplete(
+        VARIANT_BOOL fComplete) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RunOnceHasShown(
+        VARIANT_BOOL *pfShown) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SearchGuideUrl(
+        BSTR *pbstrUrl) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IShellUIHelper2, 0xa7fe6eda, 0x1932, 0x4281, 0xb8,0x81, 0x87,0xb3,0x1b,0x8b,0xc5,0x2c)
+#endif
+#else
+typedef struct IShellUIHelper2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IShellUIHelper2* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IShellUIHelper2* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IShellUIHelper2* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IShellUIHelper2* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IShellUIHelper2* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IShellUIHelper2* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IShellUIHelper2* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IShellUIHelper methods ***/
+    HRESULT (STDMETHODCALLTYPE *ResetFirstBootMode)(
+        IShellUIHelper2* This);
+
+    HRESULT (STDMETHODCALLTYPE *ResetSafeMode)(
+        IShellUIHelper2* This);
+
+    HRESULT (STDMETHODCALLTYPE *RefreshOfflineDesktop)(
+        IShellUIHelper2* This);
+
+    HRESULT (STDMETHODCALLTYPE *AddFavorite)(
+        IShellUIHelper2* This,
+        BSTR URL,
+        VARIANT *Title);
+
+    HRESULT (STDMETHODCALLTYPE *AddChannel)(
+        IShellUIHelper2* This,
+        BSTR URL);
+
+    HRESULT (STDMETHODCALLTYPE *AddDesktopComponent)(
+        IShellUIHelper2* This,
+        BSTR URL,
+        BSTR Type,
+        VARIANT *Left,
+        VARIANT *Top,
+        VARIANT *Width,
+        VARIANT *Height);
+
+    HRESULT (STDMETHODCALLTYPE *IsSubscribed)(
+        IShellUIHelper2* This,
+        BSTR URL,
+        VARIANT_BOOL *pBool);
+
+    HRESULT (STDMETHODCALLTYPE *NavigateAndFind)(
+        IShellUIHelper2* This,
+        BSTR URL,
+        BSTR strQuery,
+        VARIANT *varTargetFrame);
+
+    HRESULT (STDMETHODCALLTYPE *ImportExportFavorites)(
+        IShellUIHelper2* This,
+        VARIANT_BOOL fImport,
+        BSTR strImpExpPath);
+
+    HRESULT (STDMETHODCALLTYPE *AutoCompleteSaveForm)(
+        IShellUIHelper2* This,
+        VARIANT *Form);
+
+    HRESULT (STDMETHODCALLTYPE *AutoScan)(
+        IShellUIHelper2* This,
+        BSTR strSearch,
+        BSTR strFailureUrl,
+        VARIANT *pvarTargetFrame);
+
+    HRESULT (STDMETHODCALLTYPE *AutoCompleteAttach)(
+        IShellUIHelper2* This,
+        VARIANT *Reserved);
+
+    HRESULT (STDMETHODCALLTYPE *ShowBrowserUI)(
+        IShellUIHelper2* This,
+        BSTR bstrName,
+        VARIANT *pvarIn,
+        VARIANT *pvarOut);
+
+    /*** IShellUIHelper2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *AddSearchProvider)(
+        IShellUIHelper2* This,
+        BSTR URL);
+
+    HRESULT (STDMETHODCALLTYPE *RunOnceShown)(
+        IShellUIHelper2* This);
+
+    HRESULT (STDMETHODCALLTYPE *SkipRunOnce)(
+        IShellUIHelper2* This);
+
+    HRESULT (STDMETHODCALLTYPE *CustomizeSettings)(
+        IShellUIHelper2* This,
+        VARIANT_BOOL fSQM,
+        VARIANT_BOOL fPhishing,
+        BSTR bstrLocale);
+
+    HRESULT (STDMETHODCALLTYPE *SqmEnabled)(
+        IShellUIHelper2* This,
+        VARIANT_BOOL *pfEnabled);
+
+    HRESULT (STDMETHODCALLTYPE *PhishingEnabled)(
+        IShellUIHelper2* This,
+        VARIANT_BOOL *pfEnabled);
+
+    HRESULT (STDMETHODCALLTYPE *BrandImageUri)(
+        IShellUIHelper2* This,
+        BSTR *pbstrUri);
+
+    HRESULT (STDMETHODCALLTYPE *SkipTabsWelcome)(
+        IShellUIHelper2* This);
+
+    HRESULT (STDMETHODCALLTYPE *DiagnoseConnection)(
+        IShellUIHelper2* This);
+
+    HRESULT (STDMETHODCALLTYPE *CustomizeClearType)(
+        IShellUIHelper2* This,
+        VARIANT_BOOL fSet);
+
+    HRESULT (STDMETHODCALLTYPE *IsSearchProviderInstalled)(
+        IShellUIHelper2* This,
+        BSTR URL,
+        DWORD *pdwResult);
+
+    HRESULT (STDMETHODCALLTYPE *IsSearchMigrated)(
+        IShellUIHelper2* This,
+        VARIANT_BOOL *pfMigrated);
+
+    HRESULT (STDMETHODCALLTYPE *DefaultSearchProvider)(
+        IShellUIHelper2* This,
+        BSTR *pbstrName);
+
+    HRESULT (STDMETHODCALLTYPE *RunOnceRequiredSettingsComplete)(
+        IShellUIHelper2* This,
+        VARIANT_BOOL fComplete);
+
+    HRESULT (STDMETHODCALLTYPE *RunOnceHasShown)(
+        IShellUIHelper2* This,
+        VARIANT_BOOL *pfShown);
+
+    HRESULT (STDMETHODCALLTYPE *SearchGuideUrl)(
+        IShellUIHelper2* This,
+        BSTR *pbstrUrl);
+
+    END_INTERFACE
+} IShellUIHelper2Vtbl;
+interface IShellUIHelper2 {
+    CONST_VTBL IShellUIHelper2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IShellUIHelper2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IShellUIHelper2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IShellUIHelper2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IShellUIHelper2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IShellUIHelper2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IShellUIHelper2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IShellUIHelper2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IShellUIHelper methods ***/
+#define IShellUIHelper2_ResetFirstBootMode(This) (This)->lpVtbl->ResetFirstBootMode(This)
+#define IShellUIHelper2_ResetSafeMode(This) (This)->lpVtbl->ResetSafeMode(This)
+#define IShellUIHelper2_RefreshOfflineDesktop(This) (This)->lpVtbl->RefreshOfflineDesktop(This)
+#define IShellUIHelper2_AddFavorite(This,URL,Title) (This)->lpVtbl->AddFavorite(This,URL,Title)
+#define IShellUIHelper2_AddChannel(This,URL) (This)->lpVtbl->AddChannel(This,URL)
+#define IShellUIHelper2_AddDesktopComponent(This,URL,Type,Left,Top,Width,Height) (This)->lpVtbl->AddDesktopComponent(This,URL,Type,Left,Top,Width,Height)
+#define IShellUIHelper2_IsSubscribed(This,URL,pBool) (This)->lpVtbl->IsSubscribed(This,URL,pBool)
+#define IShellUIHelper2_NavigateAndFind(This,URL,strQuery,varTargetFrame) (This)->lpVtbl->NavigateAndFind(This,URL,strQuery,varTargetFrame)
+#define IShellUIHelper2_ImportExportFavorites(This,fImport,strImpExpPath) (This)->lpVtbl->ImportExportFavorites(This,fImport,strImpExpPath)
+#define IShellUIHelper2_AutoCompleteSaveForm(This,Form) (This)->lpVtbl->AutoCompleteSaveForm(This,Form)
+#define IShellUIHelper2_AutoScan(This,strSearch,strFailureUrl,pvarTargetFrame) (This)->lpVtbl->AutoScan(This,strSearch,strFailureUrl,pvarTargetFrame)
+#define IShellUIHelper2_AutoCompleteAttach(This,Reserved) (This)->lpVtbl->AutoCompleteAttach(This,Reserved)
+#define IShellUIHelper2_ShowBrowserUI(This,bstrName,pvarIn,pvarOut) (This)->lpVtbl->ShowBrowserUI(This,bstrName,pvarIn,pvarOut)
+/*** IShellUIHelper2 methods ***/
+#define IShellUIHelper2_AddSearchProvider(This,URL) (This)->lpVtbl->AddSearchProvider(This,URL)
+#define IShellUIHelper2_RunOnceShown(This) (This)->lpVtbl->RunOnceShown(This)
+#define IShellUIHelper2_SkipRunOnce(This) (This)->lpVtbl->SkipRunOnce(This)
+#define IShellUIHelper2_CustomizeSettings(This,fSQM,fPhishing,bstrLocale) (This)->lpVtbl->CustomizeSettings(This,fSQM,fPhishing,bstrLocale)
+#define IShellUIHelper2_SqmEnabled(This,pfEnabled) (This)->lpVtbl->SqmEnabled(This,pfEnabled)
+#define IShellUIHelper2_PhishingEnabled(This,pfEnabled) (This)->lpVtbl->PhishingEnabled(This,pfEnabled)
+#define IShellUIHelper2_BrandImageUri(This,pbstrUri) (This)->lpVtbl->BrandImageUri(This,pbstrUri)
+#define IShellUIHelper2_SkipTabsWelcome(This) (This)->lpVtbl->SkipTabsWelcome(This)
+#define IShellUIHelper2_DiagnoseConnection(This) (This)->lpVtbl->DiagnoseConnection(This)
+#define IShellUIHelper2_CustomizeClearType(This,fSet) (This)->lpVtbl->CustomizeClearType(This,fSet)
+#define IShellUIHelper2_IsSearchProviderInstalled(This,URL,pdwResult) (This)->lpVtbl->IsSearchProviderInstalled(This,URL,pdwResult)
+#define IShellUIHelper2_IsSearchMigrated(This,pfMigrated) (This)->lpVtbl->IsSearchMigrated(This,pfMigrated)
+#define IShellUIHelper2_DefaultSearchProvider(This,pbstrName) (This)->lpVtbl->DefaultSearchProvider(This,pbstrName)
+#define IShellUIHelper2_RunOnceRequiredSettingsComplete(This,fComplete) (This)->lpVtbl->RunOnceRequiredSettingsComplete(This,fComplete)
+#define IShellUIHelper2_RunOnceHasShown(This,pfShown) (This)->lpVtbl->RunOnceHasShown(This,pfShown)
+#define IShellUIHelper2_SearchGuideUrl(This,pbstrUrl) (This)->lpVtbl->SearchGuideUrl(This,pbstrUrl)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IShellUIHelper2_QueryInterface(IShellUIHelper2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IShellUIHelper2_AddRef(IShellUIHelper2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IShellUIHelper2_Release(IShellUIHelper2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IShellUIHelper2_GetTypeInfoCount(IShellUIHelper2* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_GetTypeInfo(IShellUIHelper2* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_GetIDsOfNames(IShellUIHelper2* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_Invoke(IShellUIHelper2* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IShellUIHelper methods ***/
+static FORCEINLINE HRESULT IShellUIHelper2_ResetFirstBootMode(IShellUIHelper2* This) {
+    return This->lpVtbl->ResetFirstBootMode(This);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_ResetSafeMode(IShellUIHelper2* This) {
+    return This->lpVtbl->ResetSafeMode(This);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_RefreshOfflineDesktop(IShellUIHelper2* This) {
+    return This->lpVtbl->RefreshOfflineDesktop(This);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_AddFavorite(IShellUIHelper2* This,BSTR URL,VARIANT *Title) {
+    return This->lpVtbl->AddFavorite(This,URL,Title);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_AddChannel(IShellUIHelper2* This,BSTR URL) {
+    return This->lpVtbl->AddChannel(This,URL);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_AddDesktopComponent(IShellUIHelper2* This,BSTR URL,BSTR Type,VARIANT *Left,VARIANT *Top,VARIANT *Width,VARIANT *Height) {
+    return This->lpVtbl->AddDesktopComponent(This,URL,Type,Left,Top,Width,Height);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_IsSubscribed(IShellUIHelper2* This,BSTR URL,VARIANT_BOOL *pBool) {
+    return This->lpVtbl->IsSubscribed(This,URL,pBool);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_NavigateAndFind(IShellUIHelper2* This,BSTR URL,BSTR strQuery,VARIANT *varTargetFrame) {
+    return This->lpVtbl->NavigateAndFind(This,URL,strQuery,varTargetFrame);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_ImportExportFavorites(IShellUIHelper2* This,VARIANT_BOOL fImport,BSTR strImpExpPath) {
+    return This->lpVtbl->ImportExportFavorites(This,fImport,strImpExpPath);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_AutoCompleteSaveForm(IShellUIHelper2* This,VARIANT *Form) {
+    return This->lpVtbl->AutoCompleteSaveForm(This,Form);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_AutoScan(IShellUIHelper2* This,BSTR strSearch,BSTR strFailureUrl,VARIANT *pvarTargetFrame) {
+    return This->lpVtbl->AutoScan(This,strSearch,strFailureUrl,pvarTargetFrame);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_AutoCompleteAttach(IShellUIHelper2* This,VARIANT *Reserved) {
+    return This->lpVtbl->AutoCompleteAttach(This,Reserved);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_ShowBrowserUI(IShellUIHelper2* This,BSTR bstrName,VARIANT *pvarIn,VARIANT *pvarOut) {
+    return This->lpVtbl->ShowBrowserUI(This,bstrName,pvarIn,pvarOut);
+}
+/*** IShellUIHelper2 methods ***/
+static FORCEINLINE HRESULT IShellUIHelper2_AddSearchProvider(IShellUIHelper2* This,BSTR URL) {
+    return This->lpVtbl->AddSearchProvider(This,URL);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_RunOnceShown(IShellUIHelper2* This) {
+    return This->lpVtbl->RunOnceShown(This);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_SkipRunOnce(IShellUIHelper2* This) {
+    return This->lpVtbl->SkipRunOnce(This);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_CustomizeSettings(IShellUIHelper2* This,VARIANT_BOOL fSQM,VARIANT_BOOL fPhishing,BSTR bstrLocale) {
+    return This->lpVtbl->CustomizeSettings(This,fSQM,fPhishing,bstrLocale);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_SqmEnabled(IShellUIHelper2* This,VARIANT_BOOL *pfEnabled) {
+    return This->lpVtbl->SqmEnabled(This,pfEnabled);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_PhishingEnabled(IShellUIHelper2* This,VARIANT_BOOL *pfEnabled) {
+    return This->lpVtbl->PhishingEnabled(This,pfEnabled);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_BrandImageUri(IShellUIHelper2* This,BSTR *pbstrUri) {
+    return This->lpVtbl->BrandImageUri(This,pbstrUri);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_SkipTabsWelcome(IShellUIHelper2* This) {
+    return This->lpVtbl->SkipTabsWelcome(This);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_DiagnoseConnection(IShellUIHelper2* This) {
+    return This->lpVtbl->DiagnoseConnection(This);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_CustomizeClearType(IShellUIHelper2* This,VARIANT_BOOL fSet) {
+    return This->lpVtbl->CustomizeClearType(This,fSet);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_IsSearchProviderInstalled(IShellUIHelper2* This,BSTR URL,DWORD *pdwResult) {
+    return This->lpVtbl->IsSearchProviderInstalled(This,URL,pdwResult);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_IsSearchMigrated(IShellUIHelper2* This,VARIANT_BOOL *pfMigrated) {
+    return This->lpVtbl->IsSearchMigrated(This,pfMigrated);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_DefaultSearchProvider(IShellUIHelper2* This,BSTR *pbstrName) {
+    return This->lpVtbl->DefaultSearchProvider(This,pbstrName);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_RunOnceRequiredSettingsComplete(IShellUIHelper2* This,VARIANT_BOOL fComplete) {
+    return This->lpVtbl->RunOnceRequiredSettingsComplete(This,fComplete);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_RunOnceHasShown(IShellUIHelper2* This,VARIANT_BOOL *pfShown) {
+    return This->lpVtbl->RunOnceHasShown(This,pfShown);
+}
+static FORCEINLINE HRESULT IShellUIHelper2_SearchGuideUrl(IShellUIHelper2* This,BSTR *pbstrUrl) {
+    return This->lpVtbl->SearchGuideUrl(This,pbstrUrl);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IShellUIHelper2_AddSearchProvider_Proxy(
+    IShellUIHelper2* This,
+    BSTR URL);
+void __RPC_STUB IShellUIHelper2_AddSearchProvider_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellUIHelper2_RunOnceShown_Proxy(
+    IShellUIHelper2* This);
+void __RPC_STUB IShellUIHelper2_RunOnceShown_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellUIHelper2_SkipRunOnce_Proxy(
+    IShellUIHelper2* This);
+void __RPC_STUB IShellUIHelper2_SkipRunOnce_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellUIHelper2_CustomizeSettings_Proxy(
+    IShellUIHelper2* This,
+    VARIANT_BOOL fSQM,
+    VARIANT_BOOL fPhishing,
+    BSTR bstrLocale);
+void __RPC_STUB IShellUIHelper2_CustomizeSettings_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellUIHelper2_SqmEnabled_Proxy(
+    IShellUIHelper2* This,
+    VARIANT_BOOL *pfEnabled);
+void __RPC_STUB IShellUIHelper2_SqmEnabled_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellUIHelper2_PhishingEnabled_Proxy(
+    IShellUIHelper2* This,
+    VARIANT_BOOL *pfEnabled);
+void __RPC_STUB IShellUIHelper2_PhishingEnabled_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellUIHelper2_BrandImageUri_Proxy(
+    IShellUIHelper2* This,
+    BSTR *pbstrUri);
+void __RPC_STUB IShellUIHelper2_BrandImageUri_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellUIHelper2_SkipTabsWelcome_Proxy(
+    IShellUIHelper2* This);
+void __RPC_STUB IShellUIHelper2_SkipTabsWelcome_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellUIHelper2_DiagnoseConnection_Proxy(
+    IShellUIHelper2* This);
+void __RPC_STUB IShellUIHelper2_DiagnoseConnection_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellUIHelper2_CustomizeClearType_Proxy(
+    IShellUIHelper2* This,
+    VARIANT_BOOL fSet);
+void __RPC_STUB IShellUIHelper2_CustomizeClearType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellUIHelper2_IsSearchProviderInstalled_Proxy(
+    IShellUIHelper2* This,
+    BSTR URL,
+    DWORD *pdwResult);
+void __RPC_STUB IShellUIHelper2_IsSearchProviderInstalled_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellUIHelper2_IsSearchMigrated_Proxy(
+    IShellUIHelper2* This,
+    VARIANT_BOOL *pfMigrated);
+void __RPC_STUB IShellUIHelper2_IsSearchMigrated_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellUIHelper2_DefaultSearchProvider_Proxy(
+    IShellUIHelper2* This,
+    BSTR *pbstrName);
+void __RPC_STUB IShellUIHelper2_DefaultSearchProvider_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellUIHelper2_RunOnceRequiredSettingsComplete_Proxy(
+    IShellUIHelper2* This,
+    VARIANT_BOOL fComplete);
+void __RPC_STUB IShellUIHelper2_RunOnceRequiredSettingsComplete_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellUIHelper2_RunOnceHasShown_Proxy(
+    IShellUIHelper2* This,
+    VARIANT_BOOL *pfShown);
+void __RPC_STUB IShellUIHelper2_RunOnceHasShown_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellUIHelper2_SearchGuideUrl_Proxy(
+    IShellUIHelper2* This,
+    BSTR *pbstrUrl);
+void __RPC_STUB IShellUIHelper2_SearchGuideUrl_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IShellUIHelper2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ShellUIHelper coclass
+ */
+
+DEFINE_GUID(CLSID_ShellUIHelper, 0x64ab4bb7, 0x111e, 0x11d1, 0x8f,0x79, 0x00,0xc0,0x4f,0xc2,0xfb,0xe1);
+
 #ifdef __cplusplus
-  class ShellUIHelper;
+class DECLSPEC_UUID("64ab4bb7-111e-11d1-8f79-00c04fc2fbe1") ShellUIHelper;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ShellUIHelper, 0x64ab4bb7, 0x111e, 0x11d1, 0x8f,0x79, 0x00,0xc0,0x4f,0xc2,0xfb,0xe1)
+#endif
 #endif
 
+/*****************************************************************************
+ * DShellNameSpaceEvents dispinterface
+ */
 #ifndef __DShellNameSpaceEvents_DISPINTERFACE_DEFINED__
 #define __DShellNameSpaceEvents_DISPINTERFACE_DEFINED__
-  EXTERN_C const IID DIID_DShellNameSpaceEvents;
+
+DEFINE_GUID(DIID_DShellNameSpaceEvents, 0x55136806, 0xb2de, 0x11d1, 0xb9,0xf2, 0x00,0xa0,0xc9,0x8b,0xc5,0x47);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-  struct DShellNameSpaceEvents : public IDispatch {
-  };
+MIDL_INTERFACE("55136806-b2de-11d1-b9f2-00a0c98bc547")
+DShellNameSpaceEvents : public IDispatch
+{
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(DShellNameSpaceEvents, 0x55136806, 0xb2de, 0x11d1, 0xb9,0xf2, 0x00,0xa0,0xc9,0x8b,0xc5,0x47)
+#endif
 #else
-  typedef struct DShellNameSpaceEventsVtbl {
+typedef struct DShellNameSpaceEventsVtbl {
     BEGIN_INTERFACE
-      HRESULT (WINAPI *QueryInterface)(DShellNameSpaceEvents *This,REFIID riid,void **ppvObject);
-      ULONG (WINAPI *AddRef)(DShellNameSpaceEvents *This);
-      ULONG (WINAPI *Release)(DShellNameSpaceEvents *This);
-      HRESULT (WINAPI *GetTypeInfoCount)(DShellNameSpaceEvents *This,UINT *pctinfo);
-      HRESULT (WINAPI *GetTypeInfo)(DShellNameSpaceEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
-      HRESULT (WINAPI *GetIDsOfNames)(DShellNameSpaceEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
-      HRESULT (WINAPI *Invoke)(DShellNameSpaceEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        DShellNameSpaceEvents* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        DShellNameSpaceEvents* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        DShellNameSpaceEvents* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        DShellNameSpaceEvents* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        DShellNameSpaceEvents* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        DShellNameSpaceEvents* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        DShellNameSpaceEvents* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
     END_INTERFACE
-  } DShellNameSpaceEventsVtbl;
-  struct DShellNameSpaceEvents {
-    CONST_VTBL struct DShellNameSpaceEventsVtbl *lpVtbl;
-  };
+} DShellNameSpaceEventsVtbl;
+interface DShellNameSpaceEvents {
+    CONST_VTBL DShellNameSpaceEventsVtbl* lpVtbl;
+};
+
 #ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
 #define DShellNameSpaceEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define DShellNameSpaceEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define DShellNameSpaceEvents_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
 #define DShellNameSpaceEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
 #define DShellNameSpaceEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
 #define DShellNameSpaceEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
 #define DShellNameSpaceEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
-#endif
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT DShellNameSpaceEvents_QueryInterface(DShellNameSpaceEvents* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG DShellNameSpaceEvents_AddRef(DShellNameSpaceEvents* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG DShellNameSpaceEvents_Release(DShellNameSpaceEvents* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT DShellNameSpaceEvents_GetTypeInfoCount(DShellNameSpaceEvents* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT DShellNameSpaceEvents_GetTypeInfo(DShellNameSpaceEvents* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT DShellNameSpaceEvents_GetIDsOfNames(DShellNameSpaceEvents* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT DShellNameSpaceEvents_Invoke(DShellNameSpaceEvents* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
 #endif
 #endif
 
+#endif
+
+#endif  /* __DShellNameSpaceEvents_DISPINTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IShellFavoritesNameSpace interface
+ */
 #ifndef __IShellFavoritesNameSpace_INTERFACE_DEFINED__
 #define __IShellFavoritesNameSpace_INTERFACE_DEFINED__
-  EXTERN_C const IID IID_IShellFavoritesNameSpace;
+
+DEFINE_GUID(IID_IShellFavoritesNameSpace, 0x55136804, 0xb2de, 0x11d1, 0xb9,0xf2, 0x00,0xa0,0xc9,0x8b,0xc5,0x47);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-  struct IShellFavoritesNameSpace : public IDispatch {
-  public:
-    virtual HRESULT WINAPI MoveSelectionUp(void) = 0;
-    virtual HRESULT WINAPI MoveSelectionDown(void) = 0;
-    virtual HRESULT WINAPI ResetSort(void) = 0;
-    virtual HRESULT WINAPI NewFolder(void) = 0;
-    virtual HRESULT WINAPI Synchronize(void) = 0;
-    virtual HRESULT WINAPI Import(void) = 0;
-    virtual HRESULT WINAPI Export(void) = 0;
-    virtual HRESULT WINAPI InvokeContextMenuCommand(BSTR strCommand) = 0;
-    virtual HRESULT WINAPI MoveSelectionTo(void) = 0;
-    virtual HRESULT WINAPI get_SubscriptionsEnabled(VARIANT_BOOL *pBool) = 0;
-    virtual HRESULT WINAPI CreateSubscriptionForSelection(VARIANT_BOOL *pBool) = 0;
-    virtual HRESULT WINAPI DeleteSubscriptionForSelection(VARIANT_BOOL *pBool) = 0;
-    virtual HRESULT WINAPI SetRoot(BSTR bstrFullPath) = 0;
-  };
+MIDL_INTERFACE("55136804-b2de-11d1-b9f2-00a0c98bc547")
+IShellFavoritesNameSpace : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE MoveSelectionUp(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE MoveSelectionDown(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ResetSort(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE NewFolder(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Synchronize(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Import(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Export(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE InvokeContextMenuCommand(
+        BSTR strCommand) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE MoveSelectionTo(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SubscriptionsEnabled(
+        VARIANT_BOOL *pBool) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateSubscriptionForSelection(
+        VARIANT_BOOL *pBool) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DeleteSubscriptionForSelection(
+        VARIANT_BOOL *pBool) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetRoot(
+        BSTR bstrFullPath) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IShellFavoritesNameSpace, 0x55136804, 0xb2de, 0x11d1, 0xb9,0xf2, 0x00,0xa0,0xc9,0x8b,0xc5,0x47)
+#endif
 #else
-  typedef struct IShellFavoritesNameSpaceVtbl {
+typedef struct IShellFavoritesNameSpaceVtbl {
     BEGIN_INTERFACE
-      HRESULT (WINAPI *QueryInterface)(IShellFavoritesNameSpace *This,REFIID riid,void **ppvObject);
-      ULONG (WINAPI *AddRef)(IShellFavoritesNameSpace *This);
-      ULONG (WINAPI *Release)(IShellFavoritesNameSpace *This);
-      HRESULT (WINAPI *GetTypeInfoCount)(IShellFavoritesNameSpace *This,UINT *pctinfo);
-      HRESULT (WINAPI *GetTypeInfo)(IShellFavoritesNameSpace *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
-      HRESULT (WINAPI *GetIDsOfNames)(IShellFavoritesNameSpace *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
-      HRESULT (WINAPI *Invoke)(IShellFavoritesNameSpace *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
-      HRESULT (WINAPI *MoveSelectionUp)(IShellFavoritesNameSpace *This);
-      HRESULT (WINAPI *MoveSelectionDown)(IShellFavoritesNameSpace *This);
-      HRESULT (WINAPI *ResetSort)(IShellFavoritesNameSpace *This);
-      HRESULT (WINAPI *NewFolder)(IShellFavoritesNameSpace *This);
-      HRESULT (WINAPI *Synchronize)(IShellFavoritesNameSpace *This);
-      HRESULT (WINAPI *Import)(IShellFavoritesNameSpace *This);
-      HRESULT (WINAPI *Export)(IShellFavoritesNameSpace *This);
-      HRESULT (WINAPI *InvokeContextMenuCommand)(IShellFavoritesNameSpace *This,BSTR strCommand);
-      HRESULT (WINAPI *MoveSelectionTo)(IShellFavoritesNameSpace *This);
-      HRESULT (WINAPI *get_SubscriptionsEnabled)(IShellFavoritesNameSpace *This,VARIANT_BOOL *pBool);
-      HRESULT (WINAPI *CreateSubscriptionForSelection)(IShellFavoritesNameSpace *This,VARIANT_BOOL *pBool);
-      HRESULT (WINAPI *DeleteSubscriptionForSelection)(IShellFavoritesNameSpace *This,VARIANT_BOOL *pBool);
-      HRESULT (WINAPI *SetRoot)(IShellFavoritesNameSpace *This,BSTR bstrFullPath);
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IShellFavoritesNameSpace* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IShellFavoritesNameSpace* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IShellFavoritesNameSpace* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IShellFavoritesNameSpace* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IShellFavoritesNameSpace* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IShellFavoritesNameSpace* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IShellFavoritesNameSpace* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IShellFavoritesNameSpace methods ***/
+    HRESULT (STDMETHODCALLTYPE *MoveSelectionUp)(
+        IShellFavoritesNameSpace* This);
+
+    HRESULT (STDMETHODCALLTYPE *MoveSelectionDown)(
+        IShellFavoritesNameSpace* This);
+
+    HRESULT (STDMETHODCALLTYPE *ResetSort)(
+        IShellFavoritesNameSpace* This);
+
+    HRESULT (STDMETHODCALLTYPE *NewFolder)(
+        IShellFavoritesNameSpace* This);
+
+    HRESULT (STDMETHODCALLTYPE *Synchronize)(
+        IShellFavoritesNameSpace* This);
+
+    HRESULT (STDMETHODCALLTYPE *Import)(
+        IShellFavoritesNameSpace* This);
+
+    HRESULT (STDMETHODCALLTYPE *Export)(
+        IShellFavoritesNameSpace* This);
+
+    HRESULT (STDMETHODCALLTYPE *InvokeContextMenuCommand)(
+        IShellFavoritesNameSpace* This,
+        BSTR strCommand);
+
+    HRESULT (STDMETHODCALLTYPE *MoveSelectionTo)(
+        IShellFavoritesNameSpace* This);
+
+    HRESULT (STDMETHODCALLTYPE *get_SubscriptionsEnabled)(
+        IShellFavoritesNameSpace* This,
+        VARIANT_BOOL *pBool);
+
+    HRESULT (STDMETHODCALLTYPE *CreateSubscriptionForSelection)(
+        IShellFavoritesNameSpace* This,
+        VARIANT_BOOL *pBool);
+
+    HRESULT (STDMETHODCALLTYPE *DeleteSubscriptionForSelection)(
+        IShellFavoritesNameSpace* This,
+        VARIANT_BOOL *pBool);
+
+    HRESULT (STDMETHODCALLTYPE *SetRoot)(
+        IShellFavoritesNameSpace* This,
+        BSTR bstrFullPath);
+
     END_INTERFACE
-  } IShellFavoritesNameSpaceVtbl;
-  struct IShellFavoritesNameSpace {
-    CONST_VTBL struct IShellFavoritesNameSpaceVtbl *lpVtbl;
-  };
+} IShellFavoritesNameSpaceVtbl;
+interface IShellFavoritesNameSpace {
+    CONST_VTBL IShellFavoritesNameSpaceVtbl* lpVtbl;
+};
+
 #ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
 #define IShellFavoritesNameSpace_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define IShellFavoritesNameSpace_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define IShellFavoritesNameSpace_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
 #define IShellFavoritesNameSpace_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
 #define IShellFavoritesNameSpace_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
 #define IShellFavoritesNameSpace_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
 #define IShellFavoritesNameSpace_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IShellFavoritesNameSpace methods ***/
 #define IShellFavoritesNameSpace_MoveSelectionUp(This) (This)->lpVtbl->MoveSelectionUp(This)
 #define IShellFavoritesNameSpace_MoveSelectionDown(This) (This)->lpVtbl->MoveSelectionDown(This)
 #define IShellFavoritesNameSpace_ResetSort(This) (This)->lpVtbl->ResetSort(This)
@@ -1211,121 +4418,447 @@
 #define IShellFavoritesNameSpace_CreateSubscriptionForSelection(This,pBool) (This)->lpVtbl->CreateSubscriptionForSelection(This,pBool)
 #define IShellFavoritesNameSpace_DeleteSubscriptionForSelection(This,pBool) (This)->lpVtbl->DeleteSubscriptionForSelection(This,pBool)
 #define IShellFavoritesNameSpace_SetRoot(This,bstrFullPath) (This)->lpVtbl->SetRoot(This,bstrFullPath)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IShellFavoritesNameSpace_QueryInterface(IShellFavoritesNameSpace* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IShellFavoritesNameSpace_AddRef(IShellFavoritesNameSpace* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IShellFavoritesNameSpace_Release(IShellFavoritesNameSpace* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IShellFavoritesNameSpace_GetTypeInfoCount(IShellFavoritesNameSpace* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IShellFavoritesNameSpace_GetTypeInfo(IShellFavoritesNameSpace* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IShellFavoritesNameSpace_GetIDsOfNames(IShellFavoritesNameSpace* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IShellFavoritesNameSpace_Invoke(IShellFavoritesNameSpace* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IShellFavoritesNameSpace methods ***/
+static FORCEINLINE HRESULT IShellFavoritesNameSpace_MoveSelectionUp(IShellFavoritesNameSpace* This) {
+    return This->lpVtbl->MoveSelectionUp(This);
+}
+static FORCEINLINE HRESULT IShellFavoritesNameSpace_MoveSelectionDown(IShellFavoritesNameSpace* This) {
+    return This->lpVtbl->MoveSelectionDown(This);
+}
+static FORCEINLINE HRESULT IShellFavoritesNameSpace_ResetSort(IShellFavoritesNameSpace* This) {
+    return This->lpVtbl->ResetSort(This);
+}
+static FORCEINLINE HRESULT IShellFavoritesNameSpace_NewFolder(IShellFavoritesNameSpace* This) {
+    return This->lpVtbl->NewFolder(This);
+}
+static FORCEINLINE HRESULT IShellFavoritesNameSpace_Synchronize(IShellFavoritesNameSpace* This) {
+    return This->lpVtbl->Synchronize(This);
+}
+static FORCEINLINE HRESULT IShellFavoritesNameSpace_Import(IShellFavoritesNameSpace* This) {
+    return This->lpVtbl->Import(This);
+}
+static FORCEINLINE HRESULT IShellFavoritesNameSpace_Export(IShellFavoritesNameSpace* This) {
+    return This->lpVtbl->Export(This);
+}
+static FORCEINLINE HRESULT IShellFavoritesNameSpace_InvokeContextMenuCommand(IShellFavoritesNameSpace* This,BSTR strCommand) {
+    return This->lpVtbl->InvokeContextMenuCommand(This,strCommand);
+}
+static FORCEINLINE HRESULT IShellFavoritesNameSpace_MoveSelectionTo(IShellFavoritesNameSpace* This) {
+    return This->lpVtbl->MoveSelectionTo(This);
+}
+static FORCEINLINE HRESULT IShellFavoritesNameSpace_get_SubscriptionsEnabled(IShellFavoritesNameSpace* This,VARIANT_BOOL *pBool) {
+    return This->lpVtbl->get_SubscriptionsEnabled(This,pBool);
+}
+static FORCEINLINE HRESULT IShellFavoritesNameSpace_CreateSubscriptionForSelection(IShellFavoritesNameSpace* This,VARIANT_BOOL *pBool) {
+    return This->lpVtbl->CreateSubscriptionForSelection(This,pBool);
+}
+static FORCEINLINE HRESULT IShellFavoritesNameSpace_DeleteSubscriptionForSelection(IShellFavoritesNameSpace* This,VARIANT_BOOL *pBool) {
+    return This->lpVtbl->DeleteSubscriptionForSelection(This,pBool);
+}
+static FORCEINLINE HRESULT IShellFavoritesNameSpace_SetRoot(IShellFavoritesNameSpace* This,BSTR bstrFullPath) {
+    return This->lpVtbl->SetRoot(This,bstrFullPath);
+}
 #endif
 #endif
-  HRESULT WINAPI IShellFavoritesNameSpace_MoveSelectionUp_Proxy(IShellFavoritesNameSpace *This);
-  void __RPC_STUB IShellFavoritesNameSpace_MoveSelectionUp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellFavoritesNameSpace_MoveSelectionDown_Proxy(IShellFavoritesNameSpace *This);
-  void __RPC_STUB IShellFavoritesNameSpace_MoveSelectionDown_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellFavoritesNameSpace_ResetSort_Proxy(IShellFavoritesNameSpace *This);
-  void __RPC_STUB IShellFavoritesNameSpace_ResetSort_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellFavoritesNameSpace_NewFolder_Proxy(IShellFavoritesNameSpace *This);
-  void __RPC_STUB IShellFavoritesNameSpace_NewFolder_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellFavoritesNameSpace_Synchronize_Proxy(IShellFavoritesNameSpace *This);
-  void __RPC_STUB IShellFavoritesNameSpace_Synchronize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellFavoritesNameSpace_Import_Proxy(IShellFavoritesNameSpace *This);
-  void __RPC_STUB IShellFavoritesNameSpace_Import_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellFavoritesNameSpace_Export_Proxy(IShellFavoritesNameSpace *This);
-  void __RPC_STUB IShellFavoritesNameSpace_Export_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellFavoritesNameSpace_InvokeContextMenuCommand_Proxy(IShellFavoritesNameSpace *This,BSTR strCommand);
-  void __RPC_STUB IShellFavoritesNameSpace_InvokeContextMenuCommand_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellFavoritesNameSpace_MoveSelectionTo_Proxy(IShellFavoritesNameSpace *This);
-  void __RPC_STUB IShellFavoritesNameSpace_MoveSelectionTo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellFavoritesNameSpace_get_SubscriptionsEnabled_Proxy(IShellFavoritesNameSpace *This,VARIANT_BOOL *pBool);
-  void __RPC_STUB IShellFavoritesNameSpace_get_SubscriptionsEnabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellFavoritesNameSpace_CreateSubscriptionForSelection_Proxy(IShellFavoritesNameSpace *This,VARIANT_BOOL *pBool);
-  void __RPC_STUB IShellFavoritesNameSpace_CreateSubscriptionForSelection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellFavoritesNameSpace_DeleteSubscriptionForSelection_Proxy(IShellFavoritesNameSpace *This,VARIANT_BOOL *pBool);
-  void __RPC_STUB IShellFavoritesNameSpace_DeleteSubscriptionForSelection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellFavoritesNameSpace_SetRoot_Proxy(IShellFavoritesNameSpace *This,BSTR bstrFullPath);
-  void __RPC_STUB IShellFavoritesNameSpace_SetRoot_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-#endif
 
+#endif
+
+HRESULT STDMETHODCALLTYPE IShellFavoritesNameSpace_MoveSelectionUp_Proxy(
+    IShellFavoritesNameSpace* This);
+void __RPC_STUB IShellFavoritesNameSpace_MoveSelectionUp_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellFavoritesNameSpace_MoveSelectionDown_Proxy(
+    IShellFavoritesNameSpace* This);
+void __RPC_STUB IShellFavoritesNameSpace_MoveSelectionDown_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellFavoritesNameSpace_ResetSort_Proxy(
+    IShellFavoritesNameSpace* This);
+void __RPC_STUB IShellFavoritesNameSpace_ResetSort_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellFavoritesNameSpace_NewFolder_Proxy(
+    IShellFavoritesNameSpace* This);
+void __RPC_STUB IShellFavoritesNameSpace_NewFolder_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellFavoritesNameSpace_Synchronize_Proxy(
+    IShellFavoritesNameSpace* This);
+void __RPC_STUB IShellFavoritesNameSpace_Synchronize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellFavoritesNameSpace_Import_Proxy(
+    IShellFavoritesNameSpace* This);
+void __RPC_STUB IShellFavoritesNameSpace_Import_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellFavoritesNameSpace_Export_Proxy(
+    IShellFavoritesNameSpace* This);
+void __RPC_STUB IShellFavoritesNameSpace_Export_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellFavoritesNameSpace_InvokeContextMenuCommand_Proxy(
+    IShellFavoritesNameSpace* This,
+    BSTR strCommand);
+void __RPC_STUB IShellFavoritesNameSpace_InvokeContextMenuCommand_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellFavoritesNameSpace_MoveSelectionTo_Proxy(
+    IShellFavoritesNameSpace* This);
+void __RPC_STUB IShellFavoritesNameSpace_MoveSelectionTo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellFavoritesNameSpace_get_SubscriptionsEnabled_Proxy(
+    IShellFavoritesNameSpace* This,
+    VARIANT_BOOL *pBool);
+void __RPC_STUB IShellFavoritesNameSpace_get_SubscriptionsEnabled_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellFavoritesNameSpace_CreateSubscriptionForSelection_Proxy(
+    IShellFavoritesNameSpace* This,
+    VARIANT_BOOL *pBool);
+void __RPC_STUB IShellFavoritesNameSpace_CreateSubscriptionForSelection_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellFavoritesNameSpace_DeleteSubscriptionForSelection_Proxy(
+    IShellFavoritesNameSpace* This,
+    VARIANT_BOOL *pBool);
+void __RPC_STUB IShellFavoritesNameSpace_DeleteSubscriptionForSelection_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellFavoritesNameSpace_SetRoot_Proxy(
+    IShellFavoritesNameSpace* This,
+    BSTR bstrFullPath);
+void __RPC_STUB IShellFavoritesNameSpace_SetRoot_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IShellFavoritesNameSpace_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IShellNameSpace interface
+ */
 #ifndef __IShellNameSpace_INTERFACE_DEFINED__
 #define __IShellNameSpace_INTERFACE_DEFINED__
-  EXTERN_C const IID IID_IShellNameSpace;
+
+DEFINE_GUID(IID_IShellNameSpace, 0xe572d3c9, 0x37be, 0x4ae2, 0x82,0x5d, 0xd5,0x21,0x76,0x3e,0x31,0x08);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-  struct IShellNameSpace : public IShellFavoritesNameSpace {
-  public:
-    virtual HRESULT WINAPI get_EnumOptions(LONG *pgrfEnumFlags) = 0;
-    virtual HRESULT WINAPI put_EnumOptions(LONG lVal) = 0;
-    virtual HRESULT WINAPI get_SelectedItem(IDispatch **pItem) = 0;
-    virtual HRESULT WINAPI put_SelectedItem(IDispatch *pItem) = 0;
-    virtual HRESULT WINAPI get_Root(VARIANT *pvar) = 0;
-    virtual HRESULT WINAPI put_Root(VARIANT var) = 0;
-    virtual HRESULT WINAPI get_Depth(int *piDepth) = 0;
-    virtual HRESULT WINAPI put_Depth(int iDepth) = 0;
-    virtual HRESULT WINAPI get_Mode(UINT *puMode) = 0;
-    virtual HRESULT WINAPI put_Mode(UINT uMode) = 0;
-    virtual HRESULT WINAPI get_Flags(DWORD *pdwFlags) = 0;
-    virtual HRESULT WINAPI put_Flags(DWORD dwFlags) = 0;
-    virtual HRESULT WINAPI put_TVFlags(DWORD dwFlags) = 0;
-    virtual HRESULT WINAPI get_TVFlags(DWORD *dwFlags) = 0;
-    virtual HRESULT WINAPI get_Columns(BSTR *bstrColumns) = 0;
-    virtual HRESULT WINAPI put_Columns(BSTR bstrColumns) = 0;
-    virtual HRESULT WINAPI get_CountViewTypes(int *piTypes) = 0;
-    virtual HRESULT WINAPI SetViewType(int iType) = 0;
-    virtual HRESULT WINAPI SelectedItems(IDispatch **ppid) = 0;
-    virtual HRESULT WINAPI Expand(VARIANT var,int iDepth) = 0;
-    virtual HRESULT WINAPI UnselectAll(void) = 0;
-  };
+MIDL_INTERFACE("e572d3c9-37be-4ae2-825d-d521763e3108")
+IShellNameSpace : public IShellFavoritesNameSpace
+{
+    virtual HRESULT STDMETHODCALLTYPE get_EnumOptions(
+        LONG *pgrfEnumFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_EnumOptions(
+        LONG pgrfEnumFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SelectedItem(
+        IDispatch **pItem) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_SelectedItem(
+        IDispatch *pItem) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Root(
+        VARIANT *pvar) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Root(
+        VARIANT pvar) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Depth(
+        int *piDepth) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Depth(
+        int piDepth) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Mode(
+        unsigned int *puMode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Mode(
+        unsigned int puMode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Flags(
+        ULONG *pdwFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Flags(
+        ULONG pdwFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_TVFlags(
+        ULONG dwFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_TVFlags(
+        ULONG *dwFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Columns(
+        BSTR *bstrColumns) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Columns(
+        BSTR bstrColumns) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_CountViewTypes(
+        int *piTypes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetViewType(
+        int iType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SelectedItems(
+        IDispatch **ppid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Expand(
+        VARIANT var,
+        int iDepth) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnselectAll(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IShellNameSpace, 0xe572d3c9, 0x37be, 0x4ae2, 0x82,0x5d, 0xd5,0x21,0x76,0x3e,0x31,0x08)
+#endif
 #else
-  typedef struct IShellNameSpaceVtbl {
+typedef struct IShellNameSpaceVtbl {
     BEGIN_INTERFACE
-      HRESULT (WINAPI *QueryInterface)(IShellNameSpace *This,REFIID riid,void **ppvObject);
-      ULONG (WINAPI *AddRef)(IShellNameSpace *This);
-      ULONG (WINAPI *Release)(IShellNameSpace *This);
-      HRESULT (WINAPI *GetTypeInfoCount)(IShellNameSpace *This,UINT *pctinfo);
-      HRESULT (WINAPI *GetTypeInfo)(IShellNameSpace *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
-      HRESULT (WINAPI *GetIDsOfNames)(IShellNameSpace *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
-      HRESULT (WINAPI *Invoke)(IShellNameSpace *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
-      HRESULT (WINAPI *MoveSelectionUp)(IShellNameSpace *This);
-      HRESULT (WINAPI *MoveSelectionDown)(IShellNameSpace *This);
-      HRESULT (WINAPI *ResetSort)(IShellNameSpace *This);
-      HRESULT (WINAPI *NewFolder)(IShellNameSpace *This);
-      HRESULT (WINAPI *Synchronize)(IShellNameSpace *This);
-      HRESULT (WINAPI *Import)(IShellNameSpace *This);
-      HRESULT (WINAPI *Export)(IShellNameSpace *This);
-      HRESULT (WINAPI *InvokeContextMenuCommand)(IShellNameSpace *This,BSTR strCommand);
-      HRESULT (WINAPI *MoveSelectionTo)(IShellNameSpace *This);
-      HRESULT (WINAPI *get_SubscriptionsEnabled)(IShellNameSpace *This,VARIANT_BOOL *pBool);
-      HRESULT (WINAPI *CreateSubscriptionForSelection)(IShellNameSpace *This,VARIANT_BOOL *pBool);
-      HRESULT (WINAPI *DeleteSubscriptionForSelection)(IShellNameSpace *This,VARIANT_BOOL *pBool);
-      HRESULT (WINAPI *SetRoot)(IShellNameSpace *This,BSTR bstrFullPath);
-      HRESULT (WINAPI *get_EnumOptions)(IShellNameSpace *This,LONG *pgrfEnumFlags);
-      HRESULT (WINAPI *put_EnumOptions)(IShellNameSpace *This,LONG lVal);
-      HRESULT (WINAPI *get_SelectedItem)(IShellNameSpace *This,IDispatch **pItem);
-      HRESULT (WINAPI *put_SelectedItem)(IShellNameSpace *This,IDispatch *pItem);
-      HRESULT (WINAPI *get_Root)(IShellNameSpace *This,VARIANT *pvar);
-      HRESULT (WINAPI *put_Root)(IShellNameSpace *This,VARIANT var);
-      HRESULT (WINAPI *get_Depth)(IShellNameSpace *This,int *piDepth);
-      HRESULT (WINAPI *put_Depth)(IShellNameSpace *This,int iDepth);
-      HRESULT (WINAPI *get_Mode)(IShellNameSpace *This,UINT *puMode);
-      HRESULT (WINAPI *put_Mode)(IShellNameSpace *This,UINT uMode);
-      HRESULT (WINAPI *get_Flags)(IShellNameSpace *This,DWORD *pdwFlags);
-      HRESULT (WINAPI *put_Flags)(IShellNameSpace *This,DWORD dwFlags);
-      HRESULT (WINAPI *put_TVFlags)(IShellNameSpace *This,DWORD dwFlags);
-      HRESULT (WINAPI *get_TVFlags)(IShellNameSpace *This,DWORD *dwFlags);
-      HRESULT (WINAPI *get_Columns)(IShellNameSpace *This,BSTR *bstrColumns);
-      HRESULT (WINAPI *put_Columns)(IShellNameSpace *This,BSTR bstrColumns);
-      HRESULT (WINAPI *get_CountViewTypes)(IShellNameSpace *This,int *piTypes);
-      HRESULT (WINAPI *SetViewType)(IShellNameSpace *This,int iType);
-      HRESULT (WINAPI *SelectedItems)(IShellNameSpace *This,IDispatch **ppid);
-      HRESULT (WINAPI *Expand)(IShellNameSpace *This,VARIANT var,int iDepth);
-      HRESULT (WINAPI *UnselectAll)(IShellNameSpace *This);
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IShellNameSpace* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IShellNameSpace* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IShellNameSpace* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IShellNameSpace* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IShellNameSpace* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IShellNameSpace* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IShellNameSpace* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IShellFavoritesNameSpace methods ***/
+    HRESULT (STDMETHODCALLTYPE *MoveSelectionUp)(
+        IShellNameSpace* This);
+
+    HRESULT (STDMETHODCALLTYPE *MoveSelectionDown)(
+        IShellNameSpace* This);
+
+    HRESULT (STDMETHODCALLTYPE *ResetSort)(
+        IShellNameSpace* This);
+
+    HRESULT (STDMETHODCALLTYPE *NewFolder)(
+        IShellNameSpace* This);
+
+    HRESULT (STDMETHODCALLTYPE *Synchronize)(
+        IShellNameSpace* This);
+
+    HRESULT (STDMETHODCALLTYPE *Import)(
+        IShellNameSpace* This);
+
+    HRESULT (STDMETHODCALLTYPE *Export)(
+        IShellNameSpace* This);
+
+    HRESULT (STDMETHODCALLTYPE *InvokeContextMenuCommand)(
+        IShellNameSpace* This,
+        BSTR strCommand);
+
+    HRESULT (STDMETHODCALLTYPE *MoveSelectionTo)(
+        IShellNameSpace* This);
+
+    HRESULT (STDMETHODCALLTYPE *get_SubscriptionsEnabled)(
+        IShellNameSpace* This,
+        VARIANT_BOOL *pBool);
+
+    HRESULT (STDMETHODCALLTYPE *CreateSubscriptionForSelection)(
+        IShellNameSpace* This,
+        VARIANT_BOOL *pBool);
+
+    HRESULT (STDMETHODCALLTYPE *DeleteSubscriptionForSelection)(
+        IShellNameSpace* This,
+        VARIANT_BOOL *pBool);
+
+    HRESULT (STDMETHODCALLTYPE *SetRoot)(
+        IShellNameSpace* This,
+        BSTR bstrFullPath);
+
+    /*** IShellNameSpace methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_EnumOptions)(
+        IShellNameSpace* This,
+        LONG *pgrfEnumFlags);
+
+    HRESULT (STDMETHODCALLTYPE *put_EnumOptions)(
+        IShellNameSpace* This,
+        LONG pgrfEnumFlags);
+
+    HRESULT (STDMETHODCALLTYPE *get_SelectedItem)(
+        IShellNameSpace* This,
+        IDispatch **pItem);
+
+    HRESULT (STDMETHODCALLTYPE *put_SelectedItem)(
+        IShellNameSpace* This,
+        IDispatch *pItem);
+
+    HRESULT (STDMETHODCALLTYPE *get_Root)(
+        IShellNameSpace* This,
+        VARIANT *pvar);
+
+    HRESULT (STDMETHODCALLTYPE *put_Root)(
+        IShellNameSpace* This,
+        VARIANT pvar);
+
+    HRESULT (STDMETHODCALLTYPE *get_Depth)(
+        IShellNameSpace* This,
+        int *piDepth);
+
+    HRESULT (STDMETHODCALLTYPE *put_Depth)(
+        IShellNameSpace* This,
+        int piDepth);
+
+    HRESULT (STDMETHODCALLTYPE *get_Mode)(
+        IShellNameSpace* This,
+        unsigned int *puMode);
+
+    HRESULT (STDMETHODCALLTYPE *put_Mode)(
+        IShellNameSpace* This,
+        unsigned int puMode);
+
+    HRESULT (STDMETHODCALLTYPE *get_Flags)(
+        IShellNameSpace* This,
+        ULONG *pdwFlags);
+
+    HRESULT (STDMETHODCALLTYPE *put_Flags)(
+        IShellNameSpace* This,
+        ULONG pdwFlags);
+
+    HRESULT (STDMETHODCALLTYPE *put_TVFlags)(
+        IShellNameSpace* This,
+        ULONG dwFlags);
+
+    HRESULT (STDMETHODCALLTYPE *get_TVFlags)(
+        IShellNameSpace* This,
+        ULONG *dwFlags);
+
+    HRESULT (STDMETHODCALLTYPE *get_Columns)(
+        IShellNameSpace* This,
+        BSTR *bstrColumns);
+
+    HRESULT (STDMETHODCALLTYPE *put_Columns)(
+        IShellNameSpace* This,
+        BSTR bstrColumns);
+
+    HRESULT (STDMETHODCALLTYPE *get_CountViewTypes)(
+        IShellNameSpace* This,
+        int *piTypes);
+
+    HRESULT (STDMETHODCALLTYPE *SetViewType)(
+        IShellNameSpace* This,
+        int iType);
+
+    HRESULT (STDMETHODCALLTYPE *SelectedItems)(
+        IShellNameSpace* This,
+        IDispatch **ppid);
+
+    HRESULT (STDMETHODCALLTYPE *Expand)(
+        IShellNameSpace* This,
+        VARIANT var,
+        int iDepth);
+
+    HRESULT (STDMETHODCALLTYPE *UnselectAll)(
+        IShellNameSpace* This);
+
     END_INTERFACE
-  } IShellNameSpaceVtbl;
-  struct IShellNameSpace {
-    CONST_VTBL struct IShellNameSpaceVtbl *lpVtbl;
-  };
+} IShellNameSpaceVtbl;
+interface IShellNameSpace {
+    CONST_VTBL IShellNameSpaceVtbl* lpVtbl;
+};
+
 #ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
 #define IShellNameSpace_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define IShellNameSpace_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define IShellNameSpace_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
 #define IShellNameSpace_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
 #define IShellNameSpace_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
 #define IShellNameSpace_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
 #define IShellNameSpace_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IShellFavoritesNameSpace methods ***/
 #define IShellNameSpace_MoveSelectionUp(This) (This)->lpVtbl->MoveSelectionUp(This)
 #define IShellNameSpace_MoveSelectionDown(This) (This)->lpVtbl->MoveSelectionDown(This)
 #define IShellNameSpace_ResetSort(This) (This)->lpVtbl->ResetSort(This)
@@ -1339,18 +4872,19 @@
 #define IShellNameSpace_CreateSubscriptionForSelection(This,pBool) (This)->lpVtbl->CreateSubscriptionForSelection(This,pBool)
 #define IShellNameSpace_DeleteSubscriptionForSelection(This,pBool) (This)->lpVtbl->DeleteSubscriptionForSelection(This,pBool)
 #define IShellNameSpace_SetRoot(This,bstrFullPath) (This)->lpVtbl->SetRoot(This,bstrFullPath)
+/*** IShellNameSpace methods ***/
 #define IShellNameSpace_get_EnumOptions(This,pgrfEnumFlags) (This)->lpVtbl->get_EnumOptions(This,pgrfEnumFlags)
-#define IShellNameSpace_put_EnumOptions(This,lVal) (This)->lpVtbl->put_EnumOptions(This,lVal)
+#define IShellNameSpace_put_EnumOptions(This,pgrfEnumFlags) (This)->lpVtbl->put_EnumOptions(This,pgrfEnumFlags)
 #define IShellNameSpace_get_SelectedItem(This,pItem) (This)->lpVtbl->get_SelectedItem(This,pItem)
 #define IShellNameSpace_put_SelectedItem(This,pItem) (This)->lpVtbl->put_SelectedItem(This,pItem)
 #define IShellNameSpace_get_Root(This,pvar) (This)->lpVtbl->get_Root(This,pvar)
-#define IShellNameSpace_put_Root(This,var) (This)->lpVtbl->put_Root(This,var)
+#define IShellNameSpace_put_Root(This,pvar) (This)->lpVtbl->put_Root(This,pvar)
 #define IShellNameSpace_get_Depth(This,piDepth) (This)->lpVtbl->get_Depth(This,piDepth)
-#define IShellNameSpace_put_Depth(This,iDepth) (This)->lpVtbl->put_Depth(This,iDepth)
+#define IShellNameSpace_put_Depth(This,piDepth) (This)->lpVtbl->put_Depth(This,piDepth)
 #define IShellNameSpace_get_Mode(This,puMode) (This)->lpVtbl->get_Mode(This,puMode)
-#define IShellNameSpace_put_Mode(This,uMode) (This)->lpVtbl->put_Mode(This,uMode)
+#define IShellNameSpace_put_Mode(This,puMode) (This)->lpVtbl->put_Mode(This,puMode)
 #define IShellNameSpace_get_Flags(This,pdwFlags) (This)->lpVtbl->get_Flags(This,pdwFlags)
-#define IShellNameSpace_put_Flags(This,dwFlags) (This)->lpVtbl->put_Flags(This,dwFlags)
+#define IShellNameSpace_put_Flags(This,pdwFlags) (This)->lpVtbl->put_Flags(This,pdwFlags)
 #define IShellNameSpace_put_TVFlags(This,dwFlags) (This)->lpVtbl->put_TVFlags(This,dwFlags)
 #define IShellNameSpace_get_TVFlags(This,dwFlags) (This)->lpVtbl->get_TVFlags(This,dwFlags)
 #define IShellNameSpace_get_Columns(This,bstrColumns) (This)->lpVtbl->get_Columns(This,bstrColumns)
@@ -1360,115 +4894,512 @@
 #define IShellNameSpace_SelectedItems(This,ppid) (This)->lpVtbl->SelectedItems(This,ppid)
 #define IShellNameSpace_Expand(This,var,iDepth) (This)->lpVtbl->Expand(This,var,iDepth)
 #define IShellNameSpace_UnselectAll(This) (This)->lpVtbl->UnselectAll(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IShellNameSpace_QueryInterface(IShellNameSpace* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IShellNameSpace_AddRef(IShellNameSpace* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IShellNameSpace_Release(IShellNameSpace* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IShellNameSpace_GetTypeInfoCount(IShellNameSpace* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IShellNameSpace_GetTypeInfo(IShellNameSpace* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IShellNameSpace_GetIDsOfNames(IShellNameSpace* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IShellNameSpace_Invoke(IShellNameSpace* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IShellFavoritesNameSpace methods ***/
+static FORCEINLINE HRESULT IShellNameSpace_MoveSelectionUp(IShellNameSpace* This) {
+    return This->lpVtbl->MoveSelectionUp(This);
+}
+static FORCEINLINE HRESULT IShellNameSpace_MoveSelectionDown(IShellNameSpace* This) {
+    return This->lpVtbl->MoveSelectionDown(This);
+}
+static FORCEINLINE HRESULT IShellNameSpace_ResetSort(IShellNameSpace* This) {
+    return This->lpVtbl->ResetSort(This);
+}
+static FORCEINLINE HRESULT IShellNameSpace_NewFolder(IShellNameSpace* This) {
+    return This->lpVtbl->NewFolder(This);
+}
+static FORCEINLINE HRESULT IShellNameSpace_Synchronize(IShellNameSpace* This) {
+    return This->lpVtbl->Synchronize(This);
+}
+static FORCEINLINE HRESULT IShellNameSpace_Import(IShellNameSpace* This) {
+    return This->lpVtbl->Import(This);
+}
+static FORCEINLINE HRESULT IShellNameSpace_Export(IShellNameSpace* This) {
+    return This->lpVtbl->Export(This);
+}
+static FORCEINLINE HRESULT IShellNameSpace_InvokeContextMenuCommand(IShellNameSpace* This,BSTR strCommand) {
+    return This->lpVtbl->InvokeContextMenuCommand(This,strCommand);
+}
+static FORCEINLINE HRESULT IShellNameSpace_MoveSelectionTo(IShellNameSpace* This) {
+    return This->lpVtbl->MoveSelectionTo(This);
+}
+static FORCEINLINE HRESULT IShellNameSpace_get_SubscriptionsEnabled(IShellNameSpace* This,VARIANT_BOOL *pBool) {
+    return This->lpVtbl->get_SubscriptionsEnabled(This,pBool);
+}
+static FORCEINLINE HRESULT IShellNameSpace_CreateSubscriptionForSelection(IShellNameSpace* This,VARIANT_BOOL *pBool) {
+    return This->lpVtbl->CreateSubscriptionForSelection(This,pBool);
+}
+static FORCEINLINE HRESULT IShellNameSpace_DeleteSubscriptionForSelection(IShellNameSpace* This,VARIANT_BOOL *pBool) {
+    return This->lpVtbl->DeleteSubscriptionForSelection(This,pBool);
+}
+static FORCEINLINE HRESULT IShellNameSpace_SetRoot(IShellNameSpace* This,BSTR bstrFullPath) {
+    return This->lpVtbl->SetRoot(This,bstrFullPath);
+}
+/*** IShellNameSpace methods ***/
+static FORCEINLINE HRESULT IShellNameSpace_get_EnumOptions(IShellNameSpace* This,LONG *pgrfEnumFlags) {
+    return This->lpVtbl->get_EnumOptions(This,pgrfEnumFlags);
+}
+static FORCEINLINE HRESULT IShellNameSpace_put_EnumOptions(IShellNameSpace* This,LONG pgrfEnumFlags) {
+    return This->lpVtbl->put_EnumOptions(This,pgrfEnumFlags);
+}
+static FORCEINLINE HRESULT IShellNameSpace_get_SelectedItem(IShellNameSpace* This,IDispatch **pItem) {
+    return This->lpVtbl->get_SelectedItem(This,pItem);
+}
+static FORCEINLINE HRESULT IShellNameSpace_put_SelectedItem(IShellNameSpace* This,IDispatch *pItem) {
+    return This->lpVtbl->put_SelectedItem(This,pItem);
+}
+static FORCEINLINE HRESULT IShellNameSpace_get_Root(IShellNameSpace* This,VARIANT *pvar) {
+    return This->lpVtbl->get_Root(This,pvar);
+}
+static FORCEINLINE HRESULT IShellNameSpace_put_Root(IShellNameSpace* This,VARIANT pvar) {
+    return This->lpVtbl->put_Root(This,pvar);
+}
+static FORCEINLINE HRESULT IShellNameSpace_get_Depth(IShellNameSpace* This,int *piDepth) {
+    return This->lpVtbl->get_Depth(This,piDepth);
+}
+static FORCEINLINE HRESULT IShellNameSpace_put_Depth(IShellNameSpace* This,int piDepth) {
+    return This->lpVtbl->put_Depth(This,piDepth);
+}
+static FORCEINLINE HRESULT IShellNameSpace_get_Mode(IShellNameSpace* This,unsigned int *puMode) {
+    return This->lpVtbl->get_Mode(This,puMode);
+}
+static FORCEINLINE HRESULT IShellNameSpace_put_Mode(IShellNameSpace* This,unsigned int puMode) {
+    return This->lpVtbl->put_Mode(This,puMode);
+}
+static FORCEINLINE HRESULT IShellNameSpace_get_Flags(IShellNameSpace* This,ULONG *pdwFlags) {
+    return This->lpVtbl->get_Flags(This,pdwFlags);
+}
+static FORCEINLINE HRESULT IShellNameSpace_put_Flags(IShellNameSpace* This,ULONG pdwFlags) {
+    return This->lpVtbl->put_Flags(This,pdwFlags);
+}
+static FORCEINLINE HRESULT IShellNameSpace_put_TVFlags(IShellNameSpace* This,ULONG dwFlags) {
+    return This->lpVtbl->put_TVFlags(This,dwFlags);
+}
+static FORCEINLINE HRESULT IShellNameSpace_get_TVFlags(IShellNameSpace* This,ULONG *dwFlags) {
+    return This->lpVtbl->get_TVFlags(This,dwFlags);
+}
+static FORCEINLINE HRESULT IShellNameSpace_get_Columns(IShellNameSpace* This,BSTR *bstrColumns) {
+    return This->lpVtbl->get_Columns(This,bstrColumns);
+}
+static FORCEINLINE HRESULT IShellNameSpace_put_Columns(IShellNameSpace* This,BSTR bstrColumns) {
+    return This->lpVtbl->put_Columns(This,bstrColumns);
+}
+static FORCEINLINE HRESULT IShellNameSpace_get_CountViewTypes(IShellNameSpace* This,int *piTypes) {
+    return This->lpVtbl->get_CountViewTypes(This,piTypes);
+}
+static FORCEINLINE HRESULT IShellNameSpace_SetViewType(IShellNameSpace* This,int iType) {
+    return This->lpVtbl->SetViewType(This,iType);
+}
+static FORCEINLINE HRESULT IShellNameSpace_SelectedItems(IShellNameSpace* This,IDispatch **ppid) {
+    return This->lpVtbl->SelectedItems(This,ppid);
+}
+static FORCEINLINE HRESULT IShellNameSpace_Expand(IShellNameSpace* This,VARIANT var,int iDepth) {
+    return This->lpVtbl->Expand(This,var,iDepth);
+}
+static FORCEINLINE HRESULT IShellNameSpace_UnselectAll(IShellNameSpace* This) {
+    return This->lpVtbl->UnselectAll(This);
+}
 #endif
 #endif
-  HRESULT WINAPI IShellNameSpace_get_EnumOptions_Proxy(IShellNameSpace *This,LONG *pgrfEnumFlags);
-  void __RPC_STUB IShellNameSpace_get_EnumOptions_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellNameSpace_put_EnumOptions_Proxy(IShellNameSpace *This,LONG lVal);
-  void __RPC_STUB IShellNameSpace_put_EnumOptions_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellNameSpace_get_SelectedItem_Proxy(IShellNameSpace *This,IDispatch **pItem);
-  void __RPC_STUB IShellNameSpace_get_SelectedItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellNameSpace_put_SelectedItem_Proxy(IShellNameSpace *This,IDispatch *pItem);
-  void __RPC_STUB IShellNameSpace_put_SelectedItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellNameSpace_get_Root_Proxy(IShellNameSpace *This,VARIANT *pvar);
-  void __RPC_STUB IShellNameSpace_get_Root_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellNameSpace_put_Root_Proxy(IShellNameSpace *This,VARIANT var);
-  void __RPC_STUB IShellNameSpace_put_Root_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellNameSpace_get_Depth_Proxy(IShellNameSpace *This,int *piDepth);
-  void __RPC_STUB IShellNameSpace_get_Depth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellNameSpace_put_Depth_Proxy(IShellNameSpace *This,int iDepth);
-  void __RPC_STUB IShellNameSpace_put_Depth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellNameSpace_get_Mode_Proxy(IShellNameSpace *This,UINT *puMode);
-  void __RPC_STUB IShellNameSpace_get_Mode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellNameSpace_put_Mode_Proxy(IShellNameSpace *This,UINT uMode);
-  void __RPC_STUB IShellNameSpace_put_Mode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellNameSpace_get_Flags_Proxy(IShellNameSpace *This,DWORD *pdwFlags);
-  void __RPC_STUB IShellNameSpace_get_Flags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellNameSpace_put_Flags_Proxy(IShellNameSpace *This,DWORD dwFlags);
-  void __RPC_STUB IShellNameSpace_put_Flags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellNameSpace_put_TVFlags_Proxy(IShellNameSpace *This,DWORD dwFlags);
-  void __RPC_STUB IShellNameSpace_put_TVFlags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellNameSpace_get_TVFlags_Proxy(IShellNameSpace *This,DWORD *dwFlags);
-  void __RPC_STUB IShellNameSpace_get_TVFlags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellNameSpace_get_Columns_Proxy(IShellNameSpace *This,BSTR *bstrColumns);
-  void __RPC_STUB IShellNameSpace_get_Columns_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellNameSpace_put_Columns_Proxy(IShellNameSpace *This,BSTR bstrColumns);
-  void __RPC_STUB IShellNameSpace_put_Columns_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellNameSpace_get_CountViewTypes_Proxy(IShellNameSpace *This,int *piTypes);
-  void __RPC_STUB IShellNameSpace_get_CountViewTypes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellNameSpace_SetViewType_Proxy(IShellNameSpace *This,int iType);
-  void __RPC_STUB IShellNameSpace_SetViewType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellNameSpace_SelectedItems_Proxy(IShellNameSpace *This,IDispatch **ppid);
-  void __RPC_STUB IShellNameSpace_SelectedItems_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellNameSpace_Expand_Proxy(IShellNameSpace *This,VARIANT var,int iDepth);
-  void __RPC_STUB IShellNameSpace_Expand_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IShellNameSpace_UnselectAll_Proxy(IShellNameSpace *This);
-  void __RPC_STUB IShellNameSpace_UnselectAll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-#endif
 
-  EXTERN_C const CLSID CLSID_ShellNameSpace;
+#endif
+
+HRESULT STDMETHODCALLTYPE IShellNameSpace_get_EnumOptions_Proxy(
+    IShellNameSpace* This,
+    LONG *pgrfEnumFlags);
+void __RPC_STUB IShellNameSpace_get_EnumOptions_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellNameSpace_put_EnumOptions_Proxy(
+    IShellNameSpace* This,
+    LONG pgrfEnumFlags);
+void __RPC_STUB IShellNameSpace_put_EnumOptions_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellNameSpace_get_SelectedItem_Proxy(
+    IShellNameSpace* This,
+    IDispatch **pItem);
+void __RPC_STUB IShellNameSpace_get_SelectedItem_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellNameSpace_put_SelectedItem_Proxy(
+    IShellNameSpace* This,
+    IDispatch *pItem);
+void __RPC_STUB IShellNameSpace_put_SelectedItem_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellNameSpace_get_Root_Proxy(
+    IShellNameSpace* This,
+    VARIANT *pvar);
+void __RPC_STUB IShellNameSpace_get_Root_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellNameSpace_put_Root_Proxy(
+    IShellNameSpace* This,
+    VARIANT pvar);
+void __RPC_STUB IShellNameSpace_put_Root_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellNameSpace_get_Depth_Proxy(
+    IShellNameSpace* This,
+    int *piDepth);
+void __RPC_STUB IShellNameSpace_get_Depth_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellNameSpace_put_Depth_Proxy(
+    IShellNameSpace* This,
+    int piDepth);
+void __RPC_STUB IShellNameSpace_put_Depth_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellNameSpace_get_Mode_Proxy(
+    IShellNameSpace* This,
+    unsigned int *puMode);
+void __RPC_STUB IShellNameSpace_get_Mode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellNameSpace_put_Mode_Proxy(
+    IShellNameSpace* This,
+    unsigned int puMode);
+void __RPC_STUB IShellNameSpace_put_Mode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellNameSpace_get_Flags_Proxy(
+    IShellNameSpace* This,
+    ULONG *pdwFlags);
+void __RPC_STUB IShellNameSpace_get_Flags_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellNameSpace_put_Flags_Proxy(
+    IShellNameSpace* This,
+    ULONG pdwFlags);
+void __RPC_STUB IShellNameSpace_put_Flags_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellNameSpace_put_TVFlags_Proxy(
+    IShellNameSpace* This,
+    ULONG dwFlags);
+void __RPC_STUB IShellNameSpace_put_TVFlags_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellNameSpace_get_TVFlags_Proxy(
+    IShellNameSpace* This,
+    ULONG *dwFlags);
+void __RPC_STUB IShellNameSpace_get_TVFlags_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellNameSpace_get_Columns_Proxy(
+    IShellNameSpace* This,
+    BSTR *bstrColumns);
+void __RPC_STUB IShellNameSpace_get_Columns_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellNameSpace_put_Columns_Proxy(
+    IShellNameSpace* This,
+    BSTR bstrColumns);
+void __RPC_STUB IShellNameSpace_put_Columns_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellNameSpace_get_CountViewTypes_Proxy(
+    IShellNameSpace* This,
+    int *piTypes);
+void __RPC_STUB IShellNameSpace_get_CountViewTypes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellNameSpace_SetViewType_Proxy(
+    IShellNameSpace* This,
+    int iType);
+void __RPC_STUB IShellNameSpace_SetViewType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellNameSpace_SelectedItems_Proxy(
+    IShellNameSpace* This,
+    IDispatch **ppid);
+void __RPC_STUB IShellNameSpace_SelectedItems_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellNameSpace_Expand_Proxy(
+    IShellNameSpace* This,
+    VARIANT var,
+    int iDepth);
+void __RPC_STUB IShellNameSpace_Expand_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IShellNameSpace_UnselectAll_Proxy(
+    IShellNameSpace* This);
+void __RPC_STUB IShellNameSpace_UnselectAll_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IShellNameSpace_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ShellShellNameSpace coclass
+ */
+
+DEFINE_GUID(CLSID_ShellShellNameSpace, 0x2f2f1f96, 0x2bc1, 0x4b1c, 0xbe,0x28, 0xea,0x37,0x74,0xf4,0x67,0x6a);
+
 #ifdef __cplusplus
-  class ShellNameSpace;
+class DECLSPEC_UUID("2f2f1f96-2bc1-4b1c-be28-ea3774f4676a") ShellShellNameSpace;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ShellShellNameSpace, 0x2f2f1f96, 0x2bc1, 0x4b1c, 0xbe,0x28, 0xea,0x37,0x74,0xf4,0x67,0x6a)
+#endif
 #endif
 
+/*****************************************************************************
+ * ShellNameSpace coclass
+ */
+
+DEFINE_GUID(CLSID_ShellNameSpace, 0x55136805, 0xb2de, 0x11d1, 0xb9,0xf2, 0x00,0xa0,0xc9,0x8b,0xc5,0x47);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("55136805-b2de-11d1-b9f2-00a0c98bc547") ShellNameSpace;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ShellNameSpace, 0x55136805, 0xb2de, 0x11d1, 0xb9,0xf2, 0x00,0xa0,0xc9,0x8b,0xc5,0x47)
+#endif
+#endif
+
+/*****************************************************************************
+ * IScriptErrorList interface
+ */
 #ifndef __IScriptErrorList_INTERFACE_DEFINED__
 #define __IScriptErrorList_INTERFACE_DEFINED__
-  EXTERN_C const IID IID_IScriptErrorList;
+
+DEFINE_GUID(IID_IScriptErrorList, 0xf3470f24, 0x15fd, 0x11d2, 0xbb,0x2e, 0x00,0x80,0x5f,0xf7,0xef,0xca);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-  struct IScriptErrorList : public IDispatch {
-  public:
-    virtual HRESULT WINAPI advanceError(void) = 0;
-    virtual HRESULT WINAPI retreatError(void) = 0;
-    virtual HRESULT WINAPI canAdvanceError(WINBOOL *pfCanAdvance) = 0;
-    virtual HRESULT WINAPI canRetreatError(WINBOOL *pfCanRetreat) = 0;
-    virtual HRESULT WINAPI getErrorLine(LONG *plLine) = 0;
-    virtual HRESULT WINAPI getErrorChar(LONG *plChar) = 0;
-    virtual HRESULT WINAPI getErrorCode(LONG *plCode) = 0;
-    virtual HRESULT WINAPI getErrorMsg(BSTR *pstr) = 0;
-    virtual HRESULT WINAPI getErrorUrl(BSTR *pstr) = 0;
-    virtual HRESULT WINAPI getAlwaysShowLockState(WINBOOL *pfAlwaysShowLocked) = 0;
-    virtual HRESULT WINAPI getDetailsPaneOpen(WINBOOL *pfDetailsPaneOpen) = 0;
-    virtual HRESULT WINAPI setDetailsPaneOpen(WINBOOL fDetailsPaneOpen) = 0;
-    virtual HRESULT WINAPI getPerErrorDisplay(WINBOOL *pfPerErrorDisplay) = 0;
-    virtual HRESULT WINAPI setPerErrorDisplay(WINBOOL fPerErrorDisplay) = 0;
-  };
+MIDL_INTERFACE("f3470f24-15fd-11d2-bb2e-00805ff7efca")
+IScriptErrorList : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE advanceError(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE retreatError(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE canAdvanceError(
+        LONG *pfCanAdvance) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE canRetreatError(
+        LONG *pfCanRetreat) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE getErrorLine(
+        LONG *plLine) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE getErrorChar(
+        LONG *plChar) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE getErrorCode(
+        LONG *plCode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE getErrorMsg(
+        BSTR *pstr) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE getErrorUrl(
+        BSTR *pstr) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE getAlwaysShowLockState(
+        LONG *pfAlwaysShowLocked) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE getDetailsPaneOpen(
+        LONG *pfDetailsPaneOpen) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE setDetailsPaneOpen(
+        LONG fDetailsPaneOpen) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE getPerErrorDisplay(
+        LONG *pfPerErrorDisplay) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE setPerErrorDisplay(
+        LONG fPerErrorDisplay) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IScriptErrorList, 0xf3470f24, 0x15fd, 0x11d2, 0xbb,0x2e, 0x00,0x80,0x5f,0xf7,0xef,0xca)
+#endif
 #else
-  typedef struct IScriptErrorListVtbl {
+typedef struct IScriptErrorListVtbl {
     BEGIN_INTERFACE
-      HRESULT (WINAPI *QueryInterface)(IScriptErrorList *This,REFIID riid,void **ppvObject);
-      ULONG (WINAPI *AddRef)(IScriptErrorList *This);
-      ULONG (WINAPI *Release)(IScriptErrorList *This);
-      HRESULT (WINAPI *GetTypeInfoCount)(IScriptErrorList *This,UINT *pctinfo);
-      HRESULT (WINAPI *GetTypeInfo)(IScriptErrorList *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
-      HRESULT (WINAPI *GetIDsOfNames)(IScriptErrorList *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
-      HRESULT (WINAPI *Invoke)(IScriptErrorList *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
-      HRESULT (WINAPI *advanceError)(IScriptErrorList *This);
-      HRESULT (WINAPI *retreatError)(IScriptErrorList *This);
-      HRESULT (WINAPI *canAdvanceError)(IScriptErrorList *This,WINBOOL *pfCanAdvance);
-      HRESULT (WINAPI *canRetreatError)(IScriptErrorList *This,WINBOOL *pfCanRetreat);
-      HRESULT (WINAPI *getErrorLine)(IScriptErrorList *This,LONG *plLine);
-      HRESULT (WINAPI *getErrorChar)(IScriptErrorList *This,LONG *plChar);
-      HRESULT (WINAPI *getErrorCode)(IScriptErrorList *This,LONG *plCode);
-      HRESULT (WINAPI *getErrorMsg)(IScriptErrorList *This,BSTR *pstr);
-      HRESULT (WINAPI *getErrorUrl)(IScriptErrorList *This,BSTR *pstr);
-      HRESULT (WINAPI *getAlwaysShowLockState)(IScriptErrorList *This,WINBOOL *pfAlwaysShowLocked);
-      HRESULT (WINAPI *getDetailsPaneOpen)(IScriptErrorList *This,WINBOOL *pfDetailsPaneOpen);
-      HRESULT (WINAPI *setDetailsPaneOpen)(IScriptErrorList *This,WINBOOL fDetailsPaneOpen);
-      HRESULT (WINAPI *getPerErrorDisplay)(IScriptErrorList *This,WINBOOL *pfPerErrorDisplay);
-      HRESULT (WINAPI *setPerErrorDisplay)(IScriptErrorList *This,WINBOOL fPerErrorDisplay);
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IScriptErrorList* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IScriptErrorList* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IScriptErrorList* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IScriptErrorList* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IScriptErrorList* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IScriptErrorList* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IScriptErrorList* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IScriptErrorList methods ***/
+    HRESULT (STDMETHODCALLTYPE *advanceError)(
+        IScriptErrorList* This);
+
+    HRESULT (STDMETHODCALLTYPE *retreatError)(
+        IScriptErrorList* This);
+
+    HRESULT (STDMETHODCALLTYPE *canAdvanceError)(
+        IScriptErrorList* This,
+        LONG *pfCanAdvance);
+
+    HRESULT (STDMETHODCALLTYPE *canRetreatError)(
+        IScriptErrorList* This,
+        LONG *pfCanRetreat);
+
+    HRESULT (STDMETHODCALLTYPE *getErrorLine)(
+        IScriptErrorList* This,
+        LONG *plLine);
+
+    HRESULT (STDMETHODCALLTYPE *getErrorChar)(
+        IScriptErrorList* This,
+        LONG *plChar);
+
+    HRESULT (STDMETHODCALLTYPE *getErrorCode)(
+        IScriptErrorList* This,
+        LONG *plCode);
+
+    HRESULT (STDMETHODCALLTYPE *getErrorMsg)(
+        IScriptErrorList* This,
+        BSTR *pstr);
+
+    HRESULT (STDMETHODCALLTYPE *getErrorUrl)(
+        IScriptErrorList* This,
+        BSTR *pstr);
+
+    HRESULT (STDMETHODCALLTYPE *getAlwaysShowLockState)(
+        IScriptErrorList* This,
+        LONG *pfAlwaysShowLocked);
+
+    HRESULT (STDMETHODCALLTYPE *getDetailsPaneOpen)(
+        IScriptErrorList* This,
+        LONG *pfDetailsPaneOpen);
+
+    HRESULT (STDMETHODCALLTYPE *setDetailsPaneOpen)(
+        IScriptErrorList* This,
+        LONG fDetailsPaneOpen);
+
+    HRESULT (STDMETHODCALLTYPE *getPerErrorDisplay)(
+        IScriptErrorList* This,
+        LONG *pfPerErrorDisplay);
+
+    HRESULT (STDMETHODCALLTYPE *setPerErrorDisplay)(
+        IScriptErrorList* This,
+        LONG fPerErrorDisplay);
+
     END_INTERFACE
-  } IScriptErrorListVtbl;
-  struct IScriptErrorList {
-    CONST_VTBL struct IScriptErrorListVtbl *lpVtbl;
-  };
+} IScriptErrorListVtbl;
+interface IScriptErrorList {
+    CONST_VTBL IScriptErrorListVtbl* lpVtbl;
+};
+
 #ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
 #define IScriptErrorList_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define IScriptErrorList_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define IScriptErrorList_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
 #define IScriptErrorList_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
 #define IScriptErrorList_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
 #define IScriptErrorList_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
 #define IScriptErrorList_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IScriptErrorList methods ***/
 #define IScriptErrorList_advanceError(This) (This)->lpVtbl->advanceError(This)
 #define IScriptErrorList_retreatError(This) (This)->lpVtbl->retreatError(This)
 #define IScriptErrorList_canAdvanceError(This,pfCanAdvance) (This)->lpVtbl->canAdvanceError(This,pfCanAdvance)
@@ -1483,230 +5414,848 @@
 #define IScriptErrorList_setDetailsPaneOpen(This,fDetailsPaneOpen) (This)->lpVtbl->setDetailsPaneOpen(This,fDetailsPaneOpen)
 #define IScriptErrorList_getPerErrorDisplay(This,pfPerErrorDisplay) (This)->lpVtbl->getPerErrorDisplay(This,pfPerErrorDisplay)
 #define IScriptErrorList_setPerErrorDisplay(This,fPerErrorDisplay) (This)->lpVtbl->setPerErrorDisplay(This,fPerErrorDisplay)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IScriptErrorList_QueryInterface(IScriptErrorList* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IScriptErrorList_AddRef(IScriptErrorList* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IScriptErrorList_Release(IScriptErrorList* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IScriptErrorList_GetTypeInfoCount(IScriptErrorList* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IScriptErrorList_GetTypeInfo(IScriptErrorList* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IScriptErrorList_GetIDsOfNames(IScriptErrorList* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IScriptErrorList_Invoke(IScriptErrorList* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IScriptErrorList methods ***/
+static FORCEINLINE HRESULT IScriptErrorList_advanceError(IScriptErrorList* This) {
+    return This->lpVtbl->advanceError(This);
+}
+static FORCEINLINE HRESULT IScriptErrorList_retreatError(IScriptErrorList* This) {
+    return This->lpVtbl->retreatError(This);
+}
+static FORCEINLINE HRESULT IScriptErrorList_canAdvanceError(IScriptErrorList* This,LONG *pfCanAdvance) {
+    return This->lpVtbl->canAdvanceError(This,pfCanAdvance);
+}
+static FORCEINLINE HRESULT IScriptErrorList_canRetreatError(IScriptErrorList* This,LONG *pfCanRetreat) {
+    return This->lpVtbl->canRetreatError(This,pfCanRetreat);
+}
+static FORCEINLINE HRESULT IScriptErrorList_getErrorLine(IScriptErrorList* This,LONG *plLine) {
+    return This->lpVtbl->getErrorLine(This,plLine);
+}
+static FORCEINLINE HRESULT IScriptErrorList_getErrorChar(IScriptErrorList* This,LONG *plChar) {
+    return This->lpVtbl->getErrorChar(This,plChar);
+}
+static FORCEINLINE HRESULT IScriptErrorList_getErrorCode(IScriptErrorList* This,LONG *plCode) {
+    return This->lpVtbl->getErrorCode(This,plCode);
+}
+static FORCEINLINE HRESULT IScriptErrorList_getErrorMsg(IScriptErrorList* This,BSTR *pstr) {
+    return This->lpVtbl->getErrorMsg(This,pstr);
+}
+static FORCEINLINE HRESULT IScriptErrorList_getErrorUrl(IScriptErrorList* This,BSTR *pstr) {
+    return This->lpVtbl->getErrorUrl(This,pstr);
+}
+static FORCEINLINE HRESULT IScriptErrorList_getAlwaysShowLockState(IScriptErrorList* This,LONG *pfAlwaysShowLocked) {
+    return This->lpVtbl->getAlwaysShowLockState(This,pfAlwaysShowLocked);
+}
+static FORCEINLINE HRESULT IScriptErrorList_getDetailsPaneOpen(IScriptErrorList* This,LONG *pfDetailsPaneOpen) {
+    return This->lpVtbl->getDetailsPaneOpen(This,pfDetailsPaneOpen);
+}
+static FORCEINLINE HRESULT IScriptErrorList_setDetailsPaneOpen(IScriptErrorList* This,LONG fDetailsPaneOpen) {
+    return This->lpVtbl->setDetailsPaneOpen(This,fDetailsPaneOpen);
+}
+static FORCEINLINE HRESULT IScriptErrorList_getPerErrorDisplay(IScriptErrorList* This,LONG *pfPerErrorDisplay) {
+    return This->lpVtbl->getPerErrorDisplay(This,pfPerErrorDisplay);
+}
+static FORCEINLINE HRESULT IScriptErrorList_setPerErrorDisplay(IScriptErrorList* This,LONG fPerErrorDisplay) {
+    return This->lpVtbl->setPerErrorDisplay(This,fPerErrorDisplay);
+}
 #endif
 #endif
-  HRESULT WINAPI IScriptErrorList_advanceError_Proxy(IScriptErrorList *This);
-  void __RPC_STUB IScriptErrorList_advanceError_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IScriptErrorList_retreatError_Proxy(IScriptErrorList *This);
-  void __RPC_STUB IScriptErrorList_retreatError_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IScriptErrorList_canAdvanceError_Proxy(IScriptErrorList *This,WINBOOL *pfCanAdvance);
-  void __RPC_STUB IScriptErrorList_canAdvanceError_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IScriptErrorList_canRetreatError_Proxy(IScriptErrorList *This,WINBOOL *pfCanRetreat);
-  void __RPC_STUB IScriptErrorList_canRetreatError_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IScriptErrorList_getErrorLine_Proxy(IScriptErrorList *This,LONG *plLine);
-  void __RPC_STUB IScriptErrorList_getErrorLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IScriptErrorList_getErrorChar_Proxy(IScriptErrorList *This,LONG *plChar);
-  void __RPC_STUB IScriptErrorList_getErrorChar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IScriptErrorList_getErrorCode_Proxy(IScriptErrorList *This,LONG *plCode);
-  void __RPC_STUB IScriptErrorList_getErrorCode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IScriptErrorList_getErrorMsg_Proxy(IScriptErrorList *This,BSTR *pstr);
-  void __RPC_STUB IScriptErrorList_getErrorMsg_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IScriptErrorList_getErrorUrl_Proxy(IScriptErrorList *This,BSTR *pstr);
-  void __RPC_STUB IScriptErrorList_getErrorUrl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IScriptErrorList_getAlwaysShowLockState_Proxy(IScriptErrorList *This,WINBOOL *pfAlwaysShowLocked);
-  void __RPC_STUB IScriptErrorList_getAlwaysShowLockState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IScriptErrorList_getDetailsPaneOpen_Proxy(IScriptErrorList *This,WINBOOL *pfDetailsPaneOpen);
-  void __RPC_STUB IScriptErrorList_getDetailsPaneOpen_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IScriptErrorList_setDetailsPaneOpen_Proxy(IScriptErrorList *This,WINBOOL fDetailsPaneOpen);
-  void __RPC_STUB IScriptErrorList_setDetailsPaneOpen_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IScriptErrorList_getPerErrorDisplay_Proxy(IScriptErrorList *This,WINBOOL *pfPerErrorDisplay);
-  void __RPC_STUB IScriptErrorList_getPerErrorDisplay_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IScriptErrorList_setPerErrorDisplay_Proxy(IScriptErrorList *This,WINBOOL fPerErrorDisplay);
-  void __RPC_STUB IScriptErrorList_setPerErrorDisplay_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-#endif
 
-  EXTERN_C const CLSID CLSID_CScriptErrorList;
+#endif
+
+HRESULT STDMETHODCALLTYPE IScriptErrorList_advanceError_Proxy(
+    IScriptErrorList* This);
+void __RPC_STUB IScriptErrorList_advanceError_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IScriptErrorList_retreatError_Proxy(
+    IScriptErrorList* This);
+void __RPC_STUB IScriptErrorList_retreatError_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IScriptErrorList_canAdvanceError_Proxy(
+    IScriptErrorList* This,
+    LONG *pfCanAdvance);
+void __RPC_STUB IScriptErrorList_canAdvanceError_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IScriptErrorList_canRetreatError_Proxy(
+    IScriptErrorList* This,
+    LONG *pfCanRetreat);
+void __RPC_STUB IScriptErrorList_canRetreatError_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IScriptErrorList_getErrorLine_Proxy(
+    IScriptErrorList* This,
+    LONG *plLine);
+void __RPC_STUB IScriptErrorList_getErrorLine_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IScriptErrorList_getErrorChar_Proxy(
+    IScriptErrorList* This,
+    LONG *plChar);
+void __RPC_STUB IScriptErrorList_getErrorChar_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IScriptErrorList_getErrorCode_Proxy(
+    IScriptErrorList* This,
+    LONG *plCode);
+void __RPC_STUB IScriptErrorList_getErrorCode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IScriptErrorList_getErrorMsg_Proxy(
+    IScriptErrorList* This,
+    BSTR *pstr);
+void __RPC_STUB IScriptErrorList_getErrorMsg_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IScriptErrorList_getErrorUrl_Proxy(
+    IScriptErrorList* This,
+    BSTR *pstr);
+void __RPC_STUB IScriptErrorList_getErrorUrl_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IScriptErrorList_getAlwaysShowLockState_Proxy(
+    IScriptErrorList* This,
+    LONG *pfAlwaysShowLocked);
+void __RPC_STUB IScriptErrorList_getAlwaysShowLockState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IScriptErrorList_getDetailsPaneOpen_Proxy(
+    IScriptErrorList* This,
+    LONG *pfDetailsPaneOpen);
+void __RPC_STUB IScriptErrorList_getDetailsPaneOpen_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IScriptErrorList_setDetailsPaneOpen_Proxy(
+    IScriptErrorList* This,
+    LONG fDetailsPaneOpen);
+void __RPC_STUB IScriptErrorList_setDetailsPaneOpen_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IScriptErrorList_getPerErrorDisplay_Proxy(
+    IScriptErrorList* This,
+    LONG *pfPerErrorDisplay);
+void __RPC_STUB IScriptErrorList_getPerErrorDisplay_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IScriptErrorList_setPerErrorDisplay_Proxy(
+    IScriptErrorList* This,
+    LONG fPerErrorDisplay);
+void __RPC_STUB IScriptErrorList_setPerErrorDisplay_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IScriptErrorList_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * CScriptErrorList coclass
+ */
+
+DEFINE_GUID(CLSID_CScriptErrorList, 0xefd01300, 0x160f, 0x11d2, 0xbb,0x2e, 0x00,0x80,0x5f,0xf7,0xef,0xca);
+
 #ifdef __cplusplus
-  class CScriptErrorList;
+class DECLSPEC_UUID("efd01300-160f-11d2-bb2e-00805ff7efca") CScriptErrorList;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(CScriptErrorList, 0xefd01300, 0x160f, 0x11d2, 0xbb,0x2e, 0x00,0x80,0x5f,0xf7,0xef,0xca)
+#endif
 #endif
 
+/*****************************************************************************
+ * ISearch interface
+ */
 #ifndef __ISearch_INTERFACE_DEFINED__
 #define __ISearch_INTERFACE_DEFINED__
-  EXTERN_C const IID IID_ISearch;
+
+DEFINE_GUID(IID_ISearch, 0xba9239a4, 0x3dd5, 0x11d2, 0xbf,0x8b, 0x00,0xc0,0x4f,0xb9,0x36,0x61);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-  struct ISearch : public IDispatch {
-  public:
-    virtual HRESULT WINAPI get_Title(BSTR *pbstrTitle) = 0;
-    virtual HRESULT WINAPI get_Id(BSTR *pbstrId) = 0;
-    virtual HRESULT WINAPI get_Url(BSTR *pbstrUrl) = 0;
-  };
+MIDL_INTERFACE("ba9239a4-3dd5-11d2-bf8b-00c04fb93661")
+ISearch : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Title(
+        BSTR *pbstrTitle) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Id(
+        BSTR *pbstrId) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_URL(
+        BSTR *pbstrUrl) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ISearch, 0xba9239a4, 0x3dd5, 0x11d2, 0xbf,0x8b, 0x00,0xc0,0x4f,0xb9,0x36,0x61)
+#endif
 #else
-  typedef struct ISearchVtbl {
+typedef struct ISearchVtbl {
     BEGIN_INTERFACE
-      HRESULT (WINAPI *QueryInterface)(ISearch *This,REFIID riid,void **ppvObject);
-      ULONG (WINAPI *AddRef)(ISearch *This);
-      ULONG (WINAPI *Release)(ISearch *This);
-      HRESULT (WINAPI *GetTypeInfoCount)(ISearch *This,UINT *pctinfo);
-      HRESULT (WINAPI *GetTypeInfo)(ISearch *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
-      HRESULT (WINAPI *GetIDsOfNames)(ISearch *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
-      HRESULT (WINAPI *Invoke)(ISearch *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
-      HRESULT (WINAPI *get_Title)(ISearch *This,BSTR *pbstrTitle);
-      HRESULT (WINAPI *get_Id)(ISearch *This,BSTR *pbstrId);
-      HRESULT (WINAPI *get_Url)(ISearch *This,BSTR *pbstrUrl);
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ISearch* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ISearch* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ISearch* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        ISearch* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        ISearch* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        ISearch* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        ISearch* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ISearch methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Title)(
+        ISearch* This,
+        BSTR *pbstrTitle);
+
+    HRESULT (STDMETHODCALLTYPE *get_Id)(
+        ISearch* This,
+        BSTR *pbstrId);
+
+    HRESULT (STDMETHODCALLTYPE *get_URL)(
+        ISearch* This,
+        BSTR *pbstrUrl);
+
     END_INTERFACE
-  } ISearchVtbl;
-  struct ISearch {
-    CONST_VTBL struct ISearchVtbl *lpVtbl;
-  };
+} ISearchVtbl;
+interface ISearch {
+    CONST_VTBL ISearchVtbl* lpVtbl;
+};
+
 #ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
 #define ISearch_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define ISearch_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define ISearch_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
 #define ISearch_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
 #define ISearch_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
 #define ISearch_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
 #define ISearch_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ISearch methods ***/
 #define ISearch_get_Title(This,pbstrTitle) (This)->lpVtbl->get_Title(This,pbstrTitle)
 #define ISearch_get_Id(This,pbstrId) (This)->lpVtbl->get_Id(This,pbstrId)
-#define ISearch_get_Url(This,pbstrUrl) (This)->lpVtbl->get_Url(This,pbstrUrl)
+#define ISearch_get_URL(This,pbstrUrl) (This)->lpVtbl->get_URL(This,pbstrUrl)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ISearch_QueryInterface(ISearch* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ISearch_AddRef(ISearch* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ISearch_Release(ISearch* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT ISearch_GetTypeInfoCount(ISearch* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT ISearch_GetTypeInfo(ISearch* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT ISearch_GetIDsOfNames(ISearch* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT ISearch_Invoke(ISearch* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ISearch methods ***/
+static FORCEINLINE HRESULT ISearch_get_Title(ISearch* This,BSTR *pbstrTitle) {
+    return This->lpVtbl->get_Title(This,pbstrTitle);
+}
+static FORCEINLINE HRESULT ISearch_get_Id(ISearch* This,BSTR *pbstrId) {
+    return This->lpVtbl->get_Id(This,pbstrId);
+}
+static FORCEINLINE HRESULT ISearch_get_URL(ISearch* This,BSTR *pbstrUrl) {
+    return This->lpVtbl->get_URL(This,pbstrUrl);
+}
 #endif
 #endif
-  HRESULT WINAPI ISearch_get_Title_Proxy(ISearch *This,BSTR *pbstrTitle);
-  void __RPC_STUB ISearch_get_Title_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearch_get_Id_Proxy(ISearch *This,BSTR *pbstrId);
-  void __RPC_STUB ISearch_get_Id_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearch_get_Url_Proxy(ISearch *This,BSTR *pbstrUrl);
-  void __RPC_STUB ISearch_get_Url_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-#endif
 
+#endif
+
+HRESULT STDMETHODCALLTYPE ISearch_get_Title_Proxy(
+    ISearch* This,
+    BSTR *pbstrTitle);
+void __RPC_STUB ISearch_get_Title_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearch_get_Id_Proxy(
+    ISearch* This,
+    BSTR *pbstrId);
+void __RPC_STUB ISearch_get_Id_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearch_get_URL_Proxy(
+    ISearch* This,
+    BSTR *pbstrUrl);
+void __RPC_STUB ISearch_get_URL_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ISearch_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ISearches interface
+ */
 #ifndef __ISearches_INTERFACE_DEFINED__
 #define __ISearches_INTERFACE_DEFINED__
-  EXTERN_C const IID IID_ISearches;
+
+DEFINE_GUID(IID_ISearches, 0x47c922a2, 0x3dd5, 0x11d2, 0xbf,0x8b, 0x00,0xc0,0x4f,0xb9,0x36,0x61);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-  struct ISearches : public IDispatch {
-  public:
-    virtual HRESULT WINAPI get_Count(__LONG32 *plCount) = 0;
-    virtual HRESULT WINAPI get_Default(BSTR *pbstrDefault) = 0;
-    virtual HRESULT WINAPI Item(VARIANT index,ISearch **ppid) = 0;
-    virtual HRESULT WINAPI _NewEnum(IUnknown **ppunk) = 0;
-  };
+MIDL_INTERFACE("47c922a2-3dd5-11d2-bf8b-00c04fb93661")
+ISearches : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Count(
+        LONG *plCount) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Default(
+        BSTR *pbstrDefault) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Item(
+        VARIANT index,
+        ISearch **ppid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE _NewEnum(
+        IUnknown **ppunk) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ISearches, 0x47c922a2, 0x3dd5, 0x11d2, 0xbf,0x8b, 0x00,0xc0,0x4f,0xb9,0x36,0x61)
+#endif
 #else
-  typedef struct ISearchesVtbl {
+typedef struct ISearchesVtbl {
     BEGIN_INTERFACE
-      HRESULT (WINAPI *QueryInterface)(ISearches *This,REFIID riid,void **ppvObject);
-      ULONG (WINAPI *AddRef)(ISearches *This);
-      ULONG (WINAPI *Release)(ISearches *This);
-      HRESULT (WINAPI *GetTypeInfoCount)(ISearches *This,UINT *pctinfo);
-      HRESULT (WINAPI *GetTypeInfo)(ISearches *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
-      HRESULT (WINAPI *GetIDsOfNames)(ISearches *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
-      HRESULT (WINAPI *Invoke)(ISearches *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
-      HRESULT (WINAPI *get_Count)(ISearches *This,__LONG32 *plCount);
-      HRESULT (WINAPI *get_Default)(ISearches *This,BSTR *pbstrDefault);
-      HRESULT (WINAPI *Item)(ISearches *This,VARIANT index,ISearch **ppid);
-      HRESULT (WINAPI *_NewEnum)(ISearches *This,IUnknown **ppunk);
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ISearches* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ISearches* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ISearches* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        ISearches* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        ISearches* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        ISearches* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        ISearches* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ISearches methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Count)(
+        ISearches* This,
+        LONG *plCount);
+
+    HRESULT (STDMETHODCALLTYPE *get_Default)(
+        ISearches* This,
+        BSTR *pbstrDefault);
+
+    HRESULT (STDMETHODCALLTYPE *Item)(
+        ISearches* This,
+        VARIANT index,
+        ISearch **ppid);
+
+    HRESULT (STDMETHODCALLTYPE *_NewEnum)(
+        ISearches* This,
+        IUnknown **ppunk);
+
     END_INTERFACE
-  } ISearchesVtbl;
-  struct ISearches {
-    CONST_VTBL struct ISearchesVtbl *lpVtbl;
-  };
+} ISearchesVtbl;
+interface ISearches {
+    CONST_VTBL ISearchesVtbl* lpVtbl;
+};
+
 #ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
 #define ISearches_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define ISearches_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define ISearches_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
 #define ISearches_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
 #define ISearches_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
 #define ISearches_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
 #define ISearches_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ISearches methods ***/
 #define ISearches_get_Count(This,plCount) (This)->lpVtbl->get_Count(This,plCount)
 #define ISearches_get_Default(This,pbstrDefault) (This)->lpVtbl->get_Default(This,pbstrDefault)
 #define ISearches_Item(This,index,ppid) (This)->lpVtbl->Item(This,index,ppid)
 #define ISearches__NewEnum(This,ppunk) (This)->lpVtbl->_NewEnum(This,ppunk)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ISearches_QueryInterface(ISearches* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ISearches_AddRef(ISearches* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ISearches_Release(ISearches* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT ISearches_GetTypeInfoCount(ISearches* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT ISearches_GetTypeInfo(ISearches* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT ISearches_GetIDsOfNames(ISearches* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT ISearches_Invoke(ISearches* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ISearches methods ***/
+static FORCEINLINE HRESULT ISearches_get_Count(ISearches* This,LONG *plCount) {
+    return This->lpVtbl->get_Count(This,plCount);
+}
+static FORCEINLINE HRESULT ISearches_get_Default(ISearches* This,BSTR *pbstrDefault) {
+    return This->lpVtbl->get_Default(This,pbstrDefault);
+}
+static FORCEINLINE HRESULT ISearches_Item(ISearches* This,VARIANT index,ISearch **ppid) {
+    return This->lpVtbl->Item(This,index,ppid);
+}
+static FORCEINLINE HRESULT ISearches__NewEnum(ISearches* This,IUnknown **ppunk) {
+    return This->lpVtbl->_NewEnum(This,ppunk);
+}
 #endif
 #endif
-  HRESULT WINAPI ISearches_get_Count_Proxy(ISearches *This,__LONG32 *plCount);
-  void __RPC_STUB ISearches_get_Count_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearches_get_Default_Proxy(ISearches *This,BSTR *pbstrDefault);
-  void __RPC_STUB ISearches_get_Default_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearches_Item_Proxy(ISearches *This,VARIANT index,ISearch **ppid);
-  void __RPC_STUB ISearches_Item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearches__NewEnum_Proxy(ISearches *This,IUnknown **ppunk);
-  void __RPC_STUB ISearches__NewEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-#endif
 
+#endif
+
+HRESULT STDMETHODCALLTYPE ISearches_get_Count_Proxy(
+    ISearches* This,
+    LONG *plCount);
+void __RPC_STUB ISearches_get_Count_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearches_get_Default_Proxy(
+    ISearches* This,
+    BSTR *pbstrDefault);
+void __RPC_STUB ISearches_get_Default_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearches_Item_Proxy(
+    ISearches* This,
+    VARIANT index,
+    ISearch **ppid);
+void __RPC_STUB ISearches_Item_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearches__NewEnum_Proxy(
+    ISearches* This,
+    IUnknown **ppunk);
+void __RPC_STUB ISearches__NewEnum_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ISearches_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ISearchAssistantOC interface
+ */
 #ifndef __ISearchAssistantOC_INTERFACE_DEFINED__
 #define __ISearchAssistantOC_INTERFACE_DEFINED__
-  EXTERN_C const IID IID_ISearchAssistantOC;
+
+DEFINE_GUID(IID_ISearchAssistantOC, 0x72423e8f, 0x8011, 0x11d2, 0xbe,0x79, 0x00,0xa0,0xc9,0xa8,0x3d,0xa1);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-  struct ISearchAssistantOC : public IDispatch {
-  public:
-    virtual HRESULT WINAPI AddNextMenuItem(BSTR bstrText,__LONG32 idItem) = 0;
-    virtual HRESULT WINAPI SetDefaultSearchUrl(BSTR bstrUrl) = 0;
-    virtual HRESULT WINAPI NavigateToDefaultSearch(void) = 0;
-    virtual HRESULT WINAPI IsRestricted(BSTR bstrGuid,VARIANT_BOOL *pVal) = 0;
-    virtual HRESULT WINAPI get_ShellFeaturesEnabled(VARIANT_BOOL *pVal) = 0;
-    virtual HRESULT WINAPI get_SearchAssistantDefault(VARIANT_BOOL *pVal) = 0;
-    virtual HRESULT WINAPI get_Searches(ISearches **ppid) = 0;
-    virtual HRESULT WINAPI get_InWebFolder(VARIANT_BOOL *pVal) = 0;
-    virtual HRESULT WINAPI PutProperty(VARIANT_BOOL bPerLocale,BSTR bstrName,BSTR bstrValue) = 0;
-    virtual HRESULT WINAPI GetProperty(VARIANT_BOOL bPerLocale,BSTR bstrName,BSTR *pbstrValue) = 0;
-    virtual HRESULT WINAPI put_EventHandled(VARIANT_BOOL bHandled) = 0;
-    virtual HRESULT WINAPI ResetNextMenu(void) = 0;
-    virtual HRESULT WINAPI FindOnWeb(void) = 0;
-    virtual HRESULT WINAPI FindFilesOrFolders(void) = 0;
-    virtual HRESULT WINAPI FindComputer(void) = 0;
-    virtual HRESULT WINAPI FindPrinter(void) = 0;
-    virtual HRESULT WINAPI FindPeople(void) = 0;
-    virtual HRESULT WINAPI GetSearchAssistantURL(VARIANT_BOOL bSubstitute,VARIANT_BOOL bCustomize,BSTR *pbstrValue) = 0;
-    virtual HRESULT WINAPI NotifySearchSettingsChanged(void) = 0;
-    virtual HRESULT WINAPI put_ASProvider(BSTR Provider) = 0;
-    virtual HRESULT WINAPI get_ASProvider(BSTR *pProvider) = 0;
-    virtual HRESULT WINAPI put_ASSetting(int Setting) = 0;
-    virtual HRESULT WINAPI get_ASSetting(int *pSetting) = 0;
-    virtual HRESULT WINAPI NETDetectNextNavigate(void) = 0;
-    virtual HRESULT WINAPI PutFindText(BSTR FindText) = 0;
-    virtual HRESULT WINAPI get_Version(int *pVersion) = 0;
-    virtual HRESULT WINAPI EncodeString(BSTR bstrValue,BSTR bstrCharSet,VARIANT_BOOL bUseUTF8,BSTR *pbstrResult) = 0;
-  };
+MIDL_INTERFACE("72423e8f-8011-11d2-be79-00a0c9a83da1")
+ISearchAssistantOC : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE AddNextMenuItem(
+        BSTR bstrText,
+        LONG idItem) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetDefaultSearchUrl(
+        BSTR bstrUrl) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE NavigateToDefaultSearch(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsRestricted(
+        BSTR bstrGuid,
+        VARIANT_BOOL *pVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ShellFeaturesEnabled(
+        VARIANT_BOOL *pVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SearchAssistantDefault(
+        VARIANT_BOOL *pVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Searches(
+        ISearches **ppid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_InWebFolder(
+        VARIANT_BOOL *pVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PutProperty(
+        VARIANT_BOOL bPerLocale,
+        BSTR bstrName,
+        BSTR bstrValue) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetProperty(
+        VARIANT_BOOL bPerLocale,
+        BSTR bstrName,
+        BSTR *pbstrValue) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_EventHandled(
+        VARIANT_BOOL rhs) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ResetNextMenu(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE FindOnWeb(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE FindFilesOrFolders(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE FindComputer(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE FindPrinter(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE FindPeople(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSearchAssistantURL(
+        VARIANT_BOOL bSubstitute,
+        VARIANT_BOOL bCustomize,
+        BSTR *pbstrValue) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE NotifySearchSettingsChanged(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_ASProvider(
+        BSTR pProvider) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ASProvider(
+        BSTR *pProvider) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_ASSetting(
+        int pSetting) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ASSetting(
+        int *pSetting) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE NETDetectNextNavigate(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PutFindText(
+        BSTR FindText) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Version(
+        int *pVersion) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EncodeString(
+        BSTR bstrValue,
+        BSTR bstrCharSet,
+        VARIANT_BOOL bUseUTF8,
+        BSTR *pbstrResult) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ISearchAssistantOC, 0x72423e8f, 0x8011, 0x11d2, 0xbe,0x79, 0x00,0xa0,0xc9,0xa8,0x3d,0xa1)
+#endif
 #else
-  typedef struct ISearchAssistantOCVtbl {
+typedef struct ISearchAssistantOCVtbl {
     BEGIN_INTERFACE
-      HRESULT (WINAPI *QueryInterface)(ISearchAssistantOC *This,REFIID riid,void **ppvObject);
-      ULONG (WINAPI *AddRef)(ISearchAssistantOC *This);
-      ULONG (WINAPI *Release)(ISearchAssistantOC *This);
-      HRESULT (WINAPI *GetTypeInfoCount)(ISearchAssistantOC *This,UINT *pctinfo);
-      HRESULT (WINAPI *GetTypeInfo)(ISearchAssistantOC *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
-      HRESULT (WINAPI *GetIDsOfNames)(ISearchAssistantOC *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
-      HRESULT (WINAPI *Invoke)(ISearchAssistantOC *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
-      HRESULT (WINAPI *AddNextMenuItem)(ISearchAssistantOC *This,BSTR bstrText,__LONG32 idItem);
-      HRESULT (WINAPI *SetDefaultSearchUrl)(ISearchAssistantOC *This,BSTR bstrUrl);
-      HRESULT (WINAPI *NavigateToDefaultSearch)(ISearchAssistantOC *This);
-      HRESULT (WINAPI *IsRestricted)(ISearchAssistantOC *This,BSTR bstrGuid,VARIANT_BOOL *pVal);
-      HRESULT (WINAPI *get_ShellFeaturesEnabled)(ISearchAssistantOC *This,VARIANT_BOOL *pVal);
-      HRESULT (WINAPI *get_SearchAssistantDefault)(ISearchAssistantOC *This,VARIANT_BOOL *pVal);
-      HRESULT (WINAPI *get_Searches)(ISearchAssistantOC *This,ISearches **ppid);
-      HRESULT (WINAPI *get_InWebFolder)(ISearchAssistantOC *This,VARIANT_BOOL *pVal);
-      HRESULT (WINAPI *PutProperty)(ISearchAssistantOC *This,VARIANT_BOOL bPerLocale,BSTR bstrName,BSTR bstrValue);
-      HRESULT (WINAPI *GetProperty)(ISearchAssistantOC *This,VARIANT_BOOL bPerLocale,BSTR bstrName,BSTR *pbstrValue);
-      HRESULT (WINAPI *put_EventHandled)(ISearchAssistantOC *This,VARIANT_BOOL bHandled);
-      HRESULT (WINAPI *ResetNextMenu)(ISearchAssistantOC *This);
-      HRESULT (WINAPI *FindOnWeb)(ISearchAssistantOC *This);
-      HRESULT (WINAPI *FindFilesOrFolders)(ISearchAssistantOC *This);
-      HRESULT (WINAPI *FindComputer)(ISearchAssistantOC *This);
-      HRESULT (WINAPI *FindPrinter)(ISearchAssistantOC *This);
-      HRESULT (WINAPI *FindPeople)(ISearchAssistantOC *This);
-      HRESULT (WINAPI *GetSearchAssistantURL)(ISearchAssistantOC *This,VARIANT_BOOL bSubstitute,VARIANT_BOOL bCustomize,BSTR *pbstrValue);
-      HRESULT (WINAPI *NotifySearchSettingsChanged)(ISearchAssistantOC *This);
-      HRESULT (WINAPI *put_ASProvider)(ISearchAssistantOC *This,BSTR Provider);
-      HRESULT (WINAPI *get_ASProvider)(ISearchAssistantOC *This,BSTR *pProvider);
-      HRESULT (WINAPI *put_ASSetting)(ISearchAssistantOC *This,int Setting);
-      HRESULT (WINAPI *get_ASSetting)(ISearchAssistantOC *This,int *pSetting);
-      HRESULT (WINAPI *NETDetectNextNavigate)(ISearchAssistantOC *This);
-      HRESULT (WINAPI *PutFindText)(ISearchAssistantOC *This,BSTR FindText);
-      HRESULT (WINAPI *get_Version)(ISearchAssistantOC *This,int *pVersion);
-      HRESULT (WINAPI *EncodeString)(ISearchAssistantOC *This,BSTR bstrValue,BSTR bstrCharSet,VARIANT_BOOL bUseUTF8,BSTR *pbstrResult);
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ISearchAssistantOC* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ISearchAssistantOC* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ISearchAssistantOC* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        ISearchAssistantOC* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        ISearchAssistantOC* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        ISearchAssistantOC* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        ISearchAssistantOC* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ISearchAssistantOC methods ***/
+    HRESULT (STDMETHODCALLTYPE *AddNextMenuItem)(
+        ISearchAssistantOC* This,
+        BSTR bstrText,
+        LONG idItem);
+
+    HRESULT (STDMETHODCALLTYPE *SetDefaultSearchUrl)(
+        ISearchAssistantOC* This,
+        BSTR bstrUrl);
+
+    HRESULT (STDMETHODCALLTYPE *NavigateToDefaultSearch)(
+        ISearchAssistantOC* This);
+
+    HRESULT (STDMETHODCALLTYPE *IsRestricted)(
+        ISearchAssistantOC* This,
+        BSTR bstrGuid,
+        VARIANT_BOOL *pVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_ShellFeaturesEnabled)(
+        ISearchAssistantOC* This,
+        VARIANT_BOOL *pVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_SearchAssistantDefault)(
+        ISearchAssistantOC* This,
+        VARIANT_BOOL *pVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_Searches)(
+        ISearchAssistantOC* This,
+        ISearches **ppid);
+
+    HRESULT (STDMETHODCALLTYPE *get_InWebFolder)(
+        ISearchAssistantOC* This,
+        VARIANT_BOOL *pVal);
+
+    HRESULT (STDMETHODCALLTYPE *PutProperty)(
+        ISearchAssistantOC* This,
+        VARIANT_BOOL bPerLocale,
+        BSTR bstrName,
+        BSTR bstrValue);
+
+    HRESULT (STDMETHODCALLTYPE *GetProperty)(
+        ISearchAssistantOC* This,
+        VARIANT_BOOL bPerLocale,
+        BSTR bstrName,
+        BSTR *pbstrValue);
+
+    HRESULT (STDMETHODCALLTYPE *put_EventHandled)(
+        ISearchAssistantOC* This,
+        VARIANT_BOOL rhs);
+
+    HRESULT (STDMETHODCALLTYPE *ResetNextMenu)(
+        ISearchAssistantOC* This);
+
+    HRESULT (STDMETHODCALLTYPE *FindOnWeb)(
+        ISearchAssistantOC* This);
+
+    HRESULT (STDMETHODCALLTYPE *FindFilesOrFolders)(
+        ISearchAssistantOC* This);
+
+    HRESULT (STDMETHODCALLTYPE *FindComputer)(
+        ISearchAssistantOC* This);
+
+    HRESULT (STDMETHODCALLTYPE *FindPrinter)(
+        ISearchAssistantOC* This);
+
+    HRESULT (STDMETHODCALLTYPE *FindPeople)(
+        ISearchAssistantOC* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetSearchAssistantURL)(
+        ISearchAssistantOC* This,
+        VARIANT_BOOL bSubstitute,
+        VARIANT_BOOL bCustomize,
+        BSTR *pbstrValue);
+
+    HRESULT (STDMETHODCALLTYPE *NotifySearchSettingsChanged)(
+        ISearchAssistantOC* This);
+
+    HRESULT (STDMETHODCALLTYPE *put_ASProvider)(
+        ISearchAssistantOC* This,
+        BSTR pProvider);
+
+    HRESULT (STDMETHODCALLTYPE *get_ASProvider)(
+        ISearchAssistantOC* This,
+        BSTR *pProvider);
+
+    HRESULT (STDMETHODCALLTYPE *put_ASSetting)(
+        ISearchAssistantOC* This,
+        int pSetting);
+
+    HRESULT (STDMETHODCALLTYPE *get_ASSetting)(
+        ISearchAssistantOC* This,
+        int *pSetting);
+
+    HRESULT (STDMETHODCALLTYPE *NETDetectNextNavigate)(
+        ISearchAssistantOC* This);
+
+    HRESULT (STDMETHODCALLTYPE *PutFindText)(
+        ISearchAssistantOC* This,
+        BSTR FindText);
+
+    HRESULT (STDMETHODCALLTYPE *get_Version)(
+        ISearchAssistantOC* This,
+        int *pVersion);
+
+    HRESULT (STDMETHODCALLTYPE *EncodeString)(
+        ISearchAssistantOC* This,
+        BSTR bstrValue,
+        BSTR bstrCharSet,
+        VARIANT_BOOL bUseUTF8,
+        BSTR *pbstrResult);
+
     END_INTERFACE
-  } ISearchAssistantOCVtbl;
-  struct ISearchAssistantOC {
-    CONST_VTBL struct ISearchAssistantOCVtbl *lpVtbl;
-  };
+} ISearchAssistantOCVtbl;
+interface ISearchAssistantOC {
+    CONST_VTBL ISearchAssistantOCVtbl* lpVtbl;
+};
+
 #ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
 #define ISearchAssistantOC_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define ISearchAssistantOC_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define ISearchAssistantOC_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
 #define ISearchAssistantOC_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
 #define ISearchAssistantOC_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
 #define ISearchAssistantOC_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
 #define ISearchAssistantOC_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ISearchAssistantOC methods ***/
 #define ISearchAssistantOC_AddNextMenuItem(This,bstrText,idItem) (This)->lpVtbl->AddNextMenuItem(This,bstrText,idItem)
 #define ISearchAssistantOC_SetDefaultSearchUrl(This,bstrUrl) (This)->lpVtbl->SetDefaultSearchUrl(This,bstrUrl)
 #define ISearchAssistantOC_NavigateToDefaultSearch(This) (This)->lpVtbl->NavigateToDefaultSearch(This)
@@ -1717,7 +6266,7 @@
 #define ISearchAssistantOC_get_InWebFolder(This,pVal) (This)->lpVtbl->get_InWebFolder(This,pVal)
 #define ISearchAssistantOC_PutProperty(This,bPerLocale,bstrName,bstrValue) (This)->lpVtbl->PutProperty(This,bPerLocale,bstrName,bstrValue)
 #define ISearchAssistantOC_GetProperty(This,bPerLocale,bstrName,pbstrValue) (This)->lpVtbl->GetProperty(This,bPerLocale,bstrName,pbstrValue)
-#define ISearchAssistantOC_put_EventHandled(This,bHandled) (This)->lpVtbl->put_EventHandled(This,bHandled)
+#define ISearchAssistantOC_put_EventHandled(This,rhs) (This)->lpVtbl->put_EventHandled(This,rhs)
 #define ISearchAssistantOC_ResetNextMenu(This) (This)->lpVtbl->ResetNextMenu(This)
 #define ISearchAssistantOC_FindOnWeb(This) (This)->lpVtbl->FindOnWeb(This)
 #define ISearchAssistantOC_FindFilesOrFolders(This) (This)->lpVtbl->FindFilesOrFolders(This)
@@ -1726,131 +6275,544 @@
 #define ISearchAssistantOC_FindPeople(This) (This)->lpVtbl->FindPeople(This)
 #define ISearchAssistantOC_GetSearchAssistantURL(This,bSubstitute,bCustomize,pbstrValue) (This)->lpVtbl->GetSearchAssistantURL(This,bSubstitute,bCustomize,pbstrValue)
 #define ISearchAssistantOC_NotifySearchSettingsChanged(This) (This)->lpVtbl->NotifySearchSettingsChanged(This)
-#define ISearchAssistantOC_put_ASProvider(This,Provider) (This)->lpVtbl->put_ASProvider(This,Provider)
+#define ISearchAssistantOC_put_ASProvider(This,pProvider) (This)->lpVtbl->put_ASProvider(This,pProvider)
 #define ISearchAssistantOC_get_ASProvider(This,pProvider) (This)->lpVtbl->get_ASProvider(This,pProvider)
-#define ISearchAssistantOC_put_ASSetting(This,Setting) (This)->lpVtbl->put_ASSetting(This,Setting)
+#define ISearchAssistantOC_put_ASSetting(This,pSetting) (This)->lpVtbl->put_ASSetting(This,pSetting)
 #define ISearchAssistantOC_get_ASSetting(This,pSetting) (This)->lpVtbl->get_ASSetting(This,pSetting)
 #define ISearchAssistantOC_NETDetectNextNavigate(This) (This)->lpVtbl->NETDetectNextNavigate(This)
 #define ISearchAssistantOC_PutFindText(This,FindText) (This)->lpVtbl->PutFindText(This,FindText)
 #define ISearchAssistantOC_get_Version(This,pVersion) (This)->lpVtbl->get_Version(This,pVersion)
 #define ISearchAssistantOC_EncodeString(This,bstrValue,bstrCharSet,bUseUTF8,pbstrResult) (This)->lpVtbl->EncodeString(This,bstrValue,bstrCharSet,bUseUTF8,pbstrResult)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ISearchAssistantOC_QueryInterface(ISearchAssistantOC* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ISearchAssistantOC_AddRef(ISearchAssistantOC* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ISearchAssistantOC_Release(ISearchAssistantOC* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT ISearchAssistantOC_GetTypeInfoCount(ISearchAssistantOC* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_GetTypeInfo(ISearchAssistantOC* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_GetIDsOfNames(ISearchAssistantOC* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_Invoke(ISearchAssistantOC* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ISearchAssistantOC methods ***/
+static FORCEINLINE HRESULT ISearchAssistantOC_AddNextMenuItem(ISearchAssistantOC* This,BSTR bstrText,LONG idItem) {
+    return This->lpVtbl->AddNextMenuItem(This,bstrText,idItem);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_SetDefaultSearchUrl(ISearchAssistantOC* This,BSTR bstrUrl) {
+    return This->lpVtbl->SetDefaultSearchUrl(This,bstrUrl);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_NavigateToDefaultSearch(ISearchAssistantOC* This) {
+    return This->lpVtbl->NavigateToDefaultSearch(This);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_IsRestricted(ISearchAssistantOC* This,BSTR bstrGuid,VARIANT_BOOL *pVal) {
+    return This->lpVtbl->IsRestricted(This,bstrGuid,pVal);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_get_ShellFeaturesEnabled(ISearchAssistantOC* This,VARIANT_BOOL *pVal) {
+    return This->lpVtbl->get_ShellFeaturesEnabled(This,pVal);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_get_SearchAssistantDefault(ISearchAssistantOC* This,VARIANT_BOOL *pVal) {
+    return This->lpVtbl->get_SearchAssistantDefault(This,pVal);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_get_Searches(ISearchAssistantOC* This,ISearches **ppid) {
+    return This->lpVtbl->get_Searches(This,ppid);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_get_InWebFolder(ISearchAssistantOC* This,VARIANT_BOOL *pVal) {
+    return This->lpVtbl->get_InWebFolder(This,pVal);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_PutProperty(ISearchAssistantOC* This,VARIANT_BOOL bPerLocale,BSTR bstrName,BSTR bstrValue) {
+    return This->lpVtbl->PutProperty(This,bPerLocale,bstrName,bstrValue);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_GetProperty(ISearchAssistantOC* This,VARIANT_BOOL bPerLocale,BSTR bstrName,BSTR *pbstrValue) {
+    return This->lpVtbl->GetProperty(This,bPerLocale,bstrName,pbstrValue);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_put_EventHandled(ISearchAssistantOC* This,VARIANT_BOOL rhs) {
+    return This->lpVtbl->put_EventHandled(This,rhs);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_ResetNextMenu(ISearchAssistantOC* This) {
+    return This->lpVtbl->ResetNextMenu(This);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_FindOnWeb(ISearchAssistantOC* This) {
+    return This->lpVtbl->FindOnWeb(This);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_FindFilesOrFolders(ISearchAssistantOC* This) {
+    return This->lpVtbl->FindFilesOrFolders(This);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_FindComputer(ISearchAssistantOC* This) {
+    return This->lpVtbl->FindComputer(This);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_FindPrinter(ISearchAssistantOC* This) {
+    return This->lpVtbl->FindPrinter(This);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_FindPeople(ISearchAssistantOC* This) {
+    return This->lpVtbl->FindPeople(This);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_GetSearchAssistantURL(ISearchAssistantOC* This,VARIANT_BOOL bSubstitute,VARIANT_BOOL bCustomize,BSTR *pbstrValue) {
+    return This->lpVtbl->GetSearchAssistantURL(This,bSubstitute,bCustomize,pbstrValue);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_NotifySearchSettingsChanged(ISearchAssistantOC* This) {
+    return This->lpVtbl->NotifySearchSettingsChanged(This);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_put_ASProvider(ISearchAssistantOC* This,BSTR pProvider) {
+    return This->lpVtbl->put_ASProvider(This,pProvider);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_get_ASProvider(ISearchAssistantOC* This,BSTR *pProvider) {
+    return This->lpVtbl->get_ASProvider(This,pProvider);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_put_ASSetting(ISearchAssistantOC* This,int pSetting) {
+    return This->lpVtbl->put_ASSetting(This,pSetting);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_get_ASSetting(ISearchAssistantOC* This,int *pSetting) {
+    return This->lpVtbl->get_ASSetting(This,pSetting);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_NETDetectNextNavigate(ISearchAssistantOC* This) {
+    return This->lpVtbl->NETDetectNextNavigate(This);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_PutFindText(ISearchAssistantOC* This,BSTR FindText) {
+    return This->lpVtbl->PutFindText(This,FindText);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_get_Version(ISearchAssistantOC* This,int *pVersion) {
+    return This->lpVtbl->get_Version(This,pVersion);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC_EncodeString(ISearchAssistantOC* This,BSTR bstrValue,BSTR bstrCharSet,VARIANT_BOOL bUseUTF8,BSTR *pbstrResult) {
+    return This->lpVtbl->EncodeString(This,bstrValue,bstrCharSet,bUseUTF8,pbstrResult);
+}
 #endif
 #endif
-  HRESULT WINAPI ISearchAssistantOC_AddNextMenuItem_Proxy(ISearchAssistantOC *This,BSTR bstrText,__LONG32 idItem);
-  void __RPC_STUB ISearchAssistantOC_AddNextMenuItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearchAssistantOC_SetDefaultSearchUrl_Proxy(ISearchAssistantOC *This,BSTR bstrUrl);
-  void __RPC_STUB ISearchAssistantOC_SetDefaultSearchUrl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearchAssistantOC_NavigateToDefaultSearch_Proxy(ISearchAssistantOC *This);
-  void __RPC_STUB ISearchAssistantOC_NavigateToDefaultSearch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearchAssistantOC_IsRestricted_Proxy(ISearchAssistantOC *This,BSTR bstrGuid,VARIANT_BOOL *pVal);
-  void __RPC_STUB ISearchAssistantOC_IsRestricted_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearchAssistantOC_get_ShellFeaturesEnabled_Proxy(ISearchAssistantOC *This,VARIANT_BOOL *pVal);
-  void __RPC_STUB ISearchAssistantOC_get_ShellFeaturesEnabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearchAssistantOC_get_SearchAssistantDefault_Proxy(ISearchAssistantOC *This,VARIANT_BOOL *pVal);
-  void __RPC_STUB ISearchAssistantOC_get_SearchAssistantDefault_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearchAssistantOC_get_Searches_Proxy(ISearchAssistantOC *This,ISearches **ppid);
-  void __RPC_STUB ISearchAssistantOC_get_Searches_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearchAssistantOC_get_InWebFolder_Proxy(ISearchAssistantOC *This,VARIANT_BOOL *pVal);
-  void __RPC_STUB ISearchAssistantOC_get_InWebFolder_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearchAssistantOC_PutProperty_Proxy(ISearchAssistantOC *This,VARIANT_BOOL bPerLocale,BSTR bstrName,BSTR bstrValue);
-  void __RPC_STUB ISearchAssistantOC_PutProperty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearchAssistantOC_GetProperty_Proxy(ISearchAssistantOC *This,VARIANT_BOOL bPerLocale,BSTR bstrName,BSTR *pbstrValue);
-  void __RPC_STUB ISearchAssistantOC_GetProperty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearchAssistantOC_put_EventHandled_Proxy(ISearchAssistantOC *This,VARIANT_BOOL bHandled);
-  void __RPC_STUB ISearchAssistantOC_put_EventHandled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearchAssistantOC_ResetNextMenu_Proxy(ISearchAssistantOC *This);
-  void __RPC_STUB ISearchAssistantOC_ResetNextMenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearchAssistantOC_FindOnWeb_Proxy(ISearchAssistantOC *This);
-  void __RPC_STUB ISearchAssistantOC_FindOnWeb_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearchAssistantOC_FindFilesOrFolders_Proxy(ISearchAssistantOC *This);
-  void __RPC_STUB ISearchAssistantOC_FindFilesOrFolders_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearchAssistantOC_FindComputer_Proxy(ISearchAssistantOC *This);
-  void __RPC_STUB ISearchAssistantOC_FindComputer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearchAssistantOC_FindPrinter_Proxy(ISearchAssistantOC *This);
-  void __RPC_STUB ISearchAssistantOC_FindPrinter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearchAssistantOC_FindPeople_Proxy(ISearchAssistantOC *This);
-  void __RPC_STUB ISearchAssistantOC_FindPeople_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearchAssistantOC_GetSearchAssistantURL_Proxy(ISearchAssistantOC *This,VARIANT_BOOL bSubstitute,VARIANT_BOOL bCustomize,BSTR *pbstrValue);
-  void __RPC_STUB ISearchAssistantOC_GetSearchAssistantURL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearchAssistantOC_NotifySearchSettingsChanged_Proxy(ISearchAssistantOC *This);
-  void __RPC_STUB ISearchAssistantOC_NotifySearchSettingsChanged_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearchAssistantOC_put_ASProvider_Proxy(ISearchAssistantOC *This,BSTR Provider);
-  void __RPC_STUB ISearchAssistantOC_put_ASProvider_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearchAssistantOC_get_ASProvider_Proxy(ISearchAssistantOC *This,BSTR *pProvider);
-  void __RPC_STUB ISearchAssistantOC_get_ASProvider_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearchAssistantOC_put_ASSetting_Proxy(ISearchAssistantOC *This,int Setting);
-  void __RPC_STUB ISearchAssistantOC_put_ASSetting_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearchAssistantOC_get_ASSetting_Proxy(ISearchAssistantOC *This,int *pSetting);
-  void __RPC_STUB ISearchAssistantOC_get_ASSetting_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearchAssistantOC_NETDetectNextNavigate_Proxy(ISearchAssistantOC *This);
-  void __RPC_STUB ISearchAssistantOC_NETDetectNextNavigate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearchAssistantOC_PutFindText_Proxy(ISearchAssistantOC *This,BSTR FindText);
-  void __RPC_STUB ISearchAssistantOC_PutFindText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearchAssistantOC_get_Version_Proxy(ISearchAssistantOC *This,int *pVersion);
-  void __RPC_STUB ISearchAssistantOC_get_Version_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearchAssistantOC_EncodeString_Proxy(ISearchAssistantOC *This,BSTR bstrValue,BSTR bstrCharSet,VARIANT_BOOL bUseUTF8,BSTR *pbstrResult);
-  void __RPC_STUB ISearchAssistantOC_EncodeString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-#endif
 
+#endif
+
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC_AddNextMenuItem_Proxy(
+    ISearchAssistantOC* This,
+    BSTR bstrText,
+    LONG idItem);
+void __RPC_STUB ISearchAssistantOC_AddNextMenuItem_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC_SetDefaultSearchUrl_Proxy(
+    ISearchAssistantOC* This,
+    BSTR bstrUrl);
+void __RPC_STUB ISearchAssistantOC_SetDefaultSearchUrl_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC_NavigateToDefaultSearch_Proxy(
+    ISearchAssistantOC* This);
+void __RPC_STUB ISearchAssistantOC_NavigateToDefaultSearch_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC_IsRestricted_Proxy(
+    ISearchAssistantOC* This,
+    BSTR bstrGuid,
+    VARIANT_BOOL *pVal);
+void __RPC_STUB ISearchAssistantOC_IsRestricted_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC_get_ShellFeaturesEnabled_Proxy(
+    ISearchAssistantOC* This,
+    VARIANT_BOOL *pVal);
+void __RPC_STUB ISearchAssistantOC_get_ShellFeaturesEnabled_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC_get_SearchAssistantDefault_Proxy(
+    ISearchAssistantOC* This,
+    VARIANT_BOOL *pVal);
+void __RPC_STUB ISearchAssistantOC_get_SearchAssistantDefault_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC_get_Searches_Proxy(
+    ISearchAssistantOC* This,
+    ISearches **ppid);
+void __RPC_STUB ISearchAssistantOC_get_Searches_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC_get_InWebFolder_Proxy(
+    ISearchAssistantOC* This,
+    VARIANT_BOOL *pVal);
+void __RPC_STUB ISearchAssistantOC_get_InWebFolder_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC_PutProperty_Proxy(
+    ISearchAssistantOC* This,
+    VARIANT_BOOL bPerLocale,
+    BSTR bstrName,
+    BSTR bstrValue);
+void __RPC_STUB ISearchAssistantOC_PutProperty_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC_GetProperty_Proxy(
+    ISearchAssistantOC* This,
+    VARIANT_BOOL bPerLocale,
+    BSTR bstrName,
+    BSTR *pbstrValue);
+void __RPC_STUB ISearchAssistantOC_GetProperty_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC_put_EventHandled_Proxy(
+    ISearchAssistantOC* This,
+    VARIANT_BOOL rhs);
+void __RPC_STUB ISearchAssistantOC_put_EventHandled_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC_ResetNextMenu_Proxy(
+    ISearchAssistantOC* This);
+void __RPC_STUB ISearchAssistantOC_ResetNextMenu_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC_FindOnWeb_Proxy(
+    ISearchAssistantOC* This);
+void __RPC_STUB ISearchAssistantOC_FindOnWeb_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC_FindFilesOrFolders_Proxy(
+    ISearchAssistantOC* This);
+void __RPC_STUB ISearchAssistantOC_FindFilesOrFolders_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC_FindComputer_Proxy(
+    ISearchAssistantOC* This);
+void __RPC_STUB ISearchAssistantOC_FindComputer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC_FindPrinter_Proxy(
+    ISearchAssistantOC* This);
+void __RPC_STUB ISearchAssistantOC_FindPrinter_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC_FindPeople_Proxy(
+    ISearchAssistantOC* This);
+void __RPC_STUB ISearchAssistantOC_FindPeople_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC_GetSearchAssistantURL_Proxy(
+    ISearchAssistantOC* This,
+    VARIANT_BOOL bSubstitute,
+    VARIANT_BOOL bCustomize,
+    BSTR *pbstrValue);
+void __RPC_STUB ISearchAssistantOC_GetSearchAssistantURL_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC_NotifySearchSettingsChanged_Proxy(
+    ISearchAssistantOC* This);
+void __RPC_STUB ISearchAssistantOC_NotifySearchSettingsChanged_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC_put_ASProvider_Proxy(
+    ISearchAssistantOC* This,
+    BSTR pProvider);
+void __RPC_STUB ISearchAssistantOC_put_ASProvider_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC_get_ASProvider_Proxy(
+    ISearchAssistantOC* This,
+    BSTR *pProvider);
+void __RPC_STUB ISearchAssistantOC_get_ASProvider_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC_put_ASSetting_Proxy(
+    ISearchAssistantOC* This,
+    int pSetting);
+void __RPC_STUB ISearchAssistantOC_put_ASSetting_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC_get_ASSetting_Proxy(
+    ISearchAssistantOC* This,
+    int *pSetting);
+void __RPC_STUB ISearchAssistantOC_get_ASSetting_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC_NETDetectNextNavigate_Proxy(
+    ISearchAssistantOC* This);
+void __RPC_STUB ISearchAssistantOC_NETDetectNextNavigate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC_PutFindText_Proxy(
+    ISearchAssistantOC* This,
+    BSTR FindText);
+void __RPC_STUB ISearchAssistantOC_PutFindText_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC_get_Version_Proxy(
+    ISearchAssistantOC* This,
+    int *pVersion);
+void __RPC_STUB ISearchAssistantOC_get_Version_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC_EncodeString_Proxy(
+    ISearchAssistantOC* This,
+    BSTR bstrValue,
+    BSTR bstrCharSet,
+    VARIANT_BOOL bUseUTF8,
+    BSTR *pbstrResult);
+void __RPC_STUB ISearchAssistantOC_EncodeString_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ISearchAssistantOC_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ISearchAssistantOC2 interface
+ */
 #ifndef __ISearchAssistantOC2_INTERFACE_DEFINED__
 #define __ISearchAssistantOC2_INTERFACE_DEFINED__
-  EXTERN_C const IID IID_ISearchAssistantOC2;
+
+DEFINE_GUID(IID_ISearchAssistantOC2, 0x72423e8f, 0x8011, 0x11d2, 0xbe,0x79, 0x00,0xa0,0xc9,0xa8,0x3d,0xa2);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-  struct ISearchAssistantOC2 : public ISearchAssistantOC {
-  public:
-    virtual HRESULT WINAPI get_ShowFindPrinter(VARIANT_BOOL *pbShowFindPrinter) = 0;
-  };
+MIDL_INTERFACE("72423e8f-8011-11d2-be79-00a0c9a83da2")
+ISearchAssistantOC2 : public ISearchAssistantOC
+{
+    virtual HRESULT STDMETHODCALLTYPE get_ShowFindPrinter(
+        VARIANT_BOOL *pbShowFindPrinter) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ISearchAssistantOC2, 0x72423e8f, 0x8011, 0x11d2, 0xbe,0x79, 0x00,0xa0,0xc9,0xa8,0x3d,0xa2)
+#endif
 #else
-  typedef struct ISearchAssistantOC2Vtbl {
+typedef struct ISearchAssistantOC2Vtbl {
     BEGIN_INTERFACE
-      HRESULT (WINAPI *QueryInterface)(ISearchAssistantOC2 *This,REFIID riid,void **ppvObject);
-      ULONG (WINAPI *AddRef)(ISearchAssistantOC2 *This);
-      ULONG (WINAPI *Release)(ISearchAssistantOC2 *This);
-      HRESULT (WINAPI *GetTypeInfoCount)(ISearchAssistantOC2 *This,UINT *pctinfo);
-      HRESULT (WINAPI *GetTypeInfo)(ISearchAssistantOC2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
-      HRESULT (WINAPI *GetIDsOfNames)(ISearchAssistantOC2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
-      HRESULT (WINAPI *Invoke)(ISearchAssistantOC2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
-      HRESULT (WINAPI *AddNextMenuItem)(ISearchAssistantOC2 *This,BSTR bstrText,__LONG32 idItem);
-      HRESULT (WINAPI *SetDefaultSearchUrl)(ISearchAssistantOC2 *This,BSTR bstrUrl);
-      HRESULT (WINAPI *NavigateToDefaultSearch)(ISearchAssistantOC2 *This);
-      HRESULT (WINAPI *IsRestricted)(ISearchAssistantOC2 *This,BSTR bstrGuid,VARIANT_BOOL *pVal);
-      HRESULT (WINAPI *get_ShellFeaturesEnabled)(ISearchAssistantOC2 *This,VARIANT_BOOL *pVal);
-      HRESULT (WINAPI *get_SearchAssistantDefault)(ISearchAssistantOC2 *This,VARIANT_BOOL *pVal);
-      HRESULT (WINAPI *get_Searches)(ISearchAssistantOC2 *This,ISearches **ppid);
-      HRESULT (WINAPI *get_InWebFolder)(ISearchAssistantOC2 *This,VARIANT_BOOL *pVal);
-      HRESULT (WINAPI *PutProperty)(ISearchAssistantOC2 *This,VARIANT_BOOL bPerLocale,BSTR bstrName,BSTR bstrValue);
-      HRESULT (WINAPI *GetProperty)(ISearchAssistantOC2 *This,VARIANT_BOOL bPerLocale,BSTR bstrName,BSTR *pbstrValue);
-      HRESULT (WINAPI *put_EventHandled)(ISearchAssistantOC2 *This,VARIANT_BOOL bHandled);
-      HRESULT (WINAPI *ResetNextMenu)(ISearchAssistantOC2 *This);
-      HRESULT (WINAPI *FindOnWeb)(ISearchAssistantOC2 *This);
-      HRESULT (WINAPI *FindFilesOrFolders)(ISearchAssistantOC2 *This);
-      HRESULT (WINAPI *FindComputer)(ISearchAssistantOC2 *This);
-      HRESULT (WINAPI *FindPrinter)(ISearchAssistantOC2 *This);
-      HRESULT (WINAPI *FindPeople)(ISearchAssistantOC2 *This);
-      HRESULT (WINAPI *GetSearchAssistantURL)(ISearchAssistantOC2 *This,VARIANT_BOOL bSubstitute,VARIANT_BOOL bCustomize,BSTR *pbstrValue);
-      HRESULT (WINAPI *NotifySearchSettingsChanged)(ISearchAssistantOC2 *This);
-      HRESULT (WINAPI *put_ASProvider)(ISearchAssistantOC2 *This,BSTR Provider);
-      HRESULT (WINAPI *get_ASProvider)(ISearchAssistantOC2 *This,BSTR *pProvider);
-      HRESULT (WINAPI *put_ASSetting)(ISearchAssistantOC2 *This,int Setting);
-      HRESULT (WINAPI *get_ASSetting)(ISearchAssistantOC2 *This,int *pSetting);
-      HRESULT (WINAPI *NETDetectNextNavigate)(ISearchAssistantOC2 *This);
-      HRESULT (WINAPI *PutFindText)(ISearchAssistantOC2 *This,BSTR FindText);
-      HRESULT (WINAPI *get_Version)(ISearchAssistantOC2 *This,int *pVersion);
-      HRESULT (WINAPI *EncodeString)(ISearchAssistantOC2 *This,BSTR bstrValue,BSTR bstrCharSet,VARIANT_BOOL bUseUTF8,BSTR *pbstrResult);
-      HRESULT (WINAPI *get_ShowFindPrinter)(ISearchAssistantOC2 *This,VARIANT_BOOL *pbShowFindPrinter);
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ISearchAssistantOC2* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ISearchAssistantOC2* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ISearchAssistantOC2* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        ISearchAssistantOC2* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        ISearchAssistantOC2* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        ISearchAssistantOC2* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        ISearchAssistantOC2* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ISearchAssistantOC methods ***/
+    HRESULT (STDMETHODCALLTYPE *AddNextMenuItem)(
+        ISearchAssistantOC2* This,
+        BSTR bstrText,
+        LONG idItem);
+
+    HRESULT (STDMETHODCALLTYPE *SetDefaultSearchUrl)(
+        ISearchAssistantOC2* This,
+        BSTR bstrUrl);
+
+    HRESULT (STDMETHODCALLTYPE *NavigateToDefaultSearch)(
+        ISearchAssistantOC2* This);
+
+    HRESULT (STDMETHODCALLTYPE *IsRestricted)(
+        ISearchAssistantOC2* This,
+        BSTR bstrGuid,
+        VARIANT_BOOL *pVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_ShellFeaturesEnabled)(
+        ISearchAssistantOC2* This,
+        VARIANT_BOOL *pVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_SearchAssistantDefault)(
+        ISearchAssistantOC2* This,
+        VARIANT_BOOL *pVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_Searches)(
+        ISearchAssistantOC2* This,
+        ISearches **ppid);
+
+    HRESULT (STDMETHODCALLTYPE *get_InWebFolder)(
+        ISearchAssistantOC2* This,
+        VARIANT_BOOL *pVal);
+
+    HRESULT (STDMETHODCALLTYPE *PutProperty)(
+        ISearchAssistantOC2* This,
+        VARIANT_BOOL bPerLocale,
+        BSTR bstrName,
+        BSTR bstrValue);
+
+    HRESULT (STDMETHODCALLTYPE *GetProperty)(
+        ISearchAssistantOC2* This,
+        VARIANT_BOOL bPerLocale,
+        BSTR bstrName,
+        BSTR *pbstrValue);
+
+    HRESULT (STDMETHODCALLTYPE *put_EventHandled)(
+        ISearchAssistantOC2* This,
+        VARIANT_BOOL rhs);
+
+    HRESULT (STDMETHODCALLTYPE *ResetNextMenu)(
+        ISearchAssistantOC2* This);
+
+    HRESULT (STDMETHODCALLTYPE *FindOnWeb)(
+        ISearchAssistantOC2* This);
+
+    HRESULT (STDMETHODCALLTYPE *FindFilesOrFolders)(
+        ISearchAssistantOC2* This);
+
+    HRESULT (STDMETHODCALLTYPE *FindComputer)(
+        ISearchAssistantOC2* This);
+
+    HRESULT (STDMETHODCALLTYPE *FindPrinter)(
+        ISearchAssistantOC2* This);
+
+    HRESULT (STDMETHODCALLTYPE *FindPeople)(
+        ISearchAssistantOC2* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetSearchAssistantURL)(
+        ISearchAssistantOC2* This,
+        VARIANT_BOOL bSubstitute,
+        VARIANT_BOOL bCustomize,
+        BSTR *pbstrValue);
+
+    HRESULT (STDMETHODCALLTYPE *NotifySearchSettingsChanged)(
+        ISearchAssistantOC2* This);
+
+    HRESULT (STDMETHODCALLTYPE *put_ASProvider)(
+        ISearchAssistantOC2* This,
+        BSTR pProvider);
+
+    HRESULT (STDMETHODCALLTYPE *get_ASProvider)(
+        ISearchAssistantOC2* This,
+        BSTR *pProvider);
+
+    HRESULT (STDMETHODCALLTYPE *put_ASSetting)(
+        ISearchAssistantOC2* This,
+        int pSetting);
+
+    HRESULT (STDMETHODCALLTYPE *get_ASSetting)(
+        ISearchAssistantOC2* This,
+        int *pSetting);
+
+    HRESULT (STDMETHODCALLTYPE *NETDetectNextNavigate)(
+        ISearchAssistantOC2* This);
+
+    HRESULT (STDMETHODCALLTYPE *PutFindText)(
+        ISearchAssistantOC2* This,
+        BSTR FindText);
+
+    HRESULT (STDMETHODCALLTYPE *get_Version)(
+        ISearchAssistantOC2* This,
+        int *pVersion);
+
+    HRESULT (STDMETHODCALLTYPE *EncodeString)(
+        ISearchAssistantOC2* This,
+        BSTR bstrValue,
+        BSTR bstrCharSet,
+        VARIANT_BOOL bUseUTF8,
+        BSTR *pbstrResult);
+
+    /*** ISearchAssistantOC2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_ShowFindPrinter)(
+        ISearchAssistantOC2* This,
+        VARIANT_BOOL *pbShowFindPrinter);
+
     END_INTERFACE
-  } ISearchAssistantOC2Vtbl;
-  struct ISearchAssistantOC2 {
-    CONST_VTBL struct ISearchAssistantOC2Vtbl *lpVtbl;
-  };
+} ISearchAssistantOC2Vtbl;
+interface ISearchAssistantOC2 {
+    CONST_VTBL ISearchAssistantOC2Vtbl* lpVtbl;
+};
+
 #ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
 #define ISearchAssistantOC2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define ISearchAssistantOC2_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define ISearchAssistantOC2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
 #define ISearchAssistantOC2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
 #define ISearchAssistantOC2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
 #define ISearchAssistantOC2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
 #define ISearchAssistantOC2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ISearchAssistantOC methods ***/
 #define ISearchAssistantOC2_AddNextMenuItem(This,bstrText,idItem) (This)->lpVtbl->AddNextMenuItem(This,bstrText,idItem)
 #define ISearchAssistantOC2_SetDefaultSearchUrl(This,bstrUrl) (This)->lpVtbl->SetDefaultSearchUrl(This,bstrUrl)
 #define ISearchAssistantOC2_NavigateToDefaultSearch(This) (This)->lpVtbl->NavigateToDefaultSearch(This)
@@ -1861,7 +6823,7 @@
 #define ISearchAssistantOC2_get_InWebFolder(This,pVal) (This)->lpVtbl->get_InWebFolder(This,pVal)
 #define ISearchAssistantOC2_PutProperty(This,bPerLocale,bstrName,bstrValue) (This)->lpVtbl->PutProperty(This,bPerLocale,bstrName,bstrValue)
 #define ISearchAssistantOC2_GetProperty(This,bPerLocale,bstrName,pbstrValue) (This)->lpVtbl->GetProperty(This,bPerLocale,bstrName,pbstrValue)
-#define ISearchAssistantOC2_put_EventHandled(This,bHandled) (This)->lpVtbl->put_EventHandled(This,bHandled)
+#define ISearchAssistantOC2_put_EventHandled(This,rhs) (This)->lpVtbl->put_EventHandled(This,rhs)
 #define ISearchAssistantOC2_ResetNextMenu(This) (This)->lpVtbl->ResetNextMenu(This)
 #define ISearchAssistantOC2_FindOnWeb(This) (This)->lpVtbl->FindOnWeb(This)
 #define ISearchAssistantOC2_FindFilesOrFolders(This) (This)->lpVtbl->FindFilesOrFolders(This)
@@ -1870,85 +6832,359 @@
 #define ISearchAssistantOC2_FindPeople(This) (This)->lpVtbl->FindPeople(This)
 #define ISearchAssistantOC2_GetSearchAssistantURL(This,bSubstitute,bCustomize,pbstrValue) (This)->lpVtbl->GetSearchAssistantURL(This,bSubstitute,bCustomize,pbstrValue)
 #define ISearchAssistantOC2_NotifySearchSettingsChanged(This) (This)->lpVtbl->NotifySearchSettingsChanged(This)
-#define ISearchAssistantOC2_put_ASProvider(This,Provider) (This)->lpVtbl->put_ASProvider(This,Provider)
+#define ISearchAssistantOC2_put_ASProvider(This,pProvider) (This)->lpVtbl->put_ASProvider(This,pProvider)
 #define ISearchAssistantOC2_get_ASProvider(This,pProvider) (This)->lpVtbl->get_ASProvider(This,pProvider)
-#define ISearchAssistantOC2_put_ASSetting(This,Setting) (This)->lpVtbl->put_ASSetting(This,Setting)
+#define ISearchAssistantOC2_put_ASSetting(This,pSetting) (This)->lpVtbl->put_ASSetting(This,pSetting)
 #define ISearchAssistantOC2_get_ASSetting(This,pSetting) (This)->lpVtbl->get_ASSetting(This,pSetting)
 #define ISearchAssistantOC2_NETDetectNextNavigate(This) (This)->lpVtbl->NETDetectNextNavigate(This)
 #define ISearchAssistantOC2_PutFindText(This,FindText) (This)->lpVtbl->PutFindText(This,FindText)
 #define ISearchAssistantOC2_get_Version(This,pVersion) (This)->lpVtbl->get_Version(This,pVersion)
 #define ISearchAssistantOC2_EncodeString(This,bstrValue,bstrCharSet,bUseUTF8,pbstrResult) (This)->lpVtbl->EncodeString(This,bstrValue,bstrCharSet,bUseUTF8,pbstrResult)
+/*** ISearchAssistantOC2 methods ***/
 #define ISearchAssistantOC2_get_ShowFindPrinter(This,pbShowFindPrinter) (This)->lpVtbl->get_ShowFindPrinter(This,pbShowFindPrinter)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ISearchAssistantOC2_QueryInterface(ISearchAssistantOC2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ISearchAssistantOC2_AddRef(ISearchAssistantOC2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ISearchAssistantOC2_Release(ISearchAssistantOC2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT ISearchAssistantOC2_GetTypeInfoCount(ISearchAssistantOC2* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_GetTypeInfo(ISearchAssistantOC2* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_GetIDsOfNames(ISearchAssistantOC2* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_Invoke(ISearchAssistantOC2* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ISearchAssistantOC methods ***/
+static FORCEINLINE HRESULT ISearchAssistantOC2_AddNextMenuItem(ISearchAssistantOC2* This,BSTR bstrText,LONG idItem) {
+    return This->lpVtbl->AddNextMenuItem(This,bstrText,idItem);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_SetDefaultSearchUrl(ISearchAssistantOC2* This,BSTR bstrUrl) {
+    return This->lpVtbl->SetDefaultSearchUrl(This,bstrUrl);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_NavigateToDefaultSearch(ISearchAssistantOC2* This) {
+    return This->lpVtbl->NavigateToDefaultSearch(This);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_IsRestricted(ISearchAssistantOC2* This,BSTR bstrGuid,VARIANT_BOOL *pVal) {
+    return This->lpVtbl->IsRestricted(This,bstrGuid,pVal);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_get_ShellFeaturesEnabled(ISearchAssistantOC2* This,VARIANT_BOOL *pVal) {
+    return This->lpVtbl->get_ShellFeaturesEnabled(This,pVal);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_get_SearchAssistantDefault(ISearchAssistantOC2* This,VARIANT_BOOL *pVal) {
+    return This->lpVtbl->get_SearchAssistantDefault(This,pVal);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_get_Searches(ISearchAssistantOC2* This,ISearches **ppid) {
+    return This->lpVtbl->get_Searches(This,ppid);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_get_InWebFolder(ISearchAssistantOC2* This,VARIANT_BOOL *pVal) {
+    return This->lpVtbl->get_InWebFolder(This,pVal);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_PutProperty(ISearchAssistantOC2* This,VARIANT_BOOL bPerLocale,BSTR bstrName,BSTR bstrValue) {
+    return This->lpVtbl->PutProperty(This,bPerLocale,bstrName,bstrValue);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_GetProperty(ISearchAssistantOC2* This,VARIANT_BOOL bPerLocale,BSTR bstrName,BSTR *pbstrValue) {
+    return This->lpVtbl->GetProperty(This,bPerLocale,bstrName,pbstrValue);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_put_EventHandled(ISearchAssistantOC2* This,VARIANT_BOOL rhs) {
+    return This->lpVtbl->put_EventHandled(This,rhs);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_ResetNextMenu(ISearchAssistantOC2* This) {
+    return This->lpVtbl->ResetNextMenu(This);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_FindOnWeb(ISearchAssistantOC2* This) {
+    return This->lpVtbl->FindOnWeb(This);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_FindFilesOrFolders(ISearchAssistantOC2* This) {
+    return This->lpVtbl->FindFilesOrFolders(This);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_FindComputer(ISearchAssistantOC2* This) {
+    return This->lpVtbl->FindComputer(This);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_FindPrinter(ISearchAssistantOC2* This) {
+    return This->lpVtbl->FindPrinter(This);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_FindPeople(ISearchAssistantOC2* This) {
+    return This->lpVtbl->FindPeople(This);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_GetSearchAssistantURL(ISearchAssistantOC2* This,VARIANT_BOOL bSubstitute,VARIANT_BOOL bCustomize,BSTR *pbstrValue) {
+    return This->lpVtbl->GetSearchAssistantURL(This,bSubstitute,bCustomize,pbstrValue);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_NotifySearchSettingsChanged(ISearchAssistantOC2* This) {
+    return This->lpVtbl->NotifySearchSettingsChanged(This);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_put_ASProvider(ISearchAssistantOC2* This,BSTR pProvider) {
+    return This->lpVtbl->put_ASProvider(This,pProvider);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_get_ASProvider(ISearchAssistantOC2* This,BSTR *pProvider) {
+    return This->lpVtbl->get_ASProvider(This,pProvider);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_put_ASSetting(ISearchAssistantOC2* This,int pSetting) {
+    return This->lpVtbl->put_ASSetting(This,pSetting);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_get_ASSetting(ISearchAssistantOC2* This,int *pSetting) {
+    return This->lpVtbl->get_ASSetting(This,pSetting);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_NETDetectNextNavigate(ISearchAssistantOC2* This) {
+    return This->lpVtbl->NETDetectNextNavigate(This);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_PutFindText(ISearchAssistantOC2* This,BSTR FindText) {
+    return This->lpVtbl->PutFindText(This,FindText);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_get_Version(ISearchAssistantOC2* This,int *pVersion) {
+    return This->lpVtbl->get_Version(This,pVersion);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC2_EncodeString(ISearchAssistantOC2* This,BSTR bstrValue,BSTR bstrCharSet,VARIANT_BOOL bUseUTF8,BSTR *pbstrResult) {
+    return This->lpVtbl->EncodeString(This,bstrValue,bstrCharSet,bUseUTF8,pbstrResult);
+}
+/*** ISearchAssistantOC2 methods ***/
+static FORCEINLINE HRESULT ISearchAssistantOC2_get_ShowFindPrinter(ISearchAssistantOC2* This,VARIANT_BOOL *pbShowFindPrinter) {
+    return This->lpVtbl->get_ShowFindPrinter(This,pbShowFindPrinter);
+}
 #endif
 #endif
-  HRESULT WINAPI ISearchAssistantOC2_get_ShowFindPrinter_Proxy(ISearchAssistantOC2 *This,VARIANT_BOOL *pbShowFindPrinter);
-  void __RPC_STUB ISearchAssistantOC2_get_ShowFindPrinter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-#endif
 
+#endif
+
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC2_get_ShowFindPrinter_Proxy(
+    ISearchAssistantOC2* This,
+    VARIANT_BOOL *pbShowFindPrinter);
+void __RPC_STUB ISearchAssistantOC2_get_ShowFindPrinter_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ISearchAssistantOC2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ISearchAssistantOC3 interface
+ */
 #ifndef __ISearchAssistantOC3_INTERFACE_DEFINED__
 #define __ISearchAssistantOC3_INTERFACE_DEFINED__
-  EXTERN_C const IID IID_ISearchAssistantOC3;
+
+DEFINE_GUID(IID_ISearchAssistantOC3, 0x72423e8f, 0x8011, 0x11d2, 0xbe,0x79, 0x00,0xa0,0xc9,0xa8,0x3d,0xa3);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-  struct ISearchAssistantOC3 : public ISearchAssistantOC2 {
-  public:
-    virtual HRESULT WINAPI get_SearchCompanionAvailable(VARIANT_BOOL *pbAvailable) = 0;
-    virtual HRESULT WINAPI put_UseSearchCompanion(VARIANT_BOOL bUseSC) = 0;
-    virtual HRESULT WINAPI get_UseSearchCompanion(VARIANT_BOOL *pbUseSC) = 0;
-  };
+MIDL_INTERFACE("72423e8f-8011-11d2-be79-00a0c9a83da3")
+ISearchAssistantOC3 : public ISearchAssistantOC2
+{
+    virtual HRESULT STDMETHODCALLTYPE get_SearchCompanionAvailable(
+        VARIANT_BOOL *pbAvailable) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_UseSearchCompanion(
+        VARIANT_BOOL pbUseSC) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_UseSearchCompanion(
+        VARIANT_BOOL *pbUseSC) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ISearchAssistantOC3, 0x72423e8f, 0x8011, 0x11d2, 0xbe,0x79, 0x00,0xa0,0xc9,0xa8,0x3d,0xa3)
+#endif
 #else
-  typedef struct ISearchAssistantOC3Vtbl {
+typedef struct ISearchAssistantOC3Vtbl {
     BEGIN_INTERFACE
-      HRESULT (WINAPI *QueryInterface)(ISearchAssistantOC3 *This,REFIID riid,void **ppvObject);
-      ULONG (WINAPI *AddRef)(ISearchAssistantOC3 *This);
-      ULONG (WINAPI *Release)(ISearchAssistantOC3 *This);
-      HRESULT (WINAPI *GetTypeInfoCount)(ISearchAssistantOC3 *This,UINT *pctinfo);
-      HRESULT (WINAPI *GetTypeInfo)(ISearchAssistantOC3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
-      HRESULT (WINAPI *GetIDsOfNames)(ISearchAssistantOC3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
-      HRESULT (WINAPI *Invoke)(ISearchAssistantOC3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
-      HRESULT (WINAPI *AddNextMenuItem)(ISearchAssistantOC3 *This,BSTR bstrText,__LONG32 idItem);
-      HRESULT (WINAPI *SetDefaultSearchUrl)(ISearchAssistantOC3 *This,BSTR bstrUrl);
-      HRESULT (WINAPI *NavigateToDefaultSearch)(ISearchAssistantOC3 *This);
-      HRESULT (WINAPI *IsRestricted)(ISearchAssistantOC3 *This,BSTR bstrGuid,VARIANT_BOOL *pVal);
-      HRESULT (WINAPI *get_ShellFeaturesEnabled)(ISearchAssistantOC3 *This,VARIANT_BOOL *pVal);
-      HRESULT (WINAPI *get_SearchAssistantDefault)(ISearchAssistantOC3 *This,VARIANT_BOOL *pVal);
-      HRESULT (WINAPI *get_Searches)(ISearchAssistantOC3 *This,ISearches **ppid);
-      HRESULT (WINAPI *get_InWebFolder)(ISearchAssistantOC3 *This,VARIANT_BOOL *pVal);
-      HRESULT (WINAPI *PutProperty)(ISearchAssistantOC3 *This,VARIANT_BOOL bPerLocale,BSTR bstrName,BSTR bstrValue);
-      HRESULT (WINAPI *GetProperty)(ISearchAssistantOC3 *This,VARIANT_BOOL bPerLocale,BSTR bstrName,BSTR *pbstrValue);
-      HRESULT (WINAPI *put_EventHandled)(ISearchAssistantOC3 *This,VARIANT_BOOL bHandled);
-      HRESULT (WINAPI *ResetNextMenu)(ISearchAssistantOC3 *This);
-      HRESULT (WINAPI *FindOnWeb)(ISearchAssistantOC3 *This);
-      HRESULT (WINAPI *FindFilesOrFolders)(ISearchAssistantOC3 *This);
-      HRESULT (WINAPI *FindComputer)(ISearchAssistantOC3 *This);
-      HRESULT (WINAPI *FindPrinter)(ISearchAssistantOC3 *This);
-      HRESULT (WINAPI *FindPeople)(ISearchAssistantOC3 *This);
-      HRESULT (WINAPI *GetSearchAssistantURL)(ISearchAssistantOC3 *This,VARIANT_BOOL bSubstitute,VARIANT_BOOL bCustomize,BSTR *pbstrValue);
-      HRESULT (WINAPI *NotifySearchSettingsChanged)(ISearchAssistantOC3 *This);
-      HRESULT (WINAPI *put_ASProvider)(ISearchAssistantOC3 *This,BSTR Provider);
-      HRESULT (WINAPI *get_ASProvider)(ISearchAssistantOC3 *This,BSTR *pProvider);
-      HRESULT (WINAPI *put_ASSetting)(ISearchAssistantOC3 *This,int Setting);
-      HRESULT (WINAPI *get_ASSetting)(ISearchAssistantOC3 *This,int *pSetting);
-      HRESULT (WINAPI *NETDetectNextNavigate)(ISearchAssistantOC3 *This);
-      HRESULT (WINAPI *PutFindText)(ISearchAssistantOC3 *This,BSTR FindText);
-      HRESULT (WINAPI *get_Version)(ISearchAssistantOC3 *This,int *pVersion);
-      HRESULT (WINAPI *EncodeString)(ISearchAssistantOC3 *This,BSTR bstrValue,BSTR bstrCharSet,VARIANT_BOOL bUseUTF8,BSTR *pbstrResult);
-      HRESULT (WINAPI *get_ShowFindPrinter)(ISearchAssistantOC3 *This,VARIANT_BOOL *pbShowFindPrinter);
-      HRESULT (WINAPI *get_SearchCompanionAvailable)(ISearchAssistantOC3 *This,VARIANT_BOOL *pbAvailable);
-      HRESULT (WINAPI *put_UseSearchCompanion)(ISearchAssistantOC3 *This,VARIANT_BOOL bUseSC);
-      HRESULT (WINAPI *get_UseSearchCompanion)(ISearchAssistantOC3 *This,VARIANT_BOOL *pbUseSC);
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ISearchAssistantOC3* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ISearchAssistantOC3* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ISearchAssistantOC3* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        ISearchAssistantOC3* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        ISearchAssistantOC3* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        ISearchAssistantOC3* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        ISearchAssistantOC3* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ISearchAssistantOC methods ***/
+    HRESULT (STDMETHODCALLTYPE *AddNextMenuItem)(
+        ISearchAssistantOC3* This,
+        BSTR bstrText,
+        LONG idItem);
+
+    HRESULT (STDMETHODCALLTYPE *SetDefaultSearchUrl)(
+        ISearchAssistantOC3* This,
+        BSTR bstrUrl);
+
+    HRESULT (STDMETHODCALLTYPE *NavigateToDefaultSearch)(
+        ISearchAssistantOC3* This);
+
+    HRESULT (STDMETHODCALLTYPE *IsRestricted)(
+        ISearchAssistantOC3* This,
+        BSTR bstrGuid,
+        VARIANT_BOOL *pVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_ShellFeaturesEnabled)(
+        ISearchAssistantOC3* This,
+        VARIANT_BOOL *pVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_SearchAssistantDefault)(
+        ISearchAssistantOC3* This,
+        VARIANT_BOOL *pVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_Searches)(
+        ISearchAssistantOC3* This,
+        ISearches **ppid);
+
+    HRESULT (STDMETHODCALLTYPE *get_InWebFolder)(
+        ISearchAssistantOC3* This,
+        VARIANT_BOOL *pVal);
+
+    HRESULT (STDMETHODCALLTYPE *PutProperty)(
+        ISearchAssistantOC3* This,
+        VARIANT_BOOL bPerLocale,
+        BSTR bstrName,
+        BSTR bstrValue);
+
+    HRESULT (STDMETHODCALLTYPE *GetProperty)(
+        ISearchAssistantOC3* This,
+        VARIANT_BOOL bPerLocale,
+        BSTR bstrName,
+        BSTR *pbstrValue);
+
+    HRESULT (STDMETHODCALLTYPE *put_EventHandled)(
+        ISearchAssistantOC3* This,
+        VARIANT_BOOL rhs);
+
+    HRESULT (STDMETHODCALLTYPE *ResetNextMenu)(
+        ISearchAssistantOC3* This);
+
+    HRESULT (STDMETHODCALLTYPE *FindOnWeb)(
+        ISearchAssistantOC3* This);
+
+    HRESULT (STDMETHODCALLTYPE *FindFilesOrFolders)(
+        ISearchAssistantOC3* This);
+
+    HRESULT (STDMETHODCALLTYPE *FindComputer)(
+        ISearchAssistantOC3* This);
+
+    HRESULT (STDMETHODCALLTYPE *FindPrinter)(
+        ISearchAssistantOC3* This);
+
+    HRESULT (STDMETHODCALLTYPE *FindPeople)(
+        ISearchAssistantOC3* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetSearchAssistantURL)(
+        ISearchAssistantOC3* This,
+        VARIANT_BOOL bSubstitute,
+        VARIANT_BOOL bCustomize,
+        BSTR *pbstrValue);
+
+    HRESULT (STDMETHODCALLTYPE *NotifySearchSettingsChanged)(
+        ISearchAssistantOC3* This);
+
+    HRESULT (STDMETHODCALLTYPE *put_ASProvider)(
+        ISearchAssistantOC3* This,
+        BSTR pProvider);
+
+    HRESULT (STDMETHODCALLTYPE *get_ASProvider)(
+        ISearchAssistantOC3* This,
+        BSTR *pProvider);
+
+    HRESULT (STDMETHODCALLTYPE *put_ASSetting)(
+        ISearchAssistantOC3* This,
+        int pSetting);
+
+    HRESULT (STDMETHODCALLTYPE *get_ASSetting)(
+        ISearchAssistantOC3* This,
+        int *pSetting);
+
+    HRESULT (STDMETHODCALLTYPE *NETDetectNextNavigate)(
+        ISearchAssistantOC3* This);
+
+    HRESULT (STDMETHODCALLTYPE *PutFindText)(
+        ISearchAssistantOC3* This,
+        BSTR FindText);
+
+    HRESULT (STDMETHODCALLTYPE *get_Version)(
+        ISearchAssistantOC3* This,
+        int *pVersion);
+
+    HRESULT (STDMETHODCALLTYPE *EncodeString)(
+        ISearchAssistantOC3* This,
+        BSTR bstrValue,
+        BSTR bstrCharSet,
+        VARIANT_BOOL bUseUTF8,
+        BSTR *pbstrResult);
+
+    /*** ISearchAssistantOC2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_ShowFindPrinter)(
+        ISearchAssistantOC3* This,
+        VARIANT_BOOL *pbShowFindPrinter);
+
+    /*** ISearchAssistantOC3 methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_SearchCompanionAvailable)(
+        ISearchAssistantOC3* This,
+        VARIANT_BOOL *pbAvailable);
+
+    HRESULT (STDMETHODCALLTYPE *put_UseSearchCompanion)(
+        ISearchAssistantOC3* This,
+        VARIANT_BOOL pbUseSC);
+
+    HRESULT (STDMETHODCALLTYPE *get_UseSearchCompanion)(
+        ISearchAssistantOC3* This,
+        VARIANT_BOOL *pbUseSC);
+
     END_INTERFACE
-  } ISearchAssistantOC3Vtbl;
-  struct ISearchAssistantOC3 {
-    CONST_VTBL struct ISearchAssistantOC3Vtbl *lpVtbl;
-  };
+} ISearchAssistantOC3Vtbl;
+interface ISearchAssistantOC3 {
+    CONST_VTBL ISearchAssistantOC3Vtbl* lpVtbl;
+};
+
 #ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
 #define ISearchAssistantOC3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define ISearchAssistantOC3_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define ISearchAssistantOC3_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
 #define ISearchAssistantOC3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
 #define ISearchAssistantOC3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
 #define ISearchAssistantOC3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
 #define ISearchAssistantOC3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ISearchAssistantOC methods ***/
 #define ISearchAssistantOC3_AddNextMenuItem(This,bstrText,idItem) (This)->lpVtbl->AddNextMenuItem(This,bstrText,idItem)
 #define ISearchAssistantOC3_SetDefaultSearchUrl(This,bstrUrl) (This)->lpVtbl->SetDefaultSearchUrl(This,bstrUrl)
 #define ISearchAssistantOC3_NavigateToDefaultSearch(This) (This)->lpVtbl->NavigateToDefaultSearch(This)
@@ -1959,7 +7195,7 @@
 #define ISearchAssistantOC3_get_InWebFolder(This,pVal) (This)->lpVtbl->get_InWebFolder(This,pVal)
 #define ISearchAssistantOC3_PutProperty(This,bPerLocale,bstrName,bstrValue) (This)->lpVtbl->PutProperty(This,bPerLocale,bstrName,bstrValue)
 #define ISearchAssistantOC3_GetProperty(This,bPerLocale,bstrName,pbstrValue) (This)->lpVtbl->GetProperty(This,bPerLocale,bstrName,pbstrValue)
-#define ISearchAssistantOC3_put_EventHandled(This,bHandled) (This)->lpVtbl->put_EventHandled(This,bHandled)
+#define ISearchAssistantOC3_put_EventHandled(This,rhs) (This)->lpVtbl->put_EventHandled(This,rhs)
 #define ISearchAssistantOC3_ResetNextMenu(This) (This)->lpVtbl->ResetNextMenu(This)
 #define ISearchAssistantOC3_FindOnWeb(This) (This)->lpVtbl->FindOnWeb(This)
 #define ISearchAssistantOC3_FindFilesOrFolders(This) (This)->lpVtbl->FindFilesOrFolders(This)
@@ -1968,68 +7204,322 @@
 #define ISearchAssistantOC3_FindPeople(This) (This)->lpVtbl->FindPeople(This)
 #define ISearchAssistantOC3_GetSearchAssistantURL(This,bSubstitute,bCustomize,pbstrValue) (This)->lpVtbl->GetSearchAssistantURL(This,bSubstitute,bCustomize,pbstrValue)
 #define ISearchAssistantOC3_NotifySearchSettingsChanged(This) (This)->lpVtbl->NotifySearchSettingsChanged(This)
-#define ISearchAssistantOC3_put_ASProvider(This,Provider) (This)->lpVtbl->put_ASProvider(This,Provider)
+#define ISearchAssistantOC3_put_ASProvider(This,pProvider) (This)->lpVtbl->put_ASProvider(This,pProvider)
 #define ISearchAssistantOC3_get_ASProvider(This,pProvider) (This)->lpVtbl->get_ASProvider(This,pProvider)
-#define ISearchAssistantOC3_put_ASSetting(This,Setting) (This)->lpVtbl->put_ASSetting(This,Setting)
+#define ISearchAssistantOC3_put_ASSetting(This,pSetting) (This)->lpVtbl->put_ASSetting(This,pSetting)
 #define ISearchAssistantOC3_get_ASSetting(This,pSetting) (This)->lpVtbl->get_ASSetting(This,pSetting)
 #define ISearchAssistantOC3_NETDetectNextNavigate(This) (This)->lpVtbl->NETDetectNextNavigate(This)
 #define ISearchAssistantOC3_PutFindText(This,FindText) (This)->lpVtbl->PutFindText(This,FindText)
 #define ISearchAssistantOC3_get_Version(This,pVersion) (This)->lpVtbl->get_Version(This,pVersion)
 #define ISearchAssistantOC3_EncodeString(This,bstrValue,bstrCharSet,bUseUTF8,pbstrResult) (This)->lpVtbl->EncodeString(This,bstrValue,bstrCharSet,bUseUTF8,pbstrResult)
+/*** ISearchAssistantOC2 methods ***/
 #define ISearchAssistantOC3_get_ShowFindPrinter(This,pbShowFindPrinter) (This)->lpVtbl->get_ShowFindPrinter(This,pbShowFindPrinter)
+/*** ISearchAssistantOC3 methods ***/
 #define ISearchAssistantOC3_get_SearchCompanionAvailable(This,pbAvailable) (This)->lpVtbl->get_SearchCompanionAvailable(This,pbAvailable)
-#define ISearchAssistantOC3_put_UseSearchCompanion(This,bUseSC) (This)->lpVtbl->put_UseSearchCompanion(This,bUseSC)
+#define ISearchAssistantOC3_put_UseSearchCompanion(This,pbUseSC) (This)->lpVtbl->put_UseSearchCompanion(This,pbUseSC)
 #define ISearchAssistantOC3_get_UseSearchCompanion(This,pbUseSC) (This)->lpVtbl->get_UseSearchCompanion(This,pbUseSC)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ISearchAssistantOC3_QueryInterface(ISearchAssistantOC3* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ISearchAssistantOC3_AddRef(ISearchAssistantOC3* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ISearchAssistantOC3_Release(ISearchAssistantOC3* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT ISearchAssistantOC3_GetTypeInfoCount(ISearchAssistantOC3* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_GetTypeInfo(ISearchAssistantOC3* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_GetIDsOfNames(ISearchAssistantOC3* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_Invoke(ISearchAssistantOC3* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ISearchAssistantOC methods ***/
+static FORCEINLINE HRESULT ISearchAssistantOC3_AddNextMenuItem(ISearchAssistantOC3* This,BSTR bstrText,LONG idItem) {
+    return This->lpVtbl->AddNextMenuItem(This,bstrText,idItem);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_SetDefaultSearchUrl(ISearchAssistantOC3* This,BSTR bstrUrl) {
+    return This->lpVtbl->SetDefaultSearchUrl(This,bstrUrl);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_NavigateToDefaultSearch(ISearchAssistantOC3* This) {
+    return This->lpVtbl->NavigateToDefaultSearch(This);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_IsRestricted(ISearchAssistantOC3* This,BSTR bstrGuid,VARIANT_BOOL *pVal) {
+    return This->lpVtbl->IsRestricted(This,bstrGuid,pVal);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_get_ShellFeaturesEnabled(ISearchAssistantOC3* This,VARIANT_BOOL *pVal) {
+    return This->lpVtbl->get_ShellFeaturesEnabled(This,pVal);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_get_SearchAssistantDefault(ISearchAssistantOC3* This,VARIANT_BOOL *pVal) {
+    return This->lpVtbl->get_SearchAssistantDefault(This,pVal);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_get_Searches(ISearchAssistantOC3* This,ISearches **ppid) {
+    return This->lpVtbl->get_Searches(This,ppid);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_get_InWebFolder(ISearchAssistantOC3* This,VARIANT_BOOL *pVal) {
+    return This->lpVtbl->get_InWebFolder(This,pVal);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_PutProperty(ISearchAssistantOC3* This,VARIANT_BOOL bPerLocale,BSTR bstrName,BSTR bstrValue) {
+    return This->lpVtbl->PutProperty(This,bPerLocale,bstrName,bstrValue);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_GetProperty(ISearchAssistantOC3* This,VARIANT_BOOL bPerLocale,BSTR bstrName,BSTR *pbstrValue) {
+    return This->lpVtbl->GetProperty(This,bPerLocale,bstrName,pbstrValue);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_put_EventHandled(ISearchAssistantOC3* This,VARIANT_BOOL rhs) {
+    return This->lpVtbl->put_EventHandled(This,rhs);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_ResetNextMenu(ISearchAssistantOC3* This) {
+    return This->lpVtbl->ResetNextMenu(This);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_FindOnWeb(ISearchAssistantOC3* This) {
+    return This->lpVtbl->FindOnWeb(This);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_FindFilesOrFolders(ISearchAssistantOC3* This) {
+    return This->lpVtbl->FindFilesOrFolders(This);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_FindComputer(ISearchAssistantOC3* This) {
+    return This->lpVtbl->FindComputer(This);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_FindPrinter(ISearchAssistantOC3* This) {
+    return This->lpVtbl->FindPrinter(This);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_FindPeople(ISearchAssistantOC3* This) {
+    return This->lpVtbl->FindPeople(This);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_GetSearchAssistantURL(ISearchAssistantOC3* This,VARIANT_BOOL bSubstitute,VARIANT_BOOL bCustomize,BSTR *pbstrValue) {
+    return This->lpVtbl->GetSearchAssistantURL(This,bSubstitute,bCustomize,pbstrValue);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_NotifySearchSettingsChanged(ISearchAssistantOC3* This) {
+    return This->lpVtbl->NotifySearchSettingsChanged(This);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_put_ASProvider(ISearchAssistantOC3* This,BSTR pProvider) {
+    return This->lpVtbl->put_ASProvider(This,pProvider);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_get_ASProvider(ISearchAssistantOC3* This,BSTR *pProvider) {
+    return This->lpVtbl->get_ASProvider(This,pProvider);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_put_ASSetting(ISearchAssistantOC3* This,int pSetting) {
+    return This->lpVtbl->put_ASSetting(This,pSetting);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_get_ASSetting(ISearchAssistantOC3* This,int *pSetting) {
+    return This->lpVtbl->get_ASSetting(This,pSetting);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_NETDetectNextNavigate(ISearchAssistantOC3* This) {
+    return This->lpVtbl->NETDetectNextNavigate(This);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_PutFindText(ISearchAssistantOC3* This,BSTR FindText) {
+    return This->lpVtbl->PutFindText(This,FindText);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_get_Version(ISearchAssistantOC3* This,int *pVersion) {
+    return This->lpVtbl->get_Version(This,pVersion);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_EncodeString(ISearchAssistantOC3* This,BSTR bstrValue,BSTR bstrCharSet,VARIANT_BOOL bUseUTF8,BSTR *pbstrResult) {
+    return This->lpVtbl->EncodeString(This,bstrValue,bstrCharSet,bUseUTF8,pbstrResult);
+}
+/*** ISearchAssistantOC2 methods ***/
+static FORCEINLINE HRESULT ISearchAssistantOC3_get_ShowFindPrinter(ISearchAssistantOC3* This,VARIANT_BOOL *pbShowFindPrinter) {
+    return This->lpVtbl->get_ShowFindPrinter(This,pbShowFindPrinter);
+}
+/*** ISearchAssistantOC3 methods ***/
+static FORCEINLINE HRESULT ISearchAssistantOC3_get_SearchCompanionAvailable(ISearchAssistantOC3* This,VARIANT_BOOL *pbAvailable) {
+    return This->lpVtbl->get_SearchCompanionAvailable(This,pbAvailable);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_put_UseSearchCompanion(ISearchAssistantOC3* This,VARIANT_BOOL pbUseSC) {
+    return This->lpVtbl->put_UseSearchCompanion(This,pbUseSC);
+}
+static FORCEINLINE HRESULT ISearchAssistantOC3_get_UseSearchCompanion(ISearchAssistantOC3* This,VARIANT_BOOL *pbUseSC) {
+    return This->lpVtbl->get_UseSearchCompanion(This,pbUseSC);
+}
 #endif
 #endif
-  HRESULT WINAPI ISearchAssistantOC3_get_SearchCompanionAvailable_Proxy(ISearchAssistantOC3 *This,VARIANT_BOOL *pbAvailable);
-  void __RPC_STUB ISearchAssistantOC3_get_SearchCompanionAvailable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearchAssistantOC3_put_UseSearchCompanion_Proxy(ISearchAssistantOC3 *This,VARIANT_BOOL bUseSC);
-  void __RPC_STUB ISearchAssistantOC3_put_UseSearchCompanion_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ISearchAssistantOC3_get_UseSearchCompanion_Proxy(ISearchAssistantOC3 *This,VARIANT_BOOL *pbUseSC);
-  void __RPC_STUB ISearchAssistantOC3_get_UseSearchCompanion_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-#endif
 
+#endif
+
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC3_get_SearchCompanionAvailable_Proxy(
+    ISearchAssistantOC3* This,
+    VARIANT_BOOL *pbAvailable);
+void __RPC_STUB ISearchAssistantOC3_get_SearchCompanionAvailable_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC3_put_UseSearchCompanion_Proxy(
+    ISearchAssistantOC3* This,
+    VARIANT_BOOL pbUseSC);
+void __RPC_STUB ISearchAssistantOC3_put_UseSearchCompanion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISearchAssistantOC3_get_UseSearchCompanion_Proxy(
+    ISearchAssistantOC3* This,
+    VARIANT_BOOL *pbUseSC);
+void __RPC_STUB ISearchAssistantOC3_get_UseSearchCompanion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ISearchAssistantOC3_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * _SearchAssistantEvents dispinterface
+ */
 #ifndef ___SearchAssistantEvents_DISPINTERFACE_DEFINED__
 #define ___SearchAssistantEvents_DISPINTERFACE_DEFINED__
-  EXTERN_C const IID DIID__SearchAssistantEvents;
+
+DEFINE_GUID(DIID__SearchAssistantEvents, 0x1611fdda, 0x445b, 0x11d2, 0x85,0xde, 0x00,0xc0,0x4f,0xa3,0x5c,0x89);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-  struct _SearchAssistantEvents : public IDispatch {
-  };
+MIDL_INTERFACE("1611fdda-445b-11d2-85de-00c04fa35c89")
+_SearchAssistantEvents : public IDispatch
+{
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(_SearchAssistantEvents, 0x1611fdda, 0x445b, 0x11d2, 0x85,0xde, 0x00,0xc0,0x4f,0xa3,0x5c,0x89)
+#endif
 #else
-  typedef struct _SearchAssistantEventsVtbl {
+typedef struct _SearchAssistantEventsVtbl {
     BEGIN_INTERFACE
-      HRESULT (WINAPI *QueryInterface)(_SearchAssistantEvents *This,REFIID riid,void **ppvObject);
-      ULONG (WINAPI *AddRef)(_SearchAssistantEvents *This);
-      ULONG (WINAPI *Release)(_SearchAssistantEvents *This);
-      HRESULT (WINAPI *GetTypeInfoCount)(_SearchAssistantEvents *This,UINT *pctinfo);
-      HRESULT (WINAPI *GetTypeInfo)(_SearchAssistantEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
-      HRESULT (WINAPI *GetIDsOfNames)(_SearchAssistantEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
-      HRESULT (WINAPI *Invoke)(_SearchAssistantEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        _SearchAssistantEvents* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        _SearchAssistantEvents* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        _SearchAssistantEvents* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        _SearchAssistantEvents* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        _SearchAssistantEvents* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        _SearchAssistantEvents* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        _SearchAssistantEvents* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
     END_INTERFACE
-  } _SearchAssistantEventsVtbl;
-  struct _SearchAssistantEvents {
-    CONST_VTBL struct _SearchAssistantEventsVtbl *lpVtbl;
-  };
+} _SearchAssistantEventsVtbl;
+interface _SearchAssistantEvents {
+    CONST_VTBL _SearchAssistantEventsVtbl* lpVtbl;
+};
+
 #ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
 #define _SearchAssistantEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define _SearchAssistantEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define _SearchAssistantEvents_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
 #define _SearchAssistantEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
 #define _SearchAssistantEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
 #define _SearchAssistantEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
 #define _SearchAssistantEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
-#endif
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT _SearchAssistantEvents_QueryInterface(_SearchAssistantEvents* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG _SearchAssistantEvents_AddRef(_SearchAssistantEvents* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG _SearchAssistantEvents_Release(_SearchAssistantEvents* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT _SearchAssistantEvents_GetTypeInfoCount(_SearchAssistantEvents* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT _SearchAssistantEvents_GetTypeInfo(_SearchAssistantEvents* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT _SearchAssistantEvents_GetIDsOfNames(_SearchAssistantEvents* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT _SearchAssistantEvents_Invoke(_SearchAssistantEvents* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
 #endif
 #endif
 
-  EXTERN_C const CLSID CLSID_SearchAssistantOC;
+#endif
+
+#endif  /* ___SearchAssistantEvents_DISPINTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ShellSearchAssistantOC coclass
+ */
+
+DEFINE_GUID(CLSID_ShellSearchAssistantOC, 0x2e71fd0f, 0xaab1, 0x42c0, 0x91,0x46, 0x6d,0x2c,0x4e,0xdc,0xf0,0x7d);
+
 #ifdef __cplusplus
-  class SearchAssistantOC;
+class DECLSPEC_UUID("2e71fd0f-aab1-42c0-9146-6d2c4edcf07d") ShellSearchAssistantOC;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ShellSearchAssistantOC, 0x2e71fd0f, 0xaab1, 0x42c0, 0x91,0x46, 0x6d,0x2c,0x4e,0xdc,0xf0,0x7d)
 #endif
 #endif
 
+/*****************************************************************************
+ * SearchAssistantOC coclass
+ */
+
+DEFINE_GUID(CLSID_SearchAssistantOC, 0xb45ff030, 0x4447, 0x11d2, 0x85,0xde, 0x00,0xc0,0x4f,0xa3,0x5c,0x89);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("b45ff030-4447-11d2-85de-00c04fa35c89") SearchAssistantOC;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(SearchAssistantOC, 0xb45ff030, 0x4447, 0x11d2, 0x85,0xde, 0x00,0xc0,0x4f,0xa3,0x5c,0x89)
+#endif
+#endif
+
+/* Begin additional prototypes for all interfaces */
+
+ULONG           __RPC_USER BSTR_UserSize     (ULONG *, ULONG, BSTR *);
+unsigned char * __RPC_USER BSTR_UserMarshal  (ULONG *, unsigned char *, BSTR *);
+unsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *);
+void            __RPC_USER BSTR_UserFree     (ULONG *, BSTR *);
+ULONG           __RPC_USER VARIANT_UserSize     (ULONG *, ULONG, VARIANT *);
+unsigned char * __RPC_USER VARIANT_UserMarshal  (ULONG *, unsigned char *, VARIANT *);
+unsigned char * __RPC_USER VARIANT_UserUnmarshal(ULONG *, unsigned char *, VARIANT *);
+void            __RPC_USER VARIANT_UserFree     (ULONG *, VARIANT *);
+
+/* End additional prototypes */
+
 #ifdef __cplusplus
 }
 #endif
-#endif
+
+#endif /* __exdisp_h__ */
diff --git a/x86_64-w64-mingw32/include/exdispid.h b/x86_64-w64-mingw32/include/exdispid.h
index ad8cffb..012f704 100644
--- a/x86_64-w64-mingw32/include/exdispid.h
+++ b/x86_64-w64-mingw32/include/exdispid.h
@@ -1,123 +1,172 @@
-/**
- * This file has no copyright assigned and is placed in the Public Domain.
- * This file is part of the mingw-w64 runtime package.
- * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+/*
+ * Copyright 2004 Jacek Caban
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
+
 #ifndef EXDISPID_H_
 #define EXDISPID_H_
 
-#define DISPID_BEFORENAVIGATE 100
-#define DISPID_NAVIGATECOMPLETE 101
-#define DISPID_STATUSTEXTCHANGE 102
-#define DISPID_QUIT 103
-#define DISPID_DOWNLOADCOMPLETE 104
-#define DISPID_COMMANDSTATECHANGE 105
-#define DISPID_DOWNLOADBEGIN 106
-#define DISPID_NEWWINDOW 107
-#define DISPID_PROGRESSCHANGE 108
-#define DISPID_WINDOWMOVE 109
-#define DISPID_WINDOWRESIZE 110
-#define DISPID_WINDOWACTIVATE 111
-#define DISPID_PROPERTYCHANGE 112
-#define DISPID_TITLECHANGE 113
-#define DISPID_TITLEICONCHANGE 114
+#define DISPID_BEFORENAVIGATE        100
+#define DISPID_NAVIGATECOMPLETE      101
+#define DISPID_STATUSTEXTCHANGE      102
+#define DISPID_QUIT                  103
+#define DISPID_DOWNLOADCOMPLETE      104
+#define DISPID_COMMANDSTATECHANGE    105
+#define DISPID_DOWNLOADBEGIN         106
+#define DISPID_NEWWINDOW             107
+#define DISPID_PROGRESSCHANGE        108
+#define DISPID_WINDOWMOVE            109
+#define DISPID_WINDOWRESIZE          110
+#define DISPID_WINDOWACTIVATE        111
+#define DISPID_PROPERTYCHANGE        112
+#define DISPID_TITLECHANGE           113
+#define DISPID_TITLEICONCHANGE       114
 
-#define DISPID_FRAMEBEFORENAVIGATE 200
+#define DISPID_FRAMEBEFORENAVIGATE   200
 #define DISPID_FRAMENAVIGATECOMPLETE 201
-#define DISPID_FRAMENEWWINDOW 204
 
-#define DISPID_BEFORENAVIGATE2 250
-#define DISPID_NEWWINDOW2 251
-#define DISPID_NAVIGATECOMPLETE2 252
-#define DISPID_ONQUIT 253
-#define DISPID_ONVISIBLE 254
-#define DISPID_ONTOOLBAR 255
-#define DISPID_ONMENUBAR 256
-#define DISPID_ONSTATUSBAR 257
-#define DISPID_ONFULLSCREEN 258
-#define DISPID_DOCUMENTCOMPLETE 259
-#define DISPID_ONTHEATERMODE 260
-#define DISPID_ONADDRESSBAR 261
-#define DISPID_WINDOWSETRESIZABLE 262
-#define DISPID_WINDOWCLOSING 263
-#define DISPID_WINDOWSETLEFT 264
-#define DISPID_WINDOWSETTOP 265
-#define DISPID_WINDOWSETWIDTH 266
-#define DISPID_WINDOWSETHEIGHT 267
-#define DISPID_CLIENTTOHOSTWINDOW 268
-#define DISPID_SETSECURELOCKICON 269
-#define DISPID_FILEDOWNLOAD 270
-#define DISPID_NAVIGATEERROR 271
+#define DISPID_FRAMENEWWINDOW        204
+
+#define DISPID_BEFORENAVIGATE2       250
+#define DISPID_NEWWINDOW2            251
+#define DISPID_NAVIGATECOMPLETE2     252
+#define DISPID_ONQUIT                253
+#define DISPID_ONVISIBLE             254
+#define DISPID_ONTOOLBAR             255
+#define DISPID_ONMENUBAR             256
+#define DISPID_ONSTATUSBAR           257
+#define DISPID_ONFULLSCREEN          258
+#define DISPID_DOCUMENTCOMPLETE      259
+#define DISPID_ONTHEATERMODE         260
+#define DISPID_ONADDRESSBAR          261
+#define DISPID_WINDOWSETRESIZABLE    262
+#define DISPID_WINDOWCLOSING         263
+#define DISPID_WINDOWSETLEFT         264
+#define DISPID_WINDOWSETTOP          265
+#define DISPID_WINDOWSETWIDTH        266
+#define DISPID_WINDOWSETHEIGHT       267
+#define DISPID_CLIENTTOHOSTWINDOW    268
+#define DISPID_SETSECURELOCKICON     269
+#define DISPID_FILEDOWNLOAD          270
+#define DISPID_NAVIGATEERROR         271
 #define DISPID_PRIVACYIMPACTEDSTATECHANGE 272
-#define DISPID_NEWWINDOW3 273
+#define DISPID_NEWWINDOW3                 273
+#define DISPID_VIEWUPDATE                 281
+#define DISPID_SETPHISHINGFILTERSTATUS    282
+#define DISPID_WINDOWSTATECHANGED         283
+#define DISPID_NEWPROCESS                 284
+#define DISPID_THIRDPARTYURLBLOCKED       285
+#define DISPID_REDIRECTXDOMAINBLOCKED     286
 
 #define DISPID_PRINTTEMPLATEINSTANTIATION 225
-#define DISPID_PRINTTEMPLATETEARDOWN 226
-#define DISPID_UPDATEPAGESTATUS 227
+#define DISPID_PRINTTEMPLATETEARDOWN      226
+#define DISPID_UPDATEPAGESTATUS           227
 
 #define DISPID_WINDOWREGISTERED 200
-#define DISPID_WINDOWREVOKED 201
+#define DISPID_WINDOWREVOKED    201
 
-#define DISPID_RESETFIRSTBOOTMODE 1
-#define DISPID_RESETSAFEMODE 2
+#define DISPID_RESETFIRSTBOOTMODE    1
+#define DISPID_RESETSAFEMODE         2
 #define DISPID_REFRESHOFFLINEDESKTOP 3
-#define DISPID_ADDFAVORITE 4
-#define DISPID_ADDCHANNEL 5
-#define DISPID_ADDDESKTOPCOMPONENT 6
-#define DISPID_ISSUBSCRIBED 7
-#define DISPID_NAVIGATEANDFIND 8
+#define DISPID_ADDFAVORITE           4
+#define DISPID_ADDCHANNEL            5
+#define DISPID_ADDDESKTOPCOMPONENT   6
+#define DISPID_ISSUBSCRIBED          7
+#define DISPID_NAVIGATEANDFIND       8
 #define DISPID_IMPORTEXPORTFAVORITES 9
-#define DISPID_AUTOCOMPLETESAVEFORM 10
-#define DISPID_AUTOSCAN 11
-#define DISPID_AUTOCOMPLETEATTACH 12
-#define DISPID_SHOWBROWSERUI 13
-#define DISPID_SHELLUIHELPERLAST 13
+#define DISPID_AUTOCOMPLETESAVEFORM  10
+#define DISPID_AUTOSCAN              11
+#define DISPID_AUTOCOMPLETEATTACH    12
+#define DISPID_SHOWBROWSERUI         13
+#define DISPID_ADDSEARCHPROVIDER     14
+#define DISPID_RUNONCESHOWN          15
+#define DISPID_SKIPRUNONCE           16
+#define DISPID_CUSTOMIZESETTINGS     17
+#define DISPID_SQMENABLED            18
+#define DISPID_PHISHINGENABLED       19
+#define DISPID_BRANDIMAGEURI         20
+#define DISPID_SKIPTABSWELCOME       21
+#define DISPID_DIAGNOSECONNECTION    22
+#define DISPID_CUSTOMIZECLEARTYPE    23
+#define DISPID_ISSEARCHPROVIDERINSTALLED  24
+#define DISPID_ISSEARCHMIGRATED      25
+#define DISPID_DEFAULTSEARCHPROVIDER 26
+#define DISPID_RUNONCEREQUIREDSETTINGSCOMPLETE  27
+#define DISPID_RUNONCEHASSHOWN       28
+#define DISPID_SEARCHGUIDEURL        29
+#define DISPID_ADDSERVICE            30
+#define DISPID_ISSERVICEINSTALLED    31
+#define DISPID_ADDTOFAVORITESBAR     32
+#define DISPID_BUILDNEWTABPAGE       33
+#define DISPID_SETRECENTLYCLOSEDVISIBLE   34
+#define DISPID_SETACTIVITIESVISIBLE       35
+#define DISPID_CONTENTDISCOVERYRESET      36
+#define DISPID_INPRIVATEFILTERINGENABLED  37
+#define DISPID_SUGGESTEDSITESENABLED      38
+#define DISPID_ENABLESUGGESTEDSITES       39
+#define DISPID_NAVIGATETOSUGGESTEDSITES   40
+#define DISPID_SHOWTABSHELP               41
+#define DISPID_SHOWINPRIVATEHELP          42
+#define DISPID_SHELLUIHELPERLAST          43
 
-#define DISPID_ADVANCEERROR 10
-#define DISPID_RETREATERROR 11
-#define DISPID_CANADVANCEERROR 12
-#define DISPID_CANRETREATERROR 13
-#define DISPID_GETERRORLINE 14
-#define DISPID_GETERRORCHAR 15
-#define DISPID_GETERRORCODE 16
-#define DISPID_GETERRORMSG 17
-#define DISPID_GETERRORURL 18
-#define DISPID_GETDETAILSSTATE 19
-#define DISPID_SETDETAILSSTATE 20
-#define DISPID_GETPERERRSTATE 21
-#define DISPID_SETPERERRSTATE 22
-#define DISPID_GETALWAYSSHOWLOCKSTATE 23
+#define DISPID_ADVANCEERROR            10
+#define DISPID_RETREATERROR            11
+#define DISPID_CANADVANCEERROR         12
+#define DISPID_CANRETREATERROR         13
+#define DISPID_GETERRORLINE            14
+#define DISPID_GETERRORCHAR            15
+#define DISPID_GETERRORCODE            16
+#define DISPID_GETERRORMSG             17
+#define DISPID_GETERRORURL             18
+#define DISPID_GETDETAILSSTATE         19
+#define DISPID_SETDETAILSSTATE         20
+#define DISPID_GETPERERRSTATE          21
+#define DISPID_SETPERERRSTATE          22
+#define DISPID_GETALWAYSSHOWLOCKSTATE  23
 
-#define DISPID_FAVSELECTIONCHANGE 1
-#define DISPID_SELECTIONCHANGE 2
-#define DISPID_DOUBLECLICK 3
-#define DISPID_INITIALIZED 4
+#define DISPID_FAVSELECTIONCHANGE  1
+#define DISPID_SELECTIONCHANGE     2
+#define DISPID_DOUBLECLICK         3
+#define DISPID_INITIALIZED         4
 
-#define DISPID_MOVESELECTIONUP 1
-#define DISPID_MOVESELECTIONDOWN 2
-#define DISPID_RESETSORT 3
-#define DISPID_NEWFOLDER 4
-#define DISPID_SYNCHRONIZE 5
-#define DISPID_IMPORT 6
-#define DISPID_EXPORT 7
-#define DISPID_INVOKECONTEXTMENU 8
-#define DISPID_MOVESELECTIONTO 9
-#define DISPID_SUBSCRIPTIONSENABLED 10
-#define DISPID_CREATESUBSCRIPTION 11
-#define DISPID_DELETESUBSCRIPTION 12
-#define DISPID_SETROOT 13
-#define DISPID_ENUMOPTIONS 14
-#define DISPID_SELECTEDITEM 15
-#define DISPID_ROOT 16
-#define DISPID_DEPTH 17
-#define DISPID_MODE 18
-#define DISPID_FLAGS 19
-#define DISPID_TVFLAGS 20
-#define DISPID_NSCOLUMNS 21
-#define DISPID_COUNTVIEWTYPES 22
-#define DISPID_SETVIEWTYPE 23
-#define DISPID_SELECTEDITEMS 24
-#define DISPID_EXPAND 25
-#define DISPID_UNSELECTALL 26
+#define DISPID_MOVESELECTIONUP       1
+#define DISPID_MOVESELECTIONDOWN     2
+#define DISPID_RESETSORT             3
+#define DISPID_NEWFOLDER             4
+#define DISPID_SYNCHRONIZE           5
+#define DISPID_IMPORT                6
+#define DISPID_EXPORT                7
+#define DISPID_INVOKECONTEXTMENU     8
+#define DISPID_MOVESELECTIONTO       9
+#define DISPID_SUBSCRIPTIONSENABLED  10
+#define DISPID_CREATESUBSCRIPTION    11
+#define DISPID_DELETESUBSCRIPTION    12
+#define DISPID_SETROOT               13
+#define DISPID_ENUMOPTIONS           14
+#define DISPID_SELECTEDITEM          15
+#define DISPID_ROOT                  16
+#define DISPID_DEPTH                 17
+#define DISPID_MODE                  18
+#define DISPID_FLAGS                 19
+#define DISPID_TVFLAGS               20
+#define DISPID_NSCOLUMNS             21
+#define DISPID_COUNTVIEWTYPES        22
+#define DISPID_SETVIEWTYPE           23
+#define DISPID_SELECTEDITEMS         24
+#define DISPID_EXPAND                25
+#define DISPID_UNSELECTALL           26
 
-#endif
+#endif /* EXDISPID_H_ */
diff --git a/x86_64-w64-mingw32/include/fsrm.h b/x86_64-w64-mingw32/include/fsrm.h
index d282bfc..7d78b4a 100644
--- a/x86_64-w64-mingw32/include/fsrm.h
+++ b/x86_64-w64-mingw32/include/fsrm.h
@@ -471,8 +471,8 @@
         BSTR accessPath,
         AdrClientErrorType errorType,
         LONG flags,
-        BSTR windowTitle = L"",
-        BSTR windowMessage = L"",
+        BSTR windowTitle,
+        BSTR windowMessage,
         LONG *result) = 0;
 
 };
@@ -2116,8 +2116,8 @@
 
     virtual HRESULT STDMETHODCALLTYPE ImportFileGroups(
         BSTR filePath,
-        VARIANT *fileGroupNamesSafeArray = 0,
-        BSTR remoteHost = L"",
+        VARIANT *fileGroupNamesSafeArray,
+        BSTR remoteHost,
         IFsrmCommittableCollection **fileGroups) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE ExportFileScreenTemplates(
@@ -2127,8 +2127,8 @@
 
     virtual HRESULT STDMETHODCALLTYPE ImportFileScreenTemplates(
         BSTR filePath,
-        VARIANT *templateNamesSafeArray = 0,
-        BSTR remoteHost = L"",
+        VARIANT *templateNamesSafeArray,
+        BSTR remoteHost,
         IFsrmCommittableCollection **templates) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE ExportQuotaTemplates(
@@ -2138,8 +2138,8 @@
 
     virtual HRESULT STDMETHODCALLTYPE ImportQuotaTemplates(
         BSTR filePath,
-        VARIANT *templateNamesSafeArray = 0,
-        BSTR remoteHost = L"",
+        VARIANT *templateNamesSafeArray,
+        BSTR remoteHost,
         IFsrmCommittableCollection **templates) = 0;
 
 };
diff --git a/x86_64-w64-mingw32/include/fsrmquota.h b/x86_64-w64-mingw32/include/fsrmquota.h
index 5740141..757790a 100644
--- a/x86_64-w64-mingw32/include/fsrmquota.h
+++ b/x86_64-w64-mingw32/include/fsrmquota.h
@@ -183,18 +183,18 @@
         IFsrmQuota **quota) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE EnumQuotas(
-        BSTR path = L"",
-        FsrmEnumOptions options = FsrmEnumOptions_None,
+        BSTR path,
+        FsrmEnumOptions options,
         IFsrmCommittableCollection **quotas) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE EnumAutoApplyQuotas(
-        BSTR path = L"",
-        FsrmEnumOptions options = FsrmEnumOptions_None,
+        BSTR path,
+        FsrmEnumOptions options,
         IFsrmCommittableCollection **quotas) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE EnumEffectiveQuotas(
         BSTR path,
-        FsrmEnumOptions options = FsrmEnumOptions_None,
+        FsrmEnumOptions options,
         IFsrmCommittableCollection **quotas) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Scan(
@@ -536,20 +536,20 @@
         IFsrmQuotaTemplate **quotaTemplate) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetTemplate(
-        BSTR name = L"",
+        BSTR name,
         IFsrmQuotaTemplate **quotaTemplate) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE EnumTemplates(
-        FsrmEnumOptions options = FsrmEnumOptions_None,
+        FsrmEnumOptions options,
         IFsrmCommittableCollection **quotaTemplates) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE ExportTemplates(
-        VARIANT *quotaTemplateNamesArray = 0,
+        VARIANT *quotaTemplateNamesArray,
         BSTR *serializedQuotaTemplates) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE ImportTemplates(
         BSTR serializedQuotaTemplates,
-        VARIANT *quotaTemplateNamesArray = 0,
+        VARIANT *quotaTemplateNamesArray,
         IFsrmCommittableCollection **quotaTemplates) = 0;
 
 };
@@ -2529,7 +2529,7 @@
 {
     virtual HRESULT STDMETHODCALLTYPE IsAffectedByQuota(
         BSTR path,
-        FsrmEnumOptions options = FsrmEnumOptions_None,
+        FsrmEnumOptions options,
         VARIANT_BOOL *affected) = 0;
 
 };
diff --git a/x86_64-w64-mingw32/include/fsrmreports.h b/x86_64-w64-mingw32/include/fsrmreports.h
index fef2e9e..eb8c099 100644
--- a/x86_64-w64-mingw32/include/fsrmreports.h
+++ b/x86_64-w64-mingw32/include/fsrmreports.h
@@ -634,7 +634,7 @@
         SAFEARRAY **descriptions) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE EnumFileManagementJobs(
-        FsrmEnumOptions options = FsrmEnumOptions_None,
+        FsrmEnumOptions options,
         IFsrmCollection **fileManagementJobs) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE CreateFileManagementJob(
@@ -1086,7 +1086,7 @@
 IFsrmReportManager : public IDispatch
 {
     virtual HRESULT STDMETHODCALLTYPE EnumReportJobs(
-        FsrmEnumOptions options = FsrmEnumOptions_None,
+        FsrmEnumOptions options,
         IFsrmCollection **reportJobs) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE CreateReportJob(
diff --git a/x86_64-w64-mingw32/include/fsrmscreen.h b/x86_64-w64-mingw32/include/fsrmscreen.h
index 8b71306..4f01ac9 100644
--- a/x86_64-w64-mingw32/include/fsrmscreen.h
+++ b/x86_64-w64-mingw32/include/fsrmscreen.h
@@ -169,16 +169,16 @@
         IFsrmFileGroup **fileGroup) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE EnumFileGroups(
-        FsrmEnumOptions options = FsrmEnumOptions_None,
+        FsrmEnumOptions options,
         IFsrmCommittableCollection **fileGroups) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE ExportFileGroups(
-        VARIANT *fileGroupNamesArray = 0,
+        VARIANT *fileGroupNamesArray,
         BSTR *serializedFileGroups) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE ImportFileGroups(
         BSTR serializedFileGroups,
-        VARIANT *fileGroupNamesArray = 0,
+        VARIANT *fileGroupNamesArray,
         IFsrmCommittableCollection **fileGroups) = 0;
 
 };
@@ -399,8 +399,8 @@
         IFsrmFileScreen **fileScreen) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE EnumFileScreens(
-        BSTR path = L"",
-        FsrmEnumOptions options = FsrmEnumOptions_None,
+        BSTR path,
+        FsrmEnumOptions options,
         IFsrmCommittableCollection **fileScreens) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE CreateFileScreenException(
@@ -412,8 +412,8 @@
         IFsrmFileScreenException **fileScreenException) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE EnumFileScreenExceptions(
-        BSTR path = L"",
-        FsrmEnumOptions options = FsrmEnumOptions_None,
+        BSTR path,
+        FsrmEnumOptions options,
         IFsrmCommittableCollection **fileScreenExceptions) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE CreateFileScreenCollection(
@@ -700,16 +700,16 @@
         IFsrmFileScreenTemplate **fileScreenTemplate) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE EnumTemplates(
-        FsrmEnumOptions options = FsrmEnumOptions_None,
+        FsrmEnumOptions options,
         IFsrmCommittableCollection **fileScreenTemplates) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE ExportTemplates(
-        VARIANT *fileScreenTemplateNamesArray = 0,
+        VARIANT *fileScreenTemplateNamesArray,
         BSTR *serializedFileScreenTemplates) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE ImportTemplates(
         BSTR serializedFileScreenTemplates,
-        VARIANT *fileScreenTemplateNamesArray = 0,
+        VARIANT *fileScreenTemplateNamesArray,
         IFsrmCommittableCollection **fileScreenTemplates) = 0;
 
 };
diff --git a/x86_64-w64-mingw32/include/infstr.h b/x86_64-w64-mingw32/include/infstr.h
new file mode 100644
index 0000000..879f8a8
--- /dev/null
+++ b/x86_64-w64-mingw32/include/infstr.h
@@ -0,0 +1,20 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef _INC_INFSTR
+#define _INC_INFSTR
+
+#include <winapifamily.h>
+
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
+
+#define INFSTR_SECT_VERSION TEXT("Version")
+#define INFSTR_KEY_PROVIDER TEXT("Provider")
+#define INFSTR_KEY_HARDWARE_CLASSGUID TEXT("ClassGUID")
+#define INFSTR_DRIVERVERSION_SECTION TEXT("DriverVer")
+
+#endif
+#endif
diff --git a/x86_64-w64-mingw32/include/intsafe.h b/x86_64-w64-mingw32/include/intsafe.h
new file mode 100644
index 0000000..5764d4e
--- /dev/null
+++ b/x86_64-w64-mingw32/include/intsafe.h
@@ -0,0 +1,405 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef _INTSAFE_H_INCLUDED_
+#define _INTSAFE_H_INCLUDED_
+
+#include <winapifamily.h>
+
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
+
+#include <wtypesbase.h>
+#include <specstrings.h>
+
+#define INTSAFE_E_ARITHMETIC_OVERFLOW ((HRESULT)0x80070216)
+
+#ifndef S_OK
+#define S_OK ((HRESULT)0)
+#endif
+
+#ifdef __clang__
+#if __has_builtin(__builtin_add_overflow)
+#define __MINGW_INTSAFE_WORKS
+#endif
+#elif __GNUC__ >= 5
+#define __MINGW_INTSAFE_WORKS
+#endif
+
+#ifdef __MINGW_INTSAFE_WORKS
+
+#ifndef __MINGW_INTSAFE_API
+#define __MINGW_INTSAFE_API FORCEINLINE
+#endif
+
+/** If CHAR is unsigned, use static inline for functions that operate
+on chars.  This avoids the risk of linking to the wrong function when
+different translation units with different types of chars are linked
+together, and code using signed chars will not be affected. */
+#ifndef __MINGW_INTSAFE_CHAR_API
+#ifdef __CHAR_UNSIGNED__
+#define __MINGW_INTSAFE_CHAR_API static inline
+#else
+#define __MINGW_INTSAFE_CHAR_API __MINGW_INTSAFE_API
+#endif
+#endif
+
+#define __MINGW_INTSAFE_BODY(operation, x, y) \
+{ \
+  if (__builtin_##operation##_overflow(x, y, result)) \
+  { \
+      *result = 0; \
+      return INTSAFE_E_ARITHMETIC_OVERFLOW; \
+  } \
+  return S_OK; \
+}
+
+#define __MINGW_INTSAFE_CONV(name, type_src, type_dest) \
+    HRESULT name(type_src operand, type_dest * result) \
+    __MINGW_INTSAFE_BODY(add, operand, 0)
+
+#define __MINGW_INTSAFE_MATH(name, type, operation) \
+    HRESULT name(type x, type y, type * result) \
+    __MINGW_INTSAFE_BODY(operation, x, y)
+
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UInt8ToInt8, UINT8, INT8)
+__MINGW_INTSAFE_CHAR_API __MINGW_INTSAFE_CONV(UInt8ToChar, UINT8, CHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ByteToInt8, BYTE, INT8)
+__MINGW_INTSAFE_CHAR_API __MINGW_INTSAFE_CONV(ByteToChar, BYTE, CHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int8ToUChar, INT8, UCHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int8ToUInt8, INT8, UINT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int8ToUShort, INT8, USHORT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int8ToUInt, INT8, UINT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int8ToULong, INT8, ULONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int8ToUIntPtr, INT8, UINT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int8ToULongPtr, INT8, ULONG_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int8ToULongLong, INT8, ULONGLONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UShortToUChar, USHORT, UCHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UShortToUInt8, USHORT, UINT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UShortToByte, USHORT, BYTE)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UShortToInt8, USHORT, INT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UShortToShort, USHORT, SHORT)
+__MINGW_INTSAFE_CHAR_API __MINGW_INTSAFE_CONV(UShortToChar, USHORT, CHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(WordToUChar, WORD, UCHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(WordToByte, WORD, BYTE)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(WordToShort, WORD, SHORT)
+__MINGW_INTSAFE_CHAR_API __MINGW_INTSAFE_CONV(WordToChar, WORD, CHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ShortToUChar, SHORT, UCHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ShortToUInt8, SHORT, UINT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ShortToByte, SHORT, BYTE)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ShortToInt8, SHORT, INT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ShortToUShort, SHORT, USHORT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ShortToWord, SHORT, WORD)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ShortToUInt, SHORT, UINT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ShortToULong, SHORT, ULONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ShortToUIntPtr, SHORT, UINT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ShortToULongPtr, SHORT, ULONG_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ShortToDWordPtr, SHORT, DWORD_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ShortToULongLong, SHORT, ULONGLONG)
+__MINGW_INTSAFE_CHAR_API __MINGW_INTSAFE_CONV(ShortToChar, SHORT, CHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntToUChar, UINT, UCHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntToUInt8, UINT, UINT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntToByte, UINT, BYTE)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntToInt8, UINT, INT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntToUShort, UINT, USHORT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntToWord, UINT, WORD)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntToShort, UINT, SHORT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntToLong, UINT, LONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntToInt, UINT, INT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntToIntPtr, UINT, INT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntToPtrdiffT, UINT, ptrdiff_t)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntToLongPtr, UINT, LONG_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntToSSIZET, UINT, SSIZE_T)
+__MINGW_INTSAFE_CHAR_API __MINGW_INTSAFE_CONV(UIntToChar, UINT, CHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongToUChar, ULONG, UCHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongToUInt8, ULONG, UINT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongToByte, ULONG, BYTE)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongToInt8, ULONG, INT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongToUShort, ULONG, USHORT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongToWord, ULONG, WORD)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongToShort, ULONG, SHORT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongToUInt, ULONG, UINT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongToLong, ULONG, LONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongToInt, ULONG, INT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongToUIntPtr, ULONG, UINT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongToIntPtr, ULONG, INT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongToPtrdiffT, ULONG, ptrdiff_t)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongToLongPtr, ULONG, LONG_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongToSSIZET, ULONG, SSIZE_T)
+__MINGW_INTSAFE_CHAR_API __MINGW_INTSAFE_CONV(ULongToChar, ULONG, CHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(DWordToUChar, DWORD, UCHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(DWordToByte, DWORD, BYTE)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(DWordToUShort, DWORD, USHORT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(DWordToWord, DWORD, WORD)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(DWordToShort, DWORD, SHORT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(DWordToUInt, DWORD, UINT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(DWordToLong, DWORD, LONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(DWordToInt, DWORD, INT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(DWordToUIntPtr, DWORD, UINT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(DWordToIntPtr, DWORD, INT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(DWordToPtrdiffT, DWORD, ptrdiff_t)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(DWordToLongPtr, DWORD, LONG_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(DWordToSSIZET, DWORD, SSIZE_T)
+__MINGW_INTSAFE_CHAR_API __MINGW_INTSAFE_CONV(DWordToChar, DWORD, CHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongToUChar, LONG, UCHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongToUInt8, LONG, UINT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongToByte, LONG, BYTE)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongToInt8, LONG, INT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongToUShort, LONG, USHORT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongToWord, LONG, WORD)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongToShort, LONG, SHORT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongToUInt, LONG, UINT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongToULong, LONG, ULONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongToDWord, LONG, DWORD)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongToInt, LONG, INT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongToUIntPtr, LONG, UINT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongToSizeT, LONG, size_t)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongToULongPtr, LONG, ULONG_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongToDWordPtr, LONG, DWORD_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongToIntPtr, LONG, INT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongToPtrdiffT, LONG, ptrdiff_t)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongToULongLong, LONG, ULONGLONG)
+__MINGW_INTSAFE_CHAR_API __MINGW_INTSAFE_CONV(LongToChar, LONG, CHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntToUChar, INT, UCHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntToUInt8, INT, UINT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntToByte, INT, BYTE)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntToInt8, INT, INT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntToUShort, INT, USHORT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntToWord, INT, WORD)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntToShort, INT, SHORT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntToUInt, INT, UINT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntToULong, INT, ULONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntToDWord, INT, DWORD)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntToUIntPtr, INT, UINT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntToSizeT, INT, size_t)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntToULongPtr, INT, ULONG_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntToDWordPtr, INT, DWORD_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntToULongLong, INT, ULONGLONG)
+__MINGW_INTSAFE_CHAR_API __MINGW_INTSAFE_CONV(IntToChar, INT, CHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntPtrToUChar, UINT_PTR, UCHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntPtrToUInt8, UINT_PTR, UINT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntPtrToInt8, UINT_PTR, INT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntPtrToUInt16, UINT_PTR, UINT16)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntPtrToUShort, UINT_PTR, USHORT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntPtrToInt16, UINT_PTR, INT16)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntPtrToShort, UINT_PTR, SHORT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntPtrToUInt, UINT_PTR, UINT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntPtrToULong, UINT_PTR, ULONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntPtrToDWord, UINT_PTR, DWORD)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntPtrToLong, UINT_PTR, LONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntPtrToInt, UINT_PTR, INT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntPtrToIntPtr, UINT_PTR, INT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntPtrToLongPtr, UINT_PTR, LONG_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntPtrToSSIZET, UINT_PTR, SSIZE_T)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntPtrToInt64, UINT_PTR, INT64)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntPtrToLongLong, UINT_PTR, LONGLONG)
+__MINGW_INTSAFE_CHAR_API __MINGW_INTSAFE_CONV(UIntPtrToChar, UINT_PTR, CHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(SizeTToUInt, size_t, UINT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(SizeTToULong, size_t, ULONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(SizeTToDWord, size_t, DWORD)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(SizeTToLong, size_t, LONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(SizeTToInt, size_t, INT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(SizeTToIntPtr, size_t, INT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(SizeTToPtrdiffT, size_t, ptrdiff_t)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(SizeTToLongPtr, size_t, LONG_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(SizeTToSSIZET, size_t, SSIZE_T)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(SizeTToInt64, size_t, INT64)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongPtrToUChar, ULONG_PTR, UCHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongPtrToUInt8, ULONG_PTR, UINT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongPtrToInt8, ULONG_PTR, INT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongPtrToUShort, ULONG_PTR, USHORT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongPtrToShort, ULONG_PTR, SHORT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongPtrToUInt, ULONG_PTR, UINT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongPtrToULong, ULONG_PTR, ULONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongPtrToDWord, ULONG_PTR, DWORD)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongPtrToLong, ULONG_PTR, LONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongPtrToInt, ULONG_PTR, INT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongPtrToUIntPtr, ULONG_PTR, UINT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongPtrToIntPtr, ULONG_PTR, INT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongPtrToPtrdiffT, ULONG_PTR, ptrdiff_t)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongPtrToLongPtr, ULONG_PTR, LONG_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongPtrToSSIZET, ULONG_PTR, SSIZE_T)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongPtrToInt64, ULONG_PTR, INT64)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongPtrToLongLong, ULONG_PTR, LONGLONG)
+__MINGW_INTSAFE_CHAR_API __MINGW_INTSAFE_CONV(ULongPtrToChar, ULONG_PTR, CHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(DWordPtrToUInt, DWORD_PTR, UINT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(DWordPtrToULong, DWORD_PTR, ULONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(DWordPtrToDWord, DWORD_PTR, DWORD)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(DWordPtrToLong, DWORD_PTR, LONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(DWordPtrToInt, DWORD_PTR, INT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(DWordPtrToUIntPtr, DWORD_PTR, UINT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(DWordPtrToIntPtr, DWORD_PTR, INT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(DWordPtrToPtrdiffT, DWORD_PTR, ptrdiff_t)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(DWordPtrToLongPtr, DWORD_PTR, LONG_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(DWordPtrToSSIZET, DWORD_PTR, SSIZE_T)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(DWordPtrToInt64, DWORD_PTR, INT64)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntPtrToUChar, INT_PTR, UCHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntPtrToUInt8, INT_PTR, UINT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntPtrToInt8, INT_PTR, INT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntPtrToUShort, INT_PTR, USHORT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntPtrToShort, INT_PTR, SHORT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntPtrToUInt, INT_PTR, UINT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntPtrToULong, INT_PTR, ULONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntPtrToDWord, INT_PTR, DWORD)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntPtrToLong, INT_PTR, LONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntPtrToInt, INT_PTR, INT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntPtrToUIntPtr, INT_PTR, UINT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntPtrToSizeT, INT_PTR, size_t)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntPtrToULongPtr, INT_PTR, ULONG_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntPtrToDWordPtr, INT_PTR, DWORD_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntPtrToLongPtr, INT_PTR, LONG_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(IntPtrToULongLong, INT_PTR, ULONGLONG)
+__MINGW_INTSAFE_CHAR_API __MINGW_INTSAFE_CONV(IntPtrToChar, INT_PTR, CHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(PtrdiffTToUInt, ptrdiff_t, UINT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(PtrdiffTToULong, ptrdiff_t, ULONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(PtrdiffTToDWord, ptrdiff_t, DWORD)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(PtrdiffTToLong, ptrdiff_t, LONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(PtrdiffTToInt, ptrdiff_t, INT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(PtrdiffTToUIntPtr, ptrdiff_t, UINT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(PtrdiffTToSizeT, ptrdiff_t, size_t)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(PtrdiffTToULongPtr, ptrdiff_t, ULONG_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(PtrdiffTToDWordPtr, ptrdiff_t, DWORD_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongPtrToUChar, LONG_PTR, UCHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongPtrToUInt8, LONG_PTR, UINT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongPtrToInt8, LONG_PTR, INT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongPtrToUShort, LONG_PTR, USHORT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongPtrToShort, LONG_PTR, SHORT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongPtrToUInt, LONG_PTR, UINT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongPtrToULong, LONG_PTR, ULONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongPtrToDWord, LONG_PTR, DWORD)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongPtrToLong, LONG_PTR, LONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongPtrToInt, LONG_PTR, INT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongPtrToUIntPtr, LONG_PTR, UINT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongPtrToSizeT, LONG_PTR, size_t)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongPtrToULongPtr, LONG_PTR, ULONG_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongPtrToDWordPtr, LONG_PTR, DWORD_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongPtrToIntPtr, LONG_PTR, INT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongPtrToULongLong, LONG_PTR, ULONGLONG)
+__MINGW_INTSAFE_CHAR_API __MINGW_INTSAFE_CONV(LongPtrToChar, LONG_PTR, CHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(SSIZETToUInt, SSIZE_T, UINT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(SSIZETToULong, SSIZE_T, ULONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(SSIZETToDWord, SSIZE_T, DWORD)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(SSIZETToLong, SSIZE_T, LONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(SSIZETToInt, SSIZE_T, INT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(SSIZETToUIntPtr, SSIZE_T, UINT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(SSIZETToSizeT, SSIZE_T, size_t)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(SSIZETToULongPtr, SSIZE_T, ULONG_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(SSIZETToDWordPtr, SSIZE_T, DWORD_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(SSIZETToIntPtr, SSIZE_T, INT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongLongToUChar, ULONGLONG, UCHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongLongToUInt8, ULONGLONG, UINT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongLongToInt8, ULONGLONG, INT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongLongToUShort, ULONGLONG, USHORT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongLongToShort, ULONGLONG, SHORT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongLongToUInt, ULONGLONG, UINT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongLongToULong, ULONGLONG, ULONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongLongToDWord, ULONGLONG, DWORD)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongLongToLong, ULONGLONG, LONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongLongToInt, ULONGLONG, INT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongLongToUIntPtr, ULONGLONG, UINT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongLongToSizeT, ULONGLONG, size_t)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongLongToULongPtr, ULONGLONG, ULONG_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongLongToDWordPtr, ULONGLONG, DWORD_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongLongToIntPtr, ULONGLONG, INT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongLongToPtrdiffT, ULONGLONG, ptrdiff_t)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongLongToLongPtr, ULONGLONG, LONG_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongLongToSSIZET, ULONGLONG, SSIZE_T)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongLongToInt64, ULONGLONG, INT64)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ULongLongToLongLong, ULONGLONG, LONGLONG)
+__MINGW_INTSAFE_CHAR_API __MINGW_INTSAFE_CONV(ULongLongToChar, ULONGLONG, CHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int64ToUInt, INT64, UINT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int64ToULong, INT64, ULONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int64ToDWord, INT64, DWORD)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int64ToLong, INT64, LONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int64ToInt, INT64, INT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int64ToUIntPtr, INT64, UINT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int64ToSizeT, INT64, size_t)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int64ToULongPtr, INT64, ULONG_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int64ToDWordPtr, INT64, DWORD_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int64ToIntPtr, INT64, INT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int64ToPtrdiffT, INT64, ptrdiff_t)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int64ToLongPtr, INT64, LONG_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int64ToSSIZET, INT64, SSIZE_T)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int64ToULongLong, INT64, ULONGLONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongLongToUChar, LONGLONG, UCHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongLongToUInt8, LONGLONG, UINT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongLongToInt8, LONGLONG, INT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongLongToUShort, LONGLONG, USHORT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongLongToShort, LONGLONG, SHORT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongLongToUInt, LONGLONG, UINT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongLongToULong, LONGLONG, ULONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongLongToLong, LONGLONG, LONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongLongToInt, LONGLONG, INT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongLongToIntPtr, LONGLONG, INT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongLongToLongPtr, LONGLONG, LONG_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(LongLongToULongLong, LONGLONG, ULONGLONG)
+__MINGW_INTSAFE_CHAR_API __MINGW_INTSAFE_CONV(LongLongToChar, LONGLONG, CHAR)
+
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(UInt8Add, UINT8, add)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(Int8Add, INT8, add)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(UShortAdd, USHORT, add)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(WordAdd, WORD, add)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(ShortAdd, SHORT, add)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(UIntAdd, UINT, add)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(ULongAdd, ULONG, add)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(DWordAdd, DWORD, add)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(LongAdd, LONG, add)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(IntAdd, INT, add)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(UIntPtrAdd, UINT_PTR, add)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(SizeTAdd, size_t, add)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(ULongPtrAdd, ULONG_PTR, add)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(DWordPtrAdd, DWORD_PTR, add)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(IntPtrAdd, INT_PTR, add)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(PtrdiffTAdd, ptrdiff_t, add)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(LongPtrAdd, LONG_PTR, add)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(SSIZETAdd, SSIZE_T, add)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(ULongLongAdd, ULONGLONG, add)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(LongLongAdd, LONGLONG, add)
+
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(UInt8Sub, UINT8, sub)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(Int8Sub, INT8, sub)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(UShortSub, USHORT, sub)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(WordSub, WORD, sub)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(ShortSub, SHORT, sub)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(UIntSub, UINT, sub)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(ULongSub, ULONG, sub)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(DWordSub, DWORD, sub)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(LongSub, LONG, sub)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(IntSub, INT, sub)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(UIntPtrSub, UINT_PTR, sub)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(SizeTSub, size_t, sub)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(ULongPtrSub, ULONG_PTR, sub)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(DWordPtrSub, DWORD_PTR, sub)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(IntPtrSub, INT_PTR, sub)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(PtrdiffTSub, ptrdiff_t, sub)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(LongPtrSub, LONG_PTR, sub)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(SSIZETSub, SSIZE_T, sub)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(ULongLongSub, ULONGLONG, sub)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(LongLongSub, LONGLONG, sub)
+
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(UInt8Mult, UINT8, mul)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(Int8Mult, INT8, mul)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(UShortMult, USHORT, mul)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(WordMult, WORD, mul)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(ShortMult, SHORT, mul)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(UIntMult, UINT, mul)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(ULongMult, ULONG, mul)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(DWordMult, DWORD, mul)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(LongMult, LONG, mul)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(IntMult, INT, mul)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(UIntPtrMult, UINT_PTR, mul)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(SizeTMult, size_t, mul)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(ULongPtrMult, ULONG_PTR, mul)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(DWordPtrMult, DWORD_PTR, mul)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(IntPtrMult, INT_PTR, mul)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(PtrdiffTMult, ptrdiff_t, mul)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(LongPtrMult, LONG_PTR, mul)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(SSIZETMult, SSIZE_T, mul)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(ULongLongMult, ULONGLONG, mul)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_MATH(LongLongMult, LONGLONG, mul)
+
+#endif /* __GNUC__ >= 5 */
+#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */
+#endif /* _INTSAFE_H_INCLUDED_ */
diff --git a/x86_64-w64-mingw32/include/io.h b/x86_64-w64-mingw32/include/io.h
index b68393a..c61e94a 100644
--- a/x86_64-w64-mingw32/include/io.h
+++ b/x86_64-w64-mingw32/include/io.h
@@ -176,8 +176,10 @@
 #define	R_OK	4	/* Check for read permission */
 
   _CRTIMP int __cdecl _access(const char *_Filename,int _AccessMode);
+  _CRTIMP errno_t __cdecl _access_s(const char *_Filename,int _AccessMode);
   _CRTIMP int __cdecl _chmod(const char *_Filename,int _Mode);
   _CRTIMP int __cdecl _chsize(int _FileHandle,long _Size) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
+  _CRTIMP errno_t __cdecl _chsize_s (int _FileHandle,__int64 _Size);
   _CRTIMP int __cdecl _close(int _FileHandle);
   _CRTIMP int __cdecl _commit(int _FileHandle);
   _CRTIMP int __cdecl _creat(const char *_Filename,int _PermissionMode) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
@@ -193,6 +195,7 @@
   _CRTIMP long __cdecl _lseek(int _FileHandle,long _Offset,int _Origin);
   _off64_t lseek64(int fd,_off64_t offset, int whence);
   _CRTIMP char *__cdecl _mktemp(char *_TemplateName) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
+  _CRTIMP errno_t __cdecl _mktemp_s (char *_TemplateName,size_t _Size);
   _CRTIMP int __cdecl _pipe(int *_PtHandles,unsigned int _PipeSize,int _TextMode);
   _CRTIMP int __cdecl _read(int _FileHandle,void *_DstBuf,unsigned int _MaxCharCount);
 
@@ -209,6 +212,7 @@
   _CRTIMP int __cdecl _setmode(int _FileHandle,int _Mode);
   _CRTIMP long __cdecl _tell(int _FileHandle);
   _CRTIMP int __cdecl _umask(int _Mode) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
+  _CRTIMP errno_t __cdecl _umask_s (int _NewMode,int *_OldMode);
   _CRTIMP int __cdecl _write(int _FileHandle,const void *_Buf,unsigned int _MaxCharCount);
 
   __MINGW_EXTENSION _CRTIMP __int64 __cdecl _filelengthi64(int _FileHandle);
@@ -279,6 +283,7 @@
 #ifndef _WIO_DEFINED
 #define _WIO_DEFINED
   _CRTIMP int __cdecl _waccess(const wchar_t *_Filename,int _AccessMode);
+  _CRTIMP errno_t __cdecl _waccess_s (const wchar_t *_Filename,int _AccessMode);
   _CRTIMP int __cdecl _wchmod(const wchar_t *_Filename,int _Mode);
   _CRTIMP int __cdecl _wcreat(const wchar_t *_Filename,int _PermissionMode) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
   _CRTIMP intptr_t __cdecl _wfindfirst32(const wchar_t *_Filename,struct _wfinddata32_t *_FindData);
@@ -286,6 +291,7 @@
   _CRTIMP int __cdecl _wunlink(const wchar_t *_Filename);
   _CRTIMP int __cdecl _wrename(const wchar_t *_OldFilename,const wchar_t *_NewFilename);
   _CRTIMP wchar_t *__cdecl _wmktemp(wchar_t *_TemplateName) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
+  _CRTIMP errno_t __cdecl _wmktemp_s (wchar_t *_TemplateName, size_t _SizeInWords);
 
   _CRTIMP intptr_t __cdecl _wfindfirst32i64(const wchar_t *_Filename,struct _wfinddata32i64_t *_FindData);
   intptr_t __cdecl _wfindfirst64i32(const wchar_t *_Filename,struct _wfinddata64i32_t *_FindData);
@@ -365,7 +371,5 @@
 
 #pragma pack(pop)
 
-#include <sec_api/io_s.h>
-
 #endif /* End _IO_H_ */
 
diff --git a/x86_64-w64-mingw32/include/limits.h b/x86_64-w64-mingw32/include/limits.h
index 73dca2a..f0145df 100644
--- a/x86_64-w64-mingw32/include/limits.h
+++ b/x86_64-w64-mingw32/include/limits.h
@@ -24,8 +24,13 @@
 #define SCHAR_MAX 127
 #define UCHAR_MAX 0xff
 
+#ifdef __CHAR_UNSIGNED__
+#define CHAR_MIN 0
+#define CHAR_MAX UCHAR_MAX
+#else
 #define CHAR_MIN SCHAR_MIN
 #define CHAR_MAX SCHAR_MAX
+#endif
 
 #define MB_LEN_MAX 5
 #define SHRT_MIN (-32768)
diff --git a/x86_64-w64-mingw32/include/magnification.h b/x86_64-w64-mingw32/include/magnification.h
new file mode 100644
index 0000000..649948a
--- /dev/null
+++ b/x86_64-w64-mingw32/include/magnification.h
@@ -0,0 +1,37 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef _INC_MAGNIFIER
+#define _INC_MAGNIFIER
+
+#include <winapifamily.h>
+
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+
+#include <wincodec.h>
+
+#define MW_FILTERMODE_EXCLUDE 0
+#define MW_FILTERMODE_INCLUDE 1
+
+typedef struct tagMAGTRANSFORM {
+    float v[3][3];
+} MAGTRANSFORM, *PMAGTRANSFORM;
+
+typedef struct tagMAGIMAGEHEADER {
+    UINT width;
+    UINT height;
+    WICPixelFormatGUID format;
+    UINT stride;
+    UINT offset;
+    SIZE_T cbSize;
+} MAGIMAGEHEADER, *PMAGIMAGEHEADER;
+
+typedef struct tagMAGCOLOREFFECT {
+    float transform[5][5];
+} MAGCOLOREFFECT, *PMAGCOLOREFFECT;
+
+#endif
+#endif
diff --git a/x86_64-w64-mingw32/include/math.h b/x86_64-w64-mingw32/include/math.h
index 069e734..b06ca79 100644
--- a/x86_64-w64-mingw32/include/math.h
+++ b/x86_64-w64-mingw32/include/math.h
@@ -36,7 +36,7 @@
 #endif
 #endif
 
-#if !defined(__STRICT_ANSI__) || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) || defined(_USE_MATH_DEFINES)
+#if !defined(__STRICT_ANSI__) || defined(_POSIX_C_SOURCE) || defined(_POSIX_SOURCE) || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) || defined(_USE_MATH_DEFINES)
 #define M_E		2.7182818284590452354
 #define M_LOG2E		1.4426950408889634074
 #define M_LOG10E	0.43429448190325182765
@@ -207,7 +207,7 @@
 #if !defined (__ia64__)
   __CRT_INLINE float __cdecl fabsf (float x)
   {
-#ifdef __x86_64__
+#if defined(__x86_64__) || defined(__arm__)
     return __builtin_fabsf (x);
 #else
     float res = 0.0F;
@@ -218,14 +218,18 @@
 
   __CRT_INLINE long double __cdecl fabsl (long double x)
   {
+#ifdef __arm__
+    return __builtin_fabsl (x);
+#else
     long double res = 0.0l;
     __asm__ __volatile__ ("fabs;" : "=t" (res) : "0" (x));
     return res;
+#endif
   }
 
   __CRT_INLINE double __cdecl fabs (double x)
   {
-#ifdef __x86_64__
+#if defined(__x86_64__) || defined(__arm__)
     return __builtin_fabs (x);
 #else
     double res = 0.0;
@@ -424,20 +428,7 @@
               FP_INFINITE : FP_NAN);
     return FP_NORMAL;
 #elif defined(__arm__) || defined(_ARM_)
-    __mingw_fp_types_t hlp;
-    unsigned int l, h;
-
-    hlp.d = &x;
-    h = hlp.ldt->lh.high;
-    l = hlp.ldt->lh.low | (h & 0xfffff);
-    h &= 0x7ff00000;
-    if ((h | l) == 0)
-      return FP_ZERO;
-    if (!h)
-      return FP_SUBNORMAL;
-    if (h == 0x7ff00000)
-      return (l ? FP_NAN : FP_INFINITE);
-    return FP_NORMAL;
+    return __fpclassify(x);
 #elif defined(__i386__) || defined(_X86_)
     unsigned short sw;
     __asm__ __volatile__ ("fxam; fstsw %%ax;" : "=a" (sw): "t" (x));
@@ -584,15 +575,7 @@
     signexp = 0xfffe - signexp;
     return (int) ((unsigned int) signexp) >> 16;
 #elif defined(__arm__) || defined(_ARM_)
-    __mingw_fp_types_t hlp;
-    int l, h;
-
-    hlp.d = &_x;
-    l = hlp.dt->lh.low;
-    h = hlp.dt->lh.high & 0x7fffffff;
-    h |= (unsigned int) (l | -l) >> 31;
-    h = 0x7ff00000 - h;
-    return (int) ((unsigned int) h) >> 31;
+    __isnan(_x);
 #elif defined(__i386__) || defined(_X86_)
     unsigned short sw;
     __asm__ __volatile__ ("fxam;"
@@ -656,10 +639,7 @@
     ld.ld = &x;
     return ((ld.ldt->lh.sign_exponent & 0x8000) != 0);
 #elif defined(__arm__) || defined(_ARM_)
-    __mingw_fp_types_t hlp;
-
-    hlp.d = &x;
-    return ((hlp.dt->lh.high & 0x80000000) != 0);
+    __signbit(x);
 #elif defined(__i386__) || defined(_X86_)
     unsigned short stw;
     __asm__ __volatile__ ("fxam; fstsw %%ax;": "=a" (stw) : "t" (x));
diff --git a/x86_64-w64-mingw32/include/mediaobj.idl b/x86_64-w64-mingw32/include/mediaobj.idl
index cf7bb7a..04c82e8 100644
--- a/x86_64-w64-mingw32/include/mediaobj.idl
+++ b/x86_64-w64-mingw32/include/mediaobj.idl
@@ -19,12 +19,10 @@
 
 import "unknwn.idl";
 import "objidl.idl";
+import "strmif.idl";
 
 interface IDMOQualityControl;
 interface IDMOVideoOutputOptimizations;
-interface IMediaBuffer;
-interface IMediaObject;
-interface IMediaObjectInPlace;
 
 typedef struct _DMOMediaType
 {
@@ -67,3 +65,178 @@
         [out] IEnumDMO **ppEnum
     );
 }
+
+/*****************************************************************************
+ * IMediaBuffer interface
+ */
+[
+    object,
+    uuid(59eff8b9-938c-4a26-82f2-95cb84cdc837),
+    local
+]
+interface IMediaBuffer : IUnknown
+{
+    HRESULT SetLength(
+       DWORD cbLength
+    );
+
+    HRESULT GetMaxLength(
+       [out] DWORD *pcbMaxLength
+    );
+
+    HRESULT GetBufferAndLength(
+       [out] BYTE **ppBuffer,
+       [out] DWORD *pcbLength
+    );
+}
+
+typedef struct _DMO_OUTPUT_DATA_BUFFER {
+    IMediaBuffer *pBuffer;
+    DWORD dwStatus;
+    REFERENCE_TIME rtTimestamp;
+    REFERENCE_TIME rtTimelength;
+} DMO_OUTPUT_DATA_BUFFER, *PDMO_OUTPUT_DATA_BUFFER;
+
+enum _DMO_INPLACE_PROCESS_FLAGS {
+    DMO_INPLACE_NORMAL = 0x00000000,
+    DMO_INPLACE_ZERO   = 0x00000001
+};
+
+/*****************************************************************************
+ * IMediaObject interface
+ */
+[
+    object,
+    uuid(d8ad0f58-5494-4102-97c5-ec798e59bcf4),
+    local
+]
+interface IMediaObject : IUnknown
+{
+    HRESULT GetStreamCount(
+        [out] DWORD *pcInputStreams,
+        [out] DWORD *pcOutputStreams
+    );
+
+    HRESULT GetInputStreamInfo(
+        DWORD dwInputStreamIndex,
+        [out] DWORD *pdwFlags
+    );
+
+    HRESULT GetOutputStreamInfo(
+        DWORD dwOutputStreamIndex,
+        [out] DWORD *pdwFlags
+    );
+
+    HRESULT GetInputType(
+        DWORD dwInputStreamIndex,
+        DWORD dwTypeIndex,
+        [out] DMO_MEDIA_TYPE *pmt
+    );
+
+    HRESULT GetOutputType(
+        DWORD dwOutputStreamIndex,
+        DWORD dwTypeIndex,
+        [out] DMO_MEDIA_TYPE *pmt
+    );
+
+    HRESULT SetInputType(
+        DWORD dwInputStreamIndex,
+        [in] const DMO_MEDIA_TYPE *pmt,
+        DWORD dwFlags
+    );
+
+    HRESULT SetOutputType(
+        DWORD dwOutputStreamIndex,
+        [in] const DMO_MEDIA_TYPE *pmt,
+        DWORD dwFlags
+    );
+
+    HRESULT GetInputCurrentType(
+        DWORD dwInputStreamIndex,
+        [out] DMO_MEDIA_TYPE *pmt
+    );
+
+    HRESULT GetOutputCurrentType(
+        DWORD dwOutputStreamIndex,
+        [out] DMO_MEDIA_TYPE *pmt
+    );
+
+    HRESULT GetInputSizeInfo(
+        DWORD dwInputStreamIndex,
+        [out] DWORD *pcbSize,
+        [out] DWORD *pcbMaxLookahead,
+        [out] DWORD *pcbAlignment
+    );
+
+    HRESULT GetOutputSizeInfo(
+        DWORD dwOutputStreamIndex,
+        [out] DWORD *pcbSize,
+        [out] DWORD *pcbAlignment
+    );
+
+    HRESULT GetInputMaxLatency(
+        DWORD dwInputStreamIndex,
+        [out] REFERENCE_TIME *prtMaxLatency
+    );
+
+    HRESULT SetInputMaxLatency(
+        DWORD dwInputStreamIndex,
+        REFERENCE_TIME rtMaxLatency
+    );
+
+    HRESULT Flush();
+
+    HRESULT Discontinuity(DWORD dwInputStreamIndex);
+
+    HRESULT AllocateStreamingResources();
+
+    HRESULT FreeStreamingResources();
+
+    HRESULT GetInputStatus(
+        DWORD dwInputStreamIndex,
+        [out] DWORD *dwFlags
+    );
+
+    HRESULT ProcessInput(
+        DWORD dwInputStreamIndex,
+        IMediaBuffer *pBuffer,
+        DWORD dwFlags,
+        REFERENCE_TIME rtTimestamp,
+        REFERENCE_TIME rtTimelength
+    );
+
+    HRESULT ProcessOutput(
+        DWORD dwFlags,
+        DWORD cOutputBufferCount,
+        [in,out] DMO_OUTPUT_DATA_BUFFER *pOutputBuffers,
+        [out] DWORD *pdwStatus
+    );
+
+    HRESULT Lock(LONG bLock);
+};
+
+/*****************************************************************************
+ * IMediaObjectInPlace interface
+ */
+
+[
+    object,
+    uuid(651b9ad0-0fc7-4aa9-9538-d89931010741),
+    local
+]
+interface IMediaObjectInPlace : IUnknown {
+    HRESULT Process(
+        [in] ULONG ulSize,
+        [in,out] BYTE* pData,
+        [in] REFERENCE_TIME refTimeStart,
+        [in] DWORD dwFlags
+    );
+
+    HRESULT Clone(
+        [out] IMediaObjectInPlace **ppMediaObject
+    );
+
+    HRESULT GetLatency(
+        [out] REFERENCE_TIME *pLatencyTime
+    );
+}
diff --git a/x86_64-w64-mingw32/include/memory.h b/x86_64-w64-mingw32/include/memory.h
index 2afc51f..b4937e9 100644
--- a/x86_64-w64-mingw32/include/memory.h
+++ b/x86_64-w64-mingw32/include/memory.h
@@ -7,7 +7,6 @@
 #define _INC_MEMORY
 
 #include <crtdefs.h>
-#include <sec_api/memory_s.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -27,6 +26,7 @@
   _CRTIMP int __cdecl _memicmp_l(const void *_Buf1,const void *_Buf2,size_t _Size,_locale_t _Locale);
   int __cdecl memcmp(const void *_Buf1,const void *_Buf2,size_t _Size);
   void * __cdecl memcpy(void * __restrict__ _Dst,const void * __restrict__ _Src,size_t _Size) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
+  _CRTIMP errno_t __cdecl memcpy_s (void *_dest,size_t _numberOfElements,const void *_src,size_t _count);
   void * __cdecl mempcpy (void *_Dst, const void *_Src, size_t _Size);
   void * __cdecl memset(void *_Dst,int _Val,size_t _Size);
 
diff --git a/x86_64-w64-mingw32/include/memoryapi.h b/x86_64-w64-mingw32/include/memoryapi.h
index 4286a0c..11f1591 100644
--- a/x86_64-w64-mingw32/include/memoryapi.h
+++ b/x86_64-w64-mingw32/include/memoryapi.h
@@ -26,6 +26,15 @@
     SIZE_T NumberOfBytes;
   } WIN32_MEMORY_RANGE_ENTRY, *PWIN32_MEMORY_RANGE_ENTRY;
 #endif
+
+#if _WIN32_WINNT >= 0x0603
+  typedef enum _OFFER_PRIORITY {
+    VmOfferPriorityVeryLow = 1,
+    VmOfferPriorityLow,
+    VmOfferPriorityBelowNormal,
+    VmOfferPriorityNormal
+  } OFFER_PRIORITY;
+#endif
 #endif
 
 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
@@ -92,6 +101,11 @@
   WINBASEAPI WINBOOL WINAPI PrefetchVirtualMemory (HANDLE hProcess, ULONG_PTR NumberOfEntries, PWIN32_MEMORY_RANGE_ENTRY VirtualAddresses, ULONG Flags);
   WINBASEAPI WINBOOL WINAPI UnmapViewOfFileEx (PVOID BaseAddress, ULONG UnmapFlags);
 #endif
+#if _WIN32_WINNT >= 0x0603
+  WINBASEAPI DWORD WINAPI DiscardVirtualMemory (PVOID VirtualAddress, SIZE_T Size);
+  WINBASEAPI DWORD WINAPI OfferVirtualMemory (PVOID VirtualAddress, SIZE_T Size, OFFER_PRIORITY Priority);
+  WINBASEAPI DWORD WINAPI ReclaimVirtualMemory (PVOID VirtualAddress, SIZE_T Size);
+#endif
 #endif
 
 #ifdef __cplusplus
diff --git a/x86_64-w64-mingw32/include/mfapi.h b/x86_64-w64-mingw32/include/mfapi.h
index 0ae2f90..41f7ffc 100644
--- a/x86_64-w64-mingw32/include/mfapi.h
+++ b/x86_64-w64-mingw32/include/mfapi.h
@@ -373,8 +373,13 @@
   DEFINE_MEDIATYPE_GUID (MFVideoFormat_DVH1, FCC ('dvh1'));
   DEFINE_MEDIATYPE_GUID (MFVideoFormat_DVC, FCC ('dvc '));
   DEFINE_MEDIATYPE_GUID (MFVideoFormat_H264, FCC ('H264'));
+  DEFINE_MEDIATYPE_GUID (MFVideoFormat_H265, FCC ('H265'));
   DEFINE_MEDIATYPE_GUID (MFVideoFormat_MJPG, FCC ('MJPG'));
   DEFINE_MEDIATYPE_GUID (MFVideoFormat_420O, FCC ('420O'));
+  DEFINE_MEDIATYPE_GUID (MFVideoFormat_HEVC, FCC ('HEVC'));
+  DEFINE_MEDIATYPE_GUID (MFVideoFormat_HEVC_ES, FCC('HEVS'));
+  DEFINE_MEDIATYPE_GUID (MFVideoFormat_VP80, FCC ('VP80'));
+  DEFINE_MEDIATYPE_GUID (MFVideoFormat_VP90, FCC ('VP90'));
 #if WINVER >= 0x0602
   DEFINE_MEDIATYPE_GUID (MFVideoFormat_H263, FCC ('H263'));
 #endif
diff --git a/x86_64-w64-mingw32/include/msctf.h b/x86_64-w64-mingw32/include/msctf.h
index f30fe17..d9bd147 100644
--- a/x86_64-w64-mingw32/include/msctf.h
+++ b/x86_64-w64-mingw32/include/msctf.h
@@ -17,11 +17,26 @@
 
 /* Forward declarations */
 
+#ifndef __ITfFunctionProvider_FWD_DEFINED__
+#define __ITfFunctionProvider_FWD_DEFINED__
+typedef interface ITfFunctionProvider ITfFunctionProvider;
+#endif
+
+#ifndef __IEnumTfFunctionProviders_FWD_DEFINED__
+#define __IEnumTfFunctionProviders_FWD_DEFINED__
+typedef interface IEnumTfFunctionProviders IEnumTfFunctionProviders;
+#endif
+
 #ifndef __ITfThreadMgr_FWD_DEFINED__
 #define __ITfThreadMgr_FWD_DEFINED__
 typedef interface ITfThreadMgr ITfThreadMgr;
 #endif
 
+#ifndef __ITfThreadMgrEx_FWD_DEFINED__
+#define __ITfThreadMgrEx_FWD_DEFINED__
+typedef interface ITfThreadMgrEx ITfThreadMgrEx;
+#endif
+
 #ifndef __ITfCompositionView_FWD_DEFINED__
 #define __ITfCompositionView_FWD_DEFINED__
 typedef interface ITfCompositionView ITfCompositionView;
@@ -32,6 +47,26 @@
 typedef interface ITfDocumentMgr ITfDocumentMgr;
 #endif
 
+#ifndef __ITfContextView_FWD_DEFINED__
+#define __ITfContextView_FWD_DEFINED__
+typedef interface ITfContextView ITfContextView;
+#endif
+
+#ifndef __IEnumTfContextViews_FWD_DEFINED__
+#define __IEnumTfContextViews_FWD_DEFINED__
+typedef interface IEnumTfContextViews IEnumTfContextViews;
+#endif
+
+#ifndef __IEnumTfProperties_FWD_DEFINED__
+#define __IEnumTfProperties_FWD_DEFINED__
+typedef interface IEnumTfProperties IEnumTfProperties;
+#endif
+
+#ifndef __ITfRangeBackup_FWD_DEFINED__
+#define __ITfRangeBackup_FWD_DEFINED__
+typedef interface ITfRangeBackup ITfRangeBackup;
+#endif
+
 #ifndef __ITfContext_FWD_DEFINED__
 #define __ITfContext_FWD_DEFINED__
 typedef interface ITfContext ITfContext;
@@ -77,6 +112,16 @@
 typedef interface ITfCategoryMgr ITfCategoryMgr;
 #endif
 
+#ifndef __IEnumTfRanges_FWD_DEFINED__
+#define __IEnumTfRanges_FWD_DEFINED__
+typedef interface IEnumTfRanges IEnumTfRanges;
+#endif
+
+#ifndef __ITfEditRecord_FWD_DEFINED__
+#define __ITfEditRecord_FWD_DEFINED__
+typedef interface ITfEditRecord ITfEditRecord;
+#endif
+
 #ifndef __ITfTextEditSink_FWD_DEFINED__
 #define __ITfTextEditSink_FWD_DEFINED__
 typedef interface ITfTextEditSink ITfTextEditSink;
@@ -157,11 +202,6 @@
 typedef interface ITfPropertyStore ITfPropertyStore;
 #endif
 
-#ifndef __IEnumTfRanges_FWD_DEFINED__
-#define __IEnumTfRanges_FWD_DEFINED__
-typedef interface IEnumTfRanges IEnumTfRanges;
-#endif
-
 #ifndef __IEnumITfCompositionView_FWD_DEFINED__
 #define __IEnumITfCompositionView_FWD_DEFINED__
 typedef interface IEnumITfCompositionView IEnumITfCompositionView;
@@ -232,6 +272,21 @@
 typedef interface IEnumTfDocumentMgrs IEnumTfDocumentMgrs;
 #endif
 
+#ifndef __ITfUIElement_FWD_DEFINED__
+#define __ITfUIElement_FWD_DEFINED__
+typedef interface ITfUIElement ITfUIElement;
+#endif
+
+#ifndef __IEnumTfUIElements_FWD_DEFINED__
+#define __IEnumTfUIElements_FWD_DEFINED__
+typedef interface IEnumTfUIElements IEnumTfUIElements;
+#endif
+
+#ifndef __ITfUIElementMgr_FWD_DEFINED__
+#define __ITfUIElementMgr_FWD_DEFINED__
+typedef interface ITfUIElementMgr ITfUIElementMgr;
+#endif
+
 #ifndef __ITfSourceSingle_FWD_DEFINED__
 #define __ITfSourceSingle_FWD_DEFINED__
 typedef interface ITfSourceSingle ITfSourceSingle;
@@ -273,7 +328,6 @@
 extern "C" {
 #endif
 
-#include <winuser.h>
 #define TF_E_STACKFULL MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0501)
 #define TF_E_DISCONNECTED    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0504)
 #define TF_E_ALREADY_EXISTS  MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0506)
@@ -344,16 +398,6 @@
 typedef interface IEnumTfContexts IEnumTfContexts;
 #endif
 
-#ifndef __ITfFunctionProvider_FWD_DEFINED__
-#define __ITfFunctionProvider_FWD_DEFINED__
-typedef interface ITfFunctionProvider ITfFunctionProvider;
-#endif
-
-#ifndef __IEnumTfFunctionProviders_FWD_DEFINED__
-#define __IEnumTfFunctionProviders_FWD_DEFINED__
-typedef interface IEnumTfFunctionProviders IEnumTfFunctionProviders;
-#endif
-
 #ifndef __ITfCompartmentMgr_FWD_DEFINED__
 #define __ITfCompartmentMgr_FWD_DEFINED__
 typedef interface ITfCompartmentMgr ITfCompartmentMgr;
@@ -369,16 +413,6 @@
 typedef interface ITfRange ITfRange;
 #endif
 
-#ifndef __ITfContextView_FWD_DEFINED__
-#define __ITfContextView_FWD_DEFINED__
-typedef interface ITfContextView ITfContextView;
-#endif
-
-#ifndef __IEnumTfContextViews_FWD_DEFINED__
-#define __IEnumTfContextViews_FWD_DEFINED__
-typedef interface IEnumTfContextViews IEnumTfContextViews;
-#endif
-
 #ifndef __ITfProperty_FWD_DEFINED__
 #define __ITfProperty_FWD_DEFINED__
 typedef interface ITfProperty ITfProperty;
@@ -389,26 +423,11 @@
 typedef interface ITfReadOnlyProperty ITfReadOnlyProperty;
 #endif
 
-#ifndef __IEnumTfProperties_FWD_DEFINED__
-#define __IEnumTfProperties_FWD_DEFINED__
-typedef interface IEnumTfProperties IEnumTfProperties;
-#endif
-
-#ifndef __ITfRangeBackup_FWD_DEFINED__
-#define __ITfRangeBackup_FWD_DEFINED__
-typedef interface ITfRangeBackup ITfRangeBackup;
-#endif
-
 #ifndef __IEnumTfLanguageProfiles_FWD_DEFINED__
 #define __IEnumTfLanguageProfiles_FWD_DEFINED__
 typedef interface IEnumTfLanguageProfiles IEnumTfLanguageProfiles;
 #endif
 
-#ifndef __ITfEditRecord_FWD_DEFINED__
-#define __ITfEditRecord_FWD_DEFINED__
-typedef interface ITfEditRecord ITfEditRecord;
-#endif
-
 #ifndef __ITfCompositionView_FWD_DEFINED__
 #define __ITfCompositionView_FWD_DEFINED__
 typedef interface ITfCompositionView ITfCompositionView;
@@ -446,6 +465,279 @@
     TF_ANCHOR_END = 1
 } TfAnchor;
 /*****************************************************************************
+ * ITfFunctionProvider interface
+ */
+#ifndef __ITfFunctionProvider_INTERFACE_DEFINED__
+#define __ITfFunctionProvider_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITfFunctionProvider, 0x101d6610, 0x0990, 0x11d3, 0x8d,0xf0, 0x00,0x10,0x5a,0x27,0x99,0xb5);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("101d6610-0990-11d3-8df0-00105a2799b5")
+ITfFunctionProvider : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetType(
+        GUID *guid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDescription(
+        BSTR *desc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFunction(
+        REFGUID guid,
+        REFIID riid,
+        IUnknown **func) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITfFunctionProvider, 0x101d6610, 0x0990, 0x11d3, 0x8d,0xf0, 0x00,0x10,0x5a,0x27,0x99,0xb5)
+#endif
+#else
+typedef struct ITfFunctionProviderVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITfFunctionProvider* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITfFunctionProvider* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITfFunctionProvider* This);
+
+    /*** ITfFunctionProvider methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetType)(
+        ITfFunctionProvider* This,
+        GUID *guid);
+
+    HRESULT (STDMETHODCALLTYPE *GetDescription)(
+        ITfFunctionProvider* This,
+        BSTR *desc);
+
+    HRESULT (STDMETHODCALLTYPE *GetFunction)(
+        ITfFunctionProvider* This,
+        REFGUID guid,
+        REFIID riid,
+        IUnknown **func);
+
+    END_INTERFACE
+} ITfFunctionProviderVtbl;
+interface ITfFunctionProvider {
+    CONST_VTBL ITfFunctionProviderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ITfFunctionProvider_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITfFunctionProvider_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITfFunctionProvider_Release(This) (This)->lpVtbl->Release(This)
+/*** ITfFunctionProvider methods ***/
+#define ITfFunctionProvider_GetType(This,guid) (This)->lpVtbl->GetType(This,guid)
+#define ITfFunctionProvider_GetDescription(This,desc) (This)->lpVtbl->GetDescription(This,desc)
+#define ITfFunctionProvider_GetFunction(This,guid,riid,func) (This)->lpVtbl->GetFunction(This,guid,riid,func)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ITfFunctionProvider_QueryInterface(ITfFunctionProvider* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ITfFunctionProvider_AddRef(ITfFunctionProvider* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ITfFunctionProvider_Release(ITfFunctionProvider* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITfFunctionProvider methods ***/
+static FORCEINLINE HRESULT ITfFunctionProvider_GetType(ITfFunctionProvider* This,GUID *guid) {
+    return This->lpVtbl->GetType(This,guid);
+}
+static FORCEINLINE HRESULT ITfFunctionProvider_GetDescription(ITfFunctionProvider* This,BSTR *desc) {
+    return This->lpVtbl->GetDescription(This,desc);
+}
+static FORCEINLINE HRESULT ITfFunctionProvider_GetFunction(ITfFunctionProvider* This,REFGUID guid,REFIID riid,IUnknown **func) {
+    return This->lpVtbl->GetFunction(This,guid,riid,func);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITfFunctionProvider_GetType_Proxy(
+    ITfFunctionProvider* This,
+    GUID *guid);
+void __RPC_STUB ITfFunctionProvider_GetType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfFunctionProvider_GetDescription_Proxy(
+    ITfFunctionProvider* This,
+    BSTR *desc);
+void __RPC_STUB ITfFunctionProvider_GetDescription_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfFunctionProvider_GetFunction_Proxy(
+    ITfFunctionProvider* This,
+    REFGUID guid,
+    REFIID riid,
+    IUnknown **func);
+void __RPC_STUB ITfFunctionProvider_GetFunction_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ITfFunctionProvider_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumTfFunctionProviders interface
+ */
+#ifndef __IEnumTfFunctionProviders_INTERFACE_DEFINED__
+#define __IEnumTfFunctionProviders_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IEnumTfFunctionProviders, 0xe4b24db0, 0x0990, 0x11d3, 0x8d,0xf0, 0x00,0x10,0x5a,0x27,0x99,0xb5);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("e4b24db0-0990-11d3-8df0-00105a2799b5")
+IEnumTfFunctionProviders : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IEnumTfFunctionProviders **ret) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Next(
+        ULONG count,
+        ITfFunctionProvider **prov,
+        ULONG *fetched) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Skip(
+        ULONG count) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IEnumTfFunctionProviders, 0xe4b24db0, 0x0990, 0x11d3, 0x8d,0xf0, 0x00,0x10,0x5a,0x27,0x99,0xb5)
+#endif
+#else
+typedef struct IEnumTfFunctionProvidersVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IEnumTfFunctionProviders* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IEnumTfFunctionProviders* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IEnumTfFunctionProviders* This);
+
+    /*** IEnumTfFunctionProviders methods ***/
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IEnumTfFunctionProviders* This,
+        IEnumTfFunctionProviders **ret);
+
+    HRESULT (STDMETHODCALLTYPE *Next)(
+        IEnumTfFunctionProviders* This,
+        ULONG count,
+        ITfFunctionProvider **prov,
+        ULONG *fetched);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        IEnumTfFunctionProviders* This);
+
+    HRESULT (STDMETHODCALLTYPE *Skip)(
+        IEnumTfFunctionProviders* This,
+        ULONG count);
+
+    END_INTERFACE
+} IEnumTfFunctionProvidersVtbl;
+interface IEnumTfFunctionProviders {
+    CONST_VTBL IEnumTfFunctionProvidersVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IEnumTfFunctionProviders_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumTfFunctionProviders_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumTfFunctionProviders_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumTfFunctionProviders methods ***/
+#define IEnumTfFunctionProviders_Clone(This,ret) (This)->lpVtbl->Clone(This,ret)
+#define IEnumTfFunctionProviders_Next(This,count,prov,fetched) (This)->lpVtbl->Next(This,count,prov,fetched)
+#define IEnumTfFunctionProviders_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumTfFunctionProviders_Skip(This,count) (This)->lpVtbl->Skip(This,count)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IEnumTfFunctionProviders_QueryInterface(IEnumTfFunctionProviders* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IEnumTfFunctionProviders_AddRef(IEnumTfFunctionProviders* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IEnumTfFunctionProviders_Release(IEnumTfFunctionProviders* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IEnumTfFunctionProviders methods ***/
+static FORCEINLINE HRESULT IEnumTfFunctionProviders_Clone(IEnumTfFunctionProviders* This,IEnumTfFunctionProviders **ret) {
+    return This->lpVtbl->Clone(This,ret);
+}
+static FORCEINLINE HRESULT IEnumTfFunctionProviders_Next(IEnumTfFunctionProviders* This,ULONG count,ITfFunctionProvider **prov,ULONG *fetched) {
+    return This->lpVtbl->Next(This,count,prov,fetched);
+}
+static FORCEINLINE HRESULT IEnumTfFunctionProviders_Reset(IEnumTfFunctionProviders* This) {
+    return This->lpVtbl->Reset(This);
+}
+static FORCEINLINE HRESULT IEnumTfFunctionProviders_Skip(IEnumTfFunctionProviders* This,ULONG count) {
+    return This->lpVtbl->Skip(This,count);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumTfFunctionProviders_Clone_Proxy(
+    IEnumTfFunctionProviders* This,
+    IEnumTfFunctionProviders **ret);
+void __RPC_STUB IEnumTfFunctionProviders_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumTfFunctionProviders_Next_Proxy(
+    IEnumTfFunctionProviders* This,
+    ULONG count,
+    ITfFunctionProvider **prov,
+    ULONG *fetched);
+void __RPC_STUB IEnumTfFunctionProviders_Next_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumTfFunctionProviders_Reset_Proxy(
+    IEnumTfFunctionProviders* This);
+void __RPC_STUB IEnumTfFunctionProviders_Reset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumTfFunctionProviders_Skip_Proxy(
+    IEnumTfFunctionProviders* This,
+    ULONG count);
+void __RPC_STUB IEnumTfFunctionProviders_Skip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IEnumTfFunctionProviders_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
  * ITfThreadMgr interface
  */
 #ifndef __ITfThreadMgr_INTERFACE_DEFINED__
@@ -727,6 +1019,205 @@
 #endif  /* __ITfThreadMgr_INTERFACE_DEFINED__ */
 
 /*****************************************************************************
+ * ITfThreadMgrEx interface
+ */
+#ifndef __ITfThreadMgrEx_INTERFACE_DEFINED__
+#define __ITfThreadMgrEx_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITfThreadMgrEx, 0x3e90ade3, 0x7594, 0x4cb0, 0xbb,0x58, 0x69,0x62,0x8f,0x5f,0x45,0x8c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("3e90ade3-7594-4cb0-bb58-69628f5f458c")
+ITfThreadMgrEx : public ITfThreadMgr
+{
+    virtual HRESULT STDMETHODCALLTYPE ActivateEx(
+        TfClientId *id,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetActiveFlags(
+        DWORD *flags) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITfThreadMgrEx, 0x3e90ade3, 0x7594, 0x4cb0, 0xbb,0x58, 0x69,0x62,0x8f,0x5f,0x45,0x8c)
+#endif
+#else
+typedef struct ITfThreadMgrExVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITfThreadMgrEx* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITfThreadMgrEx* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITfThreadMgrEx* This);
+
+    /*** ITfThreadMgr methods ***/
+    HRESULT (STDMETHODCALLTYPE *Activate)(
+        ITfThreadMgrEx* This,
+        TfClientId *ptid);
+
+    HRESULT (STDMETHODCALLTYPE *Deactivate)(
+        ITfThreadMgrEx* This);
+
+    HRESULT (STDMETHODCALLTYPE *CreateDocumentMgr)(
+        ITfThreadMgrEx* This,
+        ITfDocumentMgr **ppdim);
+
+    HRESULT (STDMETHODCALLTYPE *EnumDocumentMgrs)(
+        ITfThreadMgrEx* This,
+        IEnumTfDocumentMgrs **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *GetFocus)(
+        ITfThreadMgrEx* This,
+        ITfDocumentMgr **ppdimFocus);
+
+    HRESULT (STDMETHODCALLTYPE *SetFocus)(
+        ITfThreadMgrEx* This,
+        ITfDocumentMgr *pdimFocus);
+
+    HRESULT (STDMETHODCALLTYPE *AssociateFocus)(
+        ITfThreadMgrEx* This,
+        HWND hwnd,
+        ITfDocumentMgr *pdimNew,
+        ITfDocumentMgr **ppdimPrev);
+
+    HRESULT (STDMETHODCALLTYPE *IsThreadFocus)(
+        ITfThreadMgrEx* This,
+        WINBOOL *pfThreadFocus);
+
+    HRESULT (STDMETHODCALLTYPE *GetFunctionProvider)(
+        ITfThreadMgrEx* This,
+        REFCLSID clsid,
+        ITfFunctionProvider **ppFuncProv);
+
+    HRESULT (STDMETHODCALLTYPE *EnumFunctionProviders)(
+        ITfThreadMgrEx* This,
+        IEnumTfFunctionProviders **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *GetGlobalCompartment)(
+        ITfThreadMgrEx* This,
+        ITfCompartmentMgr **ppCompMgr);
+
+    /*** ITfThreadMgrEx methods ***/
+    HRESULT (STDMETHODCALLTYPE *ActivateEx)(
+        ITfThreadMgrEx* This,
+        TfClientId *id,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetActiveFlags)(
+        ITfThreadMgrEx* This,
+        DWORD *flags);
+
+    END_INTERFACE
+} ITfThreadMgrExVtbl;
+interface ITfThreadMgrEx {
+    CONST_VTBL ITfThreadMgrExVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ITfThreadMgrEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITfThreadMgrEx_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITfThreadMgrEx_Release(This) (This)->lpVtbl->Release(This)
+/*** ITfThreadMgr methods ***/
+#define ITfThreadMgrEx_Activate(This,ptid) (This)->lpVtbl->Activate(This,ptid)
+#define ITfThreadMgrEx_Deactivate(This) (This)->lpVtbl->Deactivate(This)
+#define ITfThreadMgrEx_CreateDocumentMgr(This,ppdim) (This)->lpVtbl->CreateDocumentMgr(This,ppdim)
+#define ITfThreadMgrEx_EnumDocumentMgrs(This,ppEnum) (This)->lpVtbl->EnumDocumentMgrs(This,ppEnum)
+#define ITfThreadMgrEx_GetFocus(This,ppdimFocus) (This)->lpVtbl->GetFocus(This,ppdimFocus)
+#define ITfThreadMgrEx_SetFocus(This,pdimFocus) (This)->lpVtbl->SetFocus(This,pdimFocus)
+#define ITfThreadMgrEx_AssociateFocus(This,hwnd,pdimNew,ppdimPrev) (This)->lpVtbl->AssociateFocus(This,hwnd,pdimNew,ppdimPrev)
+#define ITfThreadMgrEx_IsThreadFocus(This,pfThreadFocus) (This)->lpVtbl->IsThreadFocus(This,pfThreadFocus)
+#define ITfThreadMgrEx_GetFunctionProvider(This,clsid,ppFuncProv) (This)->lpVtbl->GetFunctionProvider(This,clsid,ppFuncProv)
+#define ITfThreadMgrEx_EnumFunctionProviders(This,ppEnum) (This)->lpVtbl->EnumFunctionProviders(This,ppEnum)
+#define ITfThreadMgrEx_GetGlobalCompartment(This,ppCompMgr) (This)->lpVtbl->GetGlobalCompartment(This,ppCompMgr)
+/*** ITfThreadMgrEx methods ***/
+#define ITfThreadMgrEx_ActivateEx(This,id,flags) (This)->lpVtbl->ActivateEx(This,id,flags)
+#define ITfThreadMgrEx_GetActiveFlags(This,flags) (This)->lpVtbl->GetActiveFlags(This,flags)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ITfThreadMgrEx_QueryInterface(ITfThreadMgrEx* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ITfThreadMgrEx_AddRef(ITfThreadMgrEx* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ITfThreadMgrEx_Release(ITfThreadMgrEx* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITfThreadMgr methods ***/
+static FORCEINLINE HRESULT ITfThreadMgrEx_Activate(ITfThreadMgrEx* This,TfClientId *ptid) {
+    return This->lpVtbl->Activate(This,ptid);
+}
+static FORCEINLINE HRESULT ITfThreadMgrEx_Deactivate(ITfThreadMgrEx* This) {
+    return This->lpVtbl->Deactivate(This);
+}
+static FORCEINLINE HRESULT ITfThreadMgrEx_CreateDocumentMgr(ITfThreadMgrEx* This,ITfDocumentMgr **ppdim) {
+    return This->lpVtbl->CreateDocumentMgr(This,ppdim);
+}
+static FORCEINLINE HRESULT ITfThreadMgrEx_EnumDocumentMgrs(ITfThreadMgrEx* This,IEnumTfDocumentMgrs **ppEnum) {
+    return This->lpVtbl->EnumDocumentMgrs(This,ppEnum);
+}
+static FORCEINLINE HRESULT ITfThreadMgrEx_GetFocus(ITfThreadMgrEx* This,ITfDocumentMgr **ppdimFocus) {
+    return This->lpVtbl->GetFocus(This,ppdimFocus);
+}
+static FORCEINLINE HRESULT ITfThreadMgrEx_SetFocus(ITfThreadMgrEx* This,ITfDocumentMgr *pdimFocus) {
+    return This->lpVtbl->SetFocus(This,pdimFocus);
+}
+static FORCEINLINE HRESULT ITfThreadMgrEx_AssociateFocus(ITfThreadMgrEx* This,HWND hwnd,ITfDocumentMgr *pdimNew,ITfDocumentMgr **ppdimPrev) {
+    return This->lpVtbl->AssociateFocus(This,hwnd,pdimNew,ppdimPrev);
+}
+static FORCEINLINE HRESULT ITfThreadMgrEx_IsThreadFocus(ITfThreadMgrEx* This,WINBOOL *pfThreadFocus) {
+    return This->lpVtbl->IsThreadFocus(This,pfThreadFocus);
+}
+static FORCEINLINE HRESULT ITfThreadMgrEx_GetFunctionProvider(ITfThreadMgrEx* This,REFCLSID clsid,ITfFunctionProvider **ppFuncProv) {
+    return This->lpVtbl->GetFunctionProvider(This,clsid,ppFuncProv);
+}
+static FORCEINLINE HRESULT ITfThreadMgrEx_EnumFunctionProviders(ITfThreadMgrEx* This,IEnumTfFunctionProviders **ppEnum) {
+    return This->lpVtbl->EnumFunctionProviders(This,ppEnum);
+}
+static FORCEINLINE HRESULT ITfThreadMgrEx_GetGlobalCompartment(ITfThreadMgrEx* This,ITfCompartmentMgr **ppCompMgr) {
+    return This->lpVtbl->GetGlobalCompartment(This,ppCompMgr);
+}
+/*** ITfThreadMgrEx methods ***/
+static FORCEINLINE HRESULT ITfThreadMgrEx_ActivateEx(ITfThreadMgrEx* This,TfClientId *id,DWORD flags) {
+    return This->lpVtbl->ActivateEx(This,id,flags);
+}
+static FORCEINLINE HRESULT ITfThreadMgrEx_GetActiveFlags(ITfThreadMgrEx* This,DWORD *flags) {
+    return This->lpVtbl->GetActiveFlags(This,flags);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITfThreadMgrEx_ActivateEx_Proxy(
+    ITfThreadMgrEx* This,
+    TfClientId *id,
+    DWORD flags);
+void __RPC_STUB ITfThreadMgrEx_ActivateEx_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfThreadMgrEx_GetActiveFlags_Proxy(
+    ITfThreadMgrEx* This,
+    DWORD *flags);
+void __RPC_STUB ITfThreadMgrEx_GetActiveFlags_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ITfThreadMgrEx_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
  * ITfCompositionView interface
  */
 #ifndef __ITfCompositionView_INTERFACE_DEFINED__
@@ -1023,6 +1514,542 @@
 #endif  /* __ITfDocumentMgr_INTERFACE_DEFINED__ */
 
 /*****************************************************************************
+ * ITfContextView interface
+ */
+#ifndef __ITfContextView_INTERFACE_DEFINED__
+#define __ITfContextView_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITfContextView, 0x2433bf8e, 0x0f9b, 0x435c, 0xba,0x2c, 0x18,0x06,0x11,0x97,0x8c,0x30);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("2433bf8e-0f9b-435c-ba2c-180611978c30")
+ITfContextView : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetRangeFromPoint(
+        TfEditCookie cookie,
+        const POINT *pt,
+        DWORD flags,
+        ITfRange **range) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTextExt(
+        TfEditCookie cookie,
+        ITfRange *range,
+        RECT *rect,
+        WINBOOL *clipped) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetScreenExt(
+        RECT *rect) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetWnd(
+        HWND *hwnd) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITfContextView, 0x2433bf8e, 0x0f9b, 0x435c, 0xba,0x2c, 0x18,0x06,0x11,0x97,0x8c,0x30)
+#endif
+#else
+typedef struct ITfContextViewVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITfContextView* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITfContextView* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITfContextView* This);
+
+    /*** ITfContextView methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetRangeFromPoint)(
+        ITfContextView* This,
+        TfEditCookie cookie,
+        const POINT *pt,
+        DWORD flags,
+        ITfRange **range);
+
+    HRESULT (STDMETHODCALLTYPE *GetTextExt)(
+        ITfContextView* This,
+        TfEditCookie cookie,
+        ITfRange *range,
+        RECT *rect,
+        WINBOOL *clipped);
+
+    HRESULT (STDMETHODCALLTYPE *GetScreenExt)(
+        ITfContextView* This,
+        RECT *rect);
+
+    HRESULT (STDMETHODCALLTYPE *GetWnd)(
+        ITfContextView* This,
+        HWND *hwnd);
+
+    END_INTERFACE
+} ITfContextViewVtbl;
+interface ITfContextView {
+    CONST_VTBL ITfContextViewVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ITfContextView_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITfContextView_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITfContextView_Release(This) (This)->lpVtbl->Release(This)
+/*** ITfContextView methods ***/
+#define ITfContextView_GetRangeFromPoint(This,cookie,pt,flags,range) (This)->lpVtbl->GetRangeFromPoint(This,cookie,pt,flags,range)
+#define ITfContextView_GetTextExt(This,cookie,range,rect,clipped) (This)->lpVtbl->GetTextExt(This,cookie,range,rect,clipped)
+#define ITfContextView_GetScreenExt(This,rect) (This)->lpVtbl->GetScreenExt(This,rect)
+#define ITfContextView_GetWnd(This,hwnd) (This)->lpVtbl->GetWnd(This,hwnd)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ITfContextView_QueryInterface(ITfContextView* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ITfContextView_AddRef(ITfContextView* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ITfContextView_Release(ITfContextView* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITfContextView methods ***/
+static FORCEINLINE HRESULT ITfContextView_GetRangeFromPoint(ITfContextView* This,TfEditCookie cookie,const POINT *pt,DWORD flags,ITfRange **range) {
+    return This->lpVtbl->GetRangeFromPoint(This,cookie,pt,flags,range);
+}
+static FORCEINLINE HRESULT ITfContextView_GetTextExt(ITfContextView* This,TfEditCookie cookie,ITfRange *range,RECT *rect,WINBOOL *clipped) {
+    return This->lpVtbl->GetTextExt(This,cookie,range,rect,clipped);
+}
+static FORCEINLINE HRESULT ITfContextView_GetScreenExt(ITfContextView* This,RECT *rect) {
+    return This->lpVtbl->GetScreenExt(This,rect);
+}
+static FORCEINLINE HRESULT ITfContextView_GetWnd(ITfContextView* This,HWND *hwnd) {
+    return This->lpVtbl->GetWnd(This,hwnd);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITfContextView_GetRangeFromPoint_Proxy(
+    ITfContextView* This,
+    TfEditCookie cookie,
+    const POINT *pt,
+    DWORD flags,
+    ITfRange **range);
+void __RPC_STUB ITfContextView_GetRangeFromPoint_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfContextView_GetTextExt_Proxy(
+    ITfContextView* This,
+    TfEditCookie cookie,
+    ITfRange *range,
+    RECT *rect,
+    WINBOOL *clipped);
+void __RPC_STUB ITfContextView_GetTextExt_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfContextView_GetScreenExt_Proxy(
+    ITfContextView* This,
+    RECT *rect);
+void __RPC_STUB ITfContextView_GetScreenExt_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfContextView_GetWnd_Proxy(
+    ITfContextView* This,
+    HWND *hwnd);
+void __RPC_STUB ITfContextView_GetWnd_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ITfContextView_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumTfContextViews interface
+ */
+#ifndef __IEnumTfContextViews_INTERFACE_DEFINED__
+#define __IEnumTfContextViews_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IEnumTfContextViews, 0xf0c0f8dd, 0xcf38, 0x44e1, 0xbb,0x0f, 0x68,0xcf,0x0d,0x55,0x1c,0x78);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("f0c0f8dd-cf38-44e1-bb0f-68cf0d551c78")
+IEnumTfContextViews : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IEnumTfContextViews **ret) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Next(
+        ULONG count,
+        ITfContextView **views,
+        ULONG *fetched) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Skip(
+        ULONG count) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IEnumTfContextViews, 0xf0c0f8dd, 0xcf38, 0x44e1, 0xbb,0x0f, 0x68,0xcf,0x0d,0x55,0x1c,0x78)
+#endif
+#else
+typedef struct IEnumTfContextViewsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IEnumTfContextViews* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IEnumTfContextViews* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IEnumTfContextViews* This);
+
+    /*** IEnumTfContextViews methods ***/
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IEnumTfContextViews* This,
+        IEnumTfContextViews **ret);
+
+    HRESULT (STDMETHODCALLTYPE *Next)(
+        IEnumTfContextViews* This,
+        ULONG count,
+        ITfContextView **views,
+        ULONG *fetched);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        IEnumTfContextViews* This);
+
+    HRESULT (STDMETHODCALLTYPE *Skip)(
+        IEnumTfContextViews* This,
+        ULONG count);
+
+    END_INTERFACE
+} IEnumTfContextViewsVtbl;
+interface IEnumTfContextViews {
+    CONST_VTBL IEnumTfContextViewsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IEnumTfContextViews_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumTfContextViews_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumTfContextViews_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumTfContextViews methods ***/
+#define IEnumTfContextViews_Clone(This,ret) (This)->lpVtbl->Clone(This,ret)
+#define IEnumTfContextViews_Next(This,count,views,fetched) (This)->lpVtbl->Next(This,count,views,fetched)
+#define IEnumTfContextViews_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumTfContextViews_Skip(This,count) (This)->lpVtbl->Skip(This,count)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IEnumTfContextViews_QueryInterface(IEnumTfContextViews* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IEnumTfContextViews_AddRef(IEnumTfContextViews* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IEnumTfContextViews_Release(IEnumTfContextViews* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IEnumTfContextViews methods ***/
+static FORCEINLINE HRESULT IEnumTfContextViews_Clone(IEnumTfContextViews* This,IEnumTfContextViews **ret) {
+    return This->lpVtbl->Clone(This,ret);
+}
+static FORCEINLINE HRESULT IEnumTfContextViews_Next(IEnumTfContextViews* This,ULONG count,ITfContextView **views,ULONG *fetched) {
+    return This->lpVtbl->Next(This,count,views,fetched);
+}
+static FORCEINLINE HRESULT IEnumTfContextViews_Reset(IEnumTfContextViews* This) {
+    return This->lpVtbl->Reset(This);
+}
+static FORCEINLINE HRESULT IEnumTfContextViews_Skip(IEnumTfContextViews* This,ULONG count) {
+    return This->lpVtbl->Skip(This,count);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumTfContextViews_Clone_Proxy(
+    IEnumTfContextViews* This,
+    IEnumTfContextViews **ret);
+void __RPC_STUB IEnumTfContextViews_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumTfContextViews_Next_Proxy(
+    IEnumTfContextViews* This,
+    ULONG count,
+    ITfContextView **views,
+    ULONG *fetched);
+void __RPC_STUB IEnumTfContextViews_Next_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumTfContextViews_Reset_Proxy(
+    IEnumTfContextViews* This);
+void __RPC_STUB IEnumTfContextViews_Reset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumTfContextViews_Skip_Proxy(
+    IEnumTfContextViews* This,
+    ULONG count);
+void __RPC_STUB IEnumTfContextViews_Skip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IEnumTfContextViews_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumTfProperties interface
+ */
+#ifndef __IEnumTfProperties_INTERFACE_DEFINED__
+#define __IEnumTfProperties_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IEnumTfProperties, 0x19188cb0, 0xaca9, 0x11d2, 0xaf,0xc5, 0x00,0x10,0x5a,0x27,0x99,0xb5);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("19188cb0-aca9-11d2-afc5-00105a2799b5")
+IEnumTfProperties : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IEnumTfProperties **ret) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Next(
+        ULONG count,
+        ITfProperty **props,
+        ULONG *fetched) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Skip(
+        ULONG count) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IEnumTfProperties, 0x19188cb0, 0xaca9, 0x11d2, 0xaf,0xc5, 0x00,0x10,0x5a,0x27,0x99,0xb5)
+#endif
+#else
+typedef struct IEnumTfPropertiesVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IEnumTfProperties* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IEnumTfProperties* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IEnumTfProperties* This);
+
+    /*** IEnumTfProperties methods ***/
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IEnumTfProperties* This,
+        IEnumTfProperties **ret);
+
+    HRESULT (STDMETHODCALLTYPE *Next)(
+        IEnumTfProperties* This,
+        ULONG count,
+        ITfProperty **props,
+        ULONG *fetched);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        IEnumTfProperties* This);
+
+    HRESULT (STDMETHODCALLTYPE *Skip)(
+        IEnumTfProperties* This,
+        ULONG count);
+
+    END_INTERFACE
+} IEnumTfPropertiesVtbl;
+interface IEnumTfProperties {
+    CONST_VTBL IEnumTfPropertiesVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IEnumTfProperties_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumTfProperties_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumTfProperties_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumTfProperties methods ***/
+#define IEnumTfProperties_Clone(This,ret) (This)->lpVtbl->Clone(This,ret)
+#define IEnumTfProperties_Next(This,count,props,fetched) (This)->lpVtbl->Next(This,count,props,fetched)
+#define IEnumTfProperties_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumTfProperties_Skip(This,count) (This)->lpVtbl->Skip(This,count)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IEnumTfProperties_QueryInterface(IEnumTfProperties* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IEnumTfProperties_AddRef(IEnumTfProperties* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IEnumTfProperties_Release(IEnumTfProperties* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IEnumTfProperties methods ***/
+static FORCEINLINE HRESULT IEnumTfProperties_Clone(IEnumTfProperties* This,IEnumTfProperties **ret) {
+    return This->lpVtbl->Clone(This,ret);
+}
+static FORCEINLINE HRESULT IEnumTfProperties_Next(IEnumTfProperties* This,ULONG count,ITfProperty **props,ULONG *fetched) {
+    return This->lpVtbl->Next(This,count,props,fetched);
+}
+static FORCEINLINE HRESULT IEnumTfProperties_Reset(IEnumTfProperties* This) {
+    return This->lpVtbl->Reset(This);
+}
+static FORCEINLINE HRESULT IEnumTfProperties_Skip(IEnumTfProperties* This,ULONG count) {
+    return This->lpVtbl->Skip(This,count);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumTfProperties_Clone_Proxy(
+    IEnumTfProperties* This,
+    IEnumTfProperties **ret);
+void __RPC_STUB IEnumTfProperties_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumTfProperties_Next_Proxy(
+    IEnumTfProperties* This,
+    ULONG count,
+    ITfProperty **props,
+    ULONG *fetched);
+void __RPC_STUB IEnumTfProperties_Next_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumTfProperties_Reset_Proxy(
+    IEnumTfProperties* This);
+void __RPC_STUB IEnumTfProperties_Reset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumTfProperties_Skip_Proxy(
+    IEnumTfProperties* This,
+    ULONG count);
+void __RPC_STUB IEnumTfProperties_Skip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IEnumTfProperties_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITfRangeBackup interface
+ */
+#ifndef __ITfRangeBackup_INTERFACE_DEFINED__
+#define __ITfRangeBackup_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITfRangeBackup, 0x463a506d, 0x6992, 0x49d2, 0x9b,0x88, 0x93,0xd5,0x5e,0x70,0xbb,0x16);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("463a506d-6992-49d2-9b88-93d55e70bb16")
+ITfRangeBackup : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Restore(
+        TfEditCookie cookie,
+        ITfRange *range) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITfRangeBackup, 0x463a506d, 0x6992, 0x49d2, 0x9b,0x88, 0x93,0xd5,0x5e,0x70,0xbb,0x16)
+#endif
+#else
+typedef struct ITfRangeBackupVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITfRangeBackup* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITfRangeBackup* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITfRangeBackup* This);
+
+    /*** ITfRangeBackup methods ***/
+    HRESULT (STDMETHODCALLTYPE *Restore)(
+        ITfRangeBackup* This,
+        TfEditCookie cookie,
+        ITfRange *range);
+
+    END_INTERFACE
+} ITfRangeBackupVtbl;
+interface ITfRangeBackup {
+    CONST_VTBL ITfRangeBackupVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ITfRangeBackup_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITfRangeBackup_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITfRangeBackup_Release(This) (This)->lpVtbl->Release(This)
+/*** ITfRangeBackup methods ***/
+#define ITfRangeBackup_Restore(This,cookie,range) (This)->lpVtbl->Restore(This,cookie,range)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ITfRangeBackup_QueryInterface(ITfRangeBackup* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ITfRangeBackup_AddRef(ITfRangeBackup* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ITfRangeBackup_Release(ITfRangeBackup* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITfRangeBackup methods ***/
+static FORCEINLINE HRESULT ITfRangeBackup_Restore(ITfRangeBackup* This,TfEditCookie cookie,ITfRange *range) {
+    return This->lpVtbl->Restore(This,cookie,range);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITfRangeBackup_Restore_Proxy(
+    ITfRangeBackup* This,
+    TfEditCookie cookie,
+    ITfRange *range);
+void __RPC_STUB ITfRangeBackup_Restore_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ITfRangeBackup_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
  * ITfContext interface
  */
 #ifndef __ITfContext_INTERFACE_DEFINED__
@@ -3423,6 +4450,265 @@
 #endif  /* __ITfCategoryMgr_INTERFACE_DEFINED__ */
 
 /*****************************************************************************
+ * IEnumTfRanges interface
+ */
+#ifndef __IEnumTfRanges_INTERFACE_DEFINED__
+#define __IEnumTfRanges_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IEnumTfRanges, 0xf99d3f40, 0x8e32, 0x11d2, 0xbf,0x46, 0x00,0x10,0x5a,0x27,0x99,0xb5);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("f99d3f40-8e32-11d2-bf46-00105a2799b5")
+IEnumTfRanges : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IEnumTfRanges **ppEnum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Next(
+        ULONG ulCount,
+        ITfRange **ppRange,
+        ULONG *pcFetched) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Skip(
+        ULONG ulCount) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IEnumTfRanges, 0xf99d3f40, 0x8e32, 0x11d2, 0xbf,0x46, 0x00,0x10,0x5a,0x27,0x99,0xb5)
+#endif
+#else
+typedef struct IEnumTfRangesVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IEnumTfRanges* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IEnumTfRanges* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IEnumTfRanges* This);
+
+    /*** IEnumTfRanges methods ***/
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IEnumTfRanges* This,
+        IEnumTfRanges **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *Next)(
+        IEnumTfRanges* This,
+        ULONG ulCount,
+        ITfRange **ppRange,
+        ULONG *pcFetched);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        IEnumTfRanges* This);
+
+    HRESULT (STDMETHODCALLTYPE *Skip)(
+        IEnumTfRanges* This,
+        ULONG ulCount);
+
+    END_INTERFACE
+} IEnumTfRangesVtbl;
+interface IEnumTfRanges {
+    CONST_VTBL IEnumTfRangesVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IEnumTfRanges_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumTfRanges_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumTfRanges_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumTfRanges methods ***/
+#define IEnumTfRanges_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)
+#define IEnumTfRanges_Next(This,ulCount,ppRange,pcFetched) (This)->lpVtbl->Next(This,ulCount,ppRange,pcFetched)
+#define IEnumTfRanges_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumTfRanges_Skip(This,ulCount) (This)->lpVtbl->Skip(This,ulCount)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IEnumTfRanges_QueryInterface(IEnumTfRanges* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IEnumTfRanges_AddRef(IEnumTfRanges* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IEnumTfRanges_Release(IEnumTfRanges* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IEnumTfRanges methods ***/
+static FORCEINLINE HRESULT IEnumTfRanges_Clone(IEnumTfRanges* This,IEnumTfRanges **ppEnum) {
+    return This->lpVtbl->Clone(This,ppEnum);
+}
+static FORCEINLINE HRESULT IEnumTfRanges_Next(IEnumTfRanges* This,ULONG ulCount,ITfRange **ppRange,ULONG *pcFetched) {
+    return This->lpVtbl->Next(This,ulCount,ppRange,pcFetched);
+}
+static FORCEINLINE HRESULT IEnumTfRanges_Reset(IEnumTfRanges* This) {
+    return This->lpVtbl->Reset(This);
+}
+static FORCEINLINE HRESULT IEnumTfRanges_Skip(IEnumTfRanges* This,ULONG ulCount) {
+    return This->lpVtbl->Skip(This,ulCount);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumTfRanges_Clone_Proxy(
+    IEnumTfRanges* This,
+    IEnumTfRanges **ppEnum);
+void __RPC_STUB IEnumTfRanges_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumTfRanges_Next_Proxy(
+    IEnumTfRanges* This,
+    ULONG ulCount,
+    ITfRange **ppRange,
+    ULONG *pcFetched);
+void __RPC_STUB IEnumTfRanges_Next_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumTfRanges_Reset_Proxy(
+    IEnumTfRanges* This);
+void __RPC_STUB IEnumTfRanges_Reset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumTfRanges_Skip_Proxy(
+    IEnumTfRanges* This,
+    ULONG ulCount);
+void __RPC_STUB IEnumTfRanges_Skip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IEnumTfRanges_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITfEditRecord interface
+ */
+#ifndef __ITfEditRecord_INTERFACE_DEFINED__
+#define __ITfEditRecord_INTERFACE_DEFINED__
+
+#define TF_GTP_INCL_TEXT (0x1)
+
+DEFINE_GUID(IID_ITfEditRecord, 0x42d4d099, 0x7c1a, 0x4a89, 0xb8,0x36, 0x6c,0x6f,0x22,0x16,0x0d,0xf0);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("42d4d099-7c1a-4a89-b836-6c6f22160df0")
+ITfEditRecord : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetSelectionStatus(
+        WINBOOL *changed) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTextAndPropertyUpdates(
+        DWORD flags,
+        const GUID **props,
+        ULONG count,
+        IEnumTfRanges **ret) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITfEditRecord, 0x42d4d099, 0x7c1a, 0x4a89, 0xb8,0x36, 0x6c,0x6f,0x22,0x16,0x0d,0xf0)
+#endif
+#else
+typedef struct ITfEditRecordVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITfEditRecord* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITfEditRecord* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITfEditRecord* This);
+
+    /*** ITfEditRecord methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetSelectionStatus)(
+        ITfEditRecord* This,
+        WINBOOL *changed);
+
+    HRESULT (STDMETHODCALLTYPE *GetTextAndPropertyUpdates)(
+        ITfEditRecord* This,
+        DWORD flags,
+        const GUID **props,
+        ULONG count,
+        IEnumTfRanges **ret);
+
+    END_INTERFACE
+} ITfEditRecordVtbl;
+interface ITfEditRecord {
+    CONST_VTBL ITfEditRecordVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ITfEditRecord_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITfEditRecord_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITfEditRecord_Release(This) (This)->lpVtbl->Release(This)
+/*** ITfEditRecord methods ***/
+#define ITfEditRecord_GetSelectionStatus(This,changed) (This)->lpVtbl->GetSelectionStatus(This,changed)
+#define ITfEditRecord_GetTextAndPropertyUpdates(This,flags,props,count,ret) (This)->lpVtbl->GetTextAndPropertyUpdates(This,flags,props,count,ret)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ITfEditRecord_QueryInterface(ITfEditRecord* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ITfEditRecord_AddRef(ITfEditRecord* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ITfEditRecord_Release(ITfEditRecord* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITfEditRecord methods ***/
+static FORCEINLINE HRESULT ITfEditRecord_GetSelectionStatus(ITfEditRecord* This,WINBOOL *changed) {
+    return This->lpVtbl->GetSelectionStatus(This,changed);
+}
+static FORCEINLINE HRESULT ITfEditRecord_GetTextAndPropertyUpdates(ITfEditRecord* This,DWORD flags,const GUID **props,ULONG count,IEnumTfRanges **ret) {
+    return This->lpVtbl->GetTextAndPropertyUpdates(This,flags,props,count,ret);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITfEditRecord_GetSelectionStatus_Proxy(
+    ITfEditRecord* This,
+    WINBOOL *changed);
+void __RPC_STUB ITfEditRecord_GetSelectionStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfEditRecord_GetTextAndPropertyUpdates_Proxy(
+    ITfEditRecord* This,
+    DWORD flags,
+    const GUID **props,
+    ULONG count,
+    IEnumTfRanges **ret);
+void __RPC_STUB ITfEditRecord_GetTextAndPropertyUpdates_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ITfEditRecord_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
  * ITfTextEditSink interface
  */
 #ifndef __ITfTextEditSink_INTERFACE_DEFINED__
@@ -6603,151 +7889,6 @@
 #endif  /* __ITfPropertyStore_INTERFACE_DEFINED__ */
 
 /*****************************************************************************
- * IEnumTfRanges interface
- */
-#ifndef __IEnumTfRanges_INTERFACE_DEFINED__
-#define __IEnumTfRanges_INTERFACE_DEFINED__
-
-DEFINE_GUID(IID_IEnumTfRanges, 0xf99d3f40, 0x8e32, 0x11d2, 0xbf,0x46, 0x00,0x10,0x5a,0x27,0x99,0xb5);
-#if defined(__cplusplus) && !defined(CINTERFACE)
-MIDL_INTERFACE("f99d3f40-8e32-11d2-bf46-00105a2799b5")
-IEnumTfRanges : public IUnknown
-{
-    virtual HRESULT STDMETHODCALLTYPE Clone(
-        IEnumTfRanges **ppEnum) = 0;
-
-    virtual HRESULT STDMETHODCALLTYPE Next(
-        ULONG ulCount,
-        ITfRange **ppRange,
-        ULONG *pcFetched) = 0;
-
-    virtual HRESULT STDMETHODCALLTYPE Reset(
-        ) = 0;
-
-    virtual HRESULT STDMETHODCALLTYPE Skip(
-        ULONG ulCount) = 0;
-
-};
-#ifdef __CRT_UUID_DECL
-__CRT_UUID_DECL(IEnumTfRanges, 0xf99d3f40, 0x8e32, 0x11d2, 0xbf,0x46, 0x00,0x10,0x5a,0x27,0x99,0xb5)
-#endif
-#else
-typedef struct IEnumTfRangesVtbl {
-    BEGIN_INTERFACE
-
-    /*** IUnknown methods ***/
-    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IEnumTfRanges* This,
-        REFIID riid,
-        void **ppvObject);
-
-    ULONG (STDMETHODCALLTYPE *AddRef)(
-        IEnumTfRanges* This);
-
-    ULONG (STDMETHODCALLTYPE *Release)(
-        IEnumTfRanges* This);
-
-    /*** IEnumTfRanges methods ***/
-    HRESULT (STDMETHODCALLTYPE *Clone)(
-        IEnumTfRanges* This,
-        IEnumTfRanges **ppEnum);
-
-    HRESULT (STDMETHODCALLTYPE *Next)(
-        IEnumTfRanges* This,
-        ULONG ulCount,
-        ITfRange **ppRange,
-        ULONG *pcFetched);
-
-    HRESULT (STDMETHODCALLTYPE *Reset)(
-        IEnumTfRanges* This);
-
-    HRESULT (STDMETHODCALLTYPE *Skip)(
-        IEnumTfRanges* This,
-        ULONG ulCount);
-
-    END_INTERFACE
-} IEnumTfRangesVtbl;
-interface IEnumTfRanges {
-    CONST_VTBL IEnumTfRangesVtbl* lpVtbl;
-};
-
-#ifdef COBJMACROS
-#ifndef WIDL_C_INLINE_WRAPPERS
-/*** IUnknown methods ***/
-#define IEnumTfRanges_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IEnumTfRanges_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IEnumTfRanges_Release(This) (This)->lpVtbl->Release(This)
-/*** IEnumTfRanges methods ***/
-#define IEnumTfRanges_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)
-#define IEnumTfRanges_Next(This,ulCount,ppRange,pcFetched) (This)->lpVtbl->Next(This,ulCount,ppRange,pcFetched)
-#define IEnumTfRanges_Reset(This) (This)->lpVtbl->Reset(This)
-#define IEnumTfRanges_Skip(This,ulCount) (This)->lpVtbl->Skip(This,ulCount)
-#else
-/*** IUnknown methods ***/
-static FORCEINLINE HRESULT IEnumTfRanges_QueryInterface(IEnumTfRanges* This,REFIID riid,void **ppvObject) {
-    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
-}
-static FORCEINLINE ULONG IEnumTfRanges_AddRef(IEnumTfRanges* This) {
-    return This->lpVtbl->AddRef(This);
-}
-static FORCEINLINE ULONG IEnumTfRanges_Release(IEnumTfRanges* This) {
-    return This->lpVtbl->Release(This);
-}
-/*** IEnumTfRanges methods ***/
-static FORCEINLINE HRESULT IEnumTfRanges_Clone(IEnumTfRanges* This,IEnumTfRanges **ppEnum) {
-    return This->lpVtbl->Clone(This,ppEnum);
-}
-static FORCEINLINE HRESULT IEnumTfRanges_Next(IEnumTfRanges* This,ULONG ulCount,ITfRange **ppRange,ULONG *pcFetched) {
-    return This->lpVtbl->Next(This,ulCount,ppRange,pcFetched);
-}
-static FORCEINLINE HRESULT IEnumTfRanges_Reset(IEnumTfRanges* This) {
-    return This->lpVtbl->Reset(This);
-}
-static FORCEINLINE HRESULT IEnumTfRanges_Skip(IEnumTfRanges* This,ULONG ulCount) {
-    return This->lpVtbl->Skip(This,ulCount);
-}
-#endif
-#endif
-
-#endif
-
-HRESULT STDMETHODCALLTYPE IEnumTfRanges_Clone_Proxy(
-    IEnumTfRanges* This,
-    IEnumTfRanges **ppEnum);
-void __RPC_STUB IEnumTfRanges_Clone_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumTfRanges_Next_Proxy(
-    IEnumTfRanges* This,
-    ULONG ulCount,
-    ITfRange **ppRange,
-    ULONG *pcFetched);
-void __RPC_STUB IEnumTfRanges_Next_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumTfRanges_Reset_Proxy(
-    IEnumTfRanges* This);
-void __RPC_STUB IEnumTfRanges_Reset_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumTfRanges_Skip_Proxy(
-    IEnumTfRanges* This,
-    ULONG ulCount);
-void __RPC_STUB IEnumTfRanges_Skip_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-
-#endif  /* __IEnumTfRanges_INTERFACE_DEFINED__ */
-
-/*****************************************************************************
  * IEnumITfCompositionView interface
  */
 #ifndef __IEnumITfCompositionView_INTERFACE_DEFINED__
@@ -8691,6 +9832,461 @@
 #endif  /* __IEnumTfDocumentMgrs_INTERFACE_DEFINED__ */
 
 /*****************************************************************************
+ * ITfUIElement interface
+ */
+#ifndef __ITfUIElement_INTERFACE_DEFINED__
+#define __ITfUIElement_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITfUIElement, 0xea1ea137, 0x19df, 0x11d7, 0xa6,0xd2, 0x00,0x06,0x5b,0x84,0x43,0x5c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("ea1ea137-19df-11d7-a6d2-00065b84435c")
+ITfUIElement : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetDescription(
+        BSTR *description) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetGUID(
+        GUID *guid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Show(
+        WINBOOL show) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsShown(
+        WINBOOL *show) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITfUIElement, 0xea1ea137, 0x19df, 0x11d7, 0xa6,0xd2, 0x00,0x06,0x5b,0x84,0x43,0x5c)
+#endif
+#else
+typedef struct ITfUIElementVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITfUIElement* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITfUIElement* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITfUIElement* This);
+
+    /*** ITfUIElement methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDescription)(
+        ITfUIElement* This,
+        BSTR *description);
+
+    HRESULT (STDMETHODCALLTYPE *GetGUID)(
+        ITfUIElement* This,
+        GUID *guid);
+
+    HRESULT (STDMETHODCALLTYPE *Show)(
+        ITfUIElement* This,
+        WINBOOL show);
+
+    HRESULT (STDMETHODCALLTYPE *IsShown)(
+        ITfUIElement* This,
+        WINBOOL *show);
+
+    END_INTERFACE
+} ITfUIElementVtbl;
+interface ITfUIElement {
+    CONST_VTBL ITfUIElementVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ITfUIElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITfUIElement_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITfUIElement_Release(This) (This)->lpVtbl->Release(This)
+/*** ITfUIElement methods ***/
+#define ITfUIElement_GetDescription(This,description) (This)->lpVtbl->GetDescription(This,description)
+#define ITfUIElement_GetGUID(This,guid) (This)->lpVtbl->GetGUID(This,guid)
+#define ITfUIElement_Show(This,show) (This)->lpVtbl->Show(This,show)
+#define ITfUIElement_IsShown(This,show) (This)->lpVtbl->IsShown(This,show)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ITfUIElement_QueryInterface(ITfUIElement* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ITfUIElement_AddRef(ITfUIElement* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ITfUIElement_Release(ITfUIElement* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITfUIElement methods ***/
+static FORCEINLINE HRESULT ITfUIElement_GetDescription(ITfUIElement* This,BSTR *description) {
+    return This->lpVtbl->GetDescription(This,description);
+}
+static FORCEINLINE HRESULT ITfUIElement_GetGUID(ITfUIElement* This,GUID *guid) {
+    return This->lpVtbl->GetGUID(This,guid);
+}
+static FORCEINLINE HRESULT ITfUIElement_Show(ITfUIElement* This,WINBOOL show) {
+    return This->lpVtbl->Show(This,show);
+}
+static FORCEINLINE HRESULT ITfUIElement_IsShown(ITfUIElement* This,WINBOOL *show) {
+    return This->lpVtbl->IsShown(This,show);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITfUIElement_GetDescription_Proxy(
+    ITfUIElement* This,
+    BSTR *description);
+void __RPC_STUB ITfUIElement_GetDescription_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfUIElement_GetGUID_Proxy(
+    ITfUIElement* This,
+    GUID *guid);
+void __RPC_STUB ITfUIElement_GetGUID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfUIElement_Show_Proxy(
+    ITfUIElement* This,
+    WINBOOL show);
+void __RPC_STUB ITfUIElement_Show_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfUIElement_IsShown_Proxy(
+    ITfUIElement* This,
+    WINBOOL *show);
+void __RPC_STUB ITfUIElement_IsShown_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ITfUIElement_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumTfUIElements interface
+ */
+#ifndef __IEnumTfUIElements_INTERFACE_DEFINED__
+#define __IEnumTfUIElements_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IEnumTfUIElements, 0x887aa91e, 0xacba, 0x4931, 0x84,0xda, 0x3c,0x52,0x08,0xcf,0x54,0x3f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("887aa91e-acba-4931-84da-3c5208cf543f")
+IEnumTfUIElements : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IEnumTfUIElements **enum_elements) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Next(
+        ULONG count,
+        ITfUIElement **element,
+        ULONG fetched) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Skip(
+        ULONG count) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IEnumTfUIElements, 0x887aa91e, 0xacba, 0x4931, 0x84,0xda, 0x3c,0x52,0x08,0xcf,0x54,0x3f)
+#endif
+#else
+typedef struct IEnumTfUIElementsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IEnumTfUIElements* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IEnumTfUIElements* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IEnumTfUIElements* This);
+
+    /*** IEnumTfUIElements methods ***/
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IEnumTfUIElements* This,
+        IEnumTfUIElements **enum_elements);
+
+    HRESULT (STDMETHODCALLTYPE *Next)(
+        IEnumTfUIElements* This,
+        ULONG count,
+        ITfUIElement **element,
+        ULONG fetched);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        IEnumTfUIElements* This);
+
+    HRESULT (STDMETHODCALLTYPE *Skip)(
+        IEnumTfUIElements* This,
+        ULONG count);
+
+    END_INTERFACE
+} IEnumTfUIElementsVtbl;
+interface IEnumTfUIElements {
+    CONST_VTBL IEnumTfUIElementsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IEnumTfUIElements_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumTfUIElements_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumTfUIElements_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumTfUIElements methods ***/
+#define IEnumTfUIElements_Clone(This,enum_elements) (This)->lpVtbl->Clone(This,enum_elements)
+#define IEnumTfUIElements_Next(This,count,element,fetched) (This)->lpVtbl->Next(This,count,element,fetched)
+#define IEnumTfUIElements_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumTfUIElements_Skip(This,count) (This)->lpVtbl->Skip(This,count)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IEnumTfUIElements_QueryInterface(IEnumTfUIElements* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IEnumTfUIElements_AddRef(IEnumTfUIElements* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IEnumTfUIElements_Release(IEnumTfUIElements* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IEnumTfUIElements methods ***/
+static FORCEINLINE HRESULT IEnumTfUIElements_Clone(IEnumTfUIElements* This,IEnumTfUIElements **enum_elements) {
+    return This->lpVtbl->Clone(This,enum_elements);
+}
+static FORCEINLINE HRESULT IEnumTfUIElements_Next(IEnumTfUIElements* This,ULONG count,ITfUIElement **element,ULONG fetched) {
+    return This->lpVtbl->Next(This,count,element,fetched);
+}
+static FORCEINLINE HRESULT IEnumTfUIElements_Reset(IEnumTfUIElements* This) {
+    return This->lpVtbl->Reset(This);
+}
+static FORCEINLINE HRESULT IEnumTfUIElements_Skip(IEnumTfUIElements* This,ULONG count) {
+    return This->lpVtbl->Skip(This,count);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumTfUIElements_Clone_Proxy(
+    IEnumTfUIElements* This,
+    IEnumTfUIElements **enum_elements);
+void __RPC_STUB IEnumTfUIElements_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumTfUIElements_Next_Proxy(
+    IEnumTfUIElements* This,
+    ULONG count,
+    ITfUIElement **element,
+    ULONG fetched);
+void __RPC_STUB IEnumTfUIElements_Next_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumTfUIElements_Reset_Proxy(
+    IEnumTfUIElements* This);
+void __RPC_STUB IEnumTfUIElements_Reset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumTfUIElements_Skip_Proxy(
+    IEnumTfUIElements* This,
+    ULONG count);
+void __RPC_STUB IEnumTfUIElements_Skip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IEnumTfUIElements_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITfUIElementMgr interface
+ */
+#ifndef __ITfUIElementMgr_INTERFACE_DEFINED__
+#define __ITfUIElementMgr_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITfUIElementMgr, 0xea1ea135, 0x19df, 0x11d7, 0xa6,0xd2, 0x00,0x06,0x5b,0x84,0x43,0x5c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("ea1ea135-19df-11d7-a6d2-00065b84435c")
+ITfUIElementMgr : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE BeginUIElement(
+        ITfUIElement *element,
+        WINBOOL *show,
+        DWORD *id) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UpdateUIElement(
+        DWORD id) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EndUIElement(
+        DWORD id) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetUIElement(
+        DWORD id,
+        ITfUIElement **element) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumUIElements(
+        IEnumTfUIElements **enum_elements) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITfUIElementMgr, 0xea1ea135, 0x19df, 0x11d7, 0xa6,0xd2, 0x00,0x06,0x5b,0x84,0x43,0x5c)
+#endif
+#else
+typedef struct ITfUIElementMgrVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITfUIElementMgr* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITfUIElementMgr* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITfUIElementMgr* This);
+
+    /*** ITfUIElementMgr methods ***/
+    HRESULT (STDMETHODCALLTYPE *BeginUIElement)(
+        ITfUIElementMgr* This,
+        ITfUIElement *element,
+        WINBOOL *show,
+        DWORD *id);
+
+    HRESULT (STDMETHODCALLTYPE *UpdateUIElement)(
+        ITfUIElementMgr* This,
+        DWORD id);
+
+    HRESULT (STDMETHODCALLTYPE *EndUIElement)(
+        ITfUIElementMgr* This,
+        DWORD id);
+
+    HRESULT (STDMETHODCALLTYPE *GetUIElement)(
+        ITfUIElementMgr* This,
+        DWORD id,
+        ITfUIElement **element);
+
+    HRESULT (STDMETHODCALLTYPE *EnumUIElements)(
+        ITfUIElementMgr* This,
+        IEnumTfUIElements **enum_elements);
+
+    END_INTERFACE
+} ITfUIElementMgrVtbl;
+interface ITfUIElementMgr {
+    CONST_VTBL ITfUIElementMgrVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ITfUIElementMgr_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITfUIElementMgr_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITfUIElementMgr_Release(This) (This)->lpVtbl->Release(This)
+/*** ITfUIElementMgr methods ***/
+#define ITfUIElementMgr_BeginUIElement(This,element,show,id) (This)->lpVtbl->BeginUIElement(This,element,show,id)
+#define ITfUIElementMgr_UpdateUIElement(This,id) (This)->lpVtbl->UpdateUIElement(This,id)
+#define ITfUIElementMgr_EndUIElement(This,id) (This)->lpVtbl->EndUIElement(This,id)
+#define ITfUIElementMgr_GetUIElement(This,id,element) (This)->lpVtbl->GetUIElement(This,id,element)
+#define ITfUIElementMgr_EnumUIElements(This,enum_elements) (This)->lpVtbl->EnumUIElements(This,enum_elements)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ITfUIElementMgr_QueryInterface(ITfUIElementMgr* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ITfUIElementMgr_AddRef(ITfUIElementMgr* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ITfUIElementMgr_Release(ITfUIElementMgr* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITfUIElementMgr methods ***/
+static FORCEINLINE HRESULT ITfUIElementMgr_BeginUIElement(ITfUIElementMgr* This,ITfUIElement *element,WINBOOL *show,DWORD *id) {
+    return This->lpVtbl->BeginUIElement(This,element,show,id);
+}
+static FORCEINLINE HRESULT ITfUIElementMgr_UpdateUIElement(ITfUIElementMgr* This,DWORD id) {
+    return This->lpVtbl->UpdateUIElement(This,id);
+}
+static FORCEINLINE HRESULT ITfUIElementMgr_EndUIElement(ITfUIElementMgr* This,DWORD id) {
+    return This->lpVtbl->EndUIElement(This,id);
+}
+static FORCEINLINE HRESULT ITfUIElementMgr_GetUIElement(ITfUIElementMgr* This,DWORD id,ITfUIElement **element) {
+    return This->lpVtbl->GetUIElement(This,id,element);
+}
+static FORCEINLINE HRESULT ITfUIElementMgr_EnumUIElements(ITfUIElementMgr* This,IEnumTfUIElements **enum_elements) {
+    return This->lpVtbl->EnumUIElements(This,enum_elements);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITfUIElementMgr_BeginUIElement_Proxy(
+    ITfUIElementMgr* This,
+    ITfUIElement *element,
+    WINBOOL *show,
+    DWORD *id);
+void __RPC_STUB ITfUIElementMgr_BeginUIElement_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfUIElementMgr_UpdateUIElement_Proxy(
+    ITfUIElementMgr* This,
+    DWORD id);
+void __RPC_STUB ITfUIElementMgr_UpdateUIElement_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfUIElementMgr_EndUIElement_Proxy(
+    ITfUIElementMgr* This,
+    DWORD id);
+void __RPC_STUB ITfUIElementMgr_EndUIElement_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfUIElementMgr_GetUIElement_Proxy(
+    ITfUIElementMgr* This,
+    DWORD id,
+    ITfUIElement **element);
+void __RPC_STUB ITfUIElementMgr_GetUIElement_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITfUIElementMgr_EnumUIElements_Proxy(
+    ITfUIElementMgr* This,
+    IEnumTfUIElements **enum_elements);
+void __RPC_STUB ITfUIElementMgr_EnumUIElements_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ITfUIElementMgr_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
  * ITfSourceSingle interface
  */
 #ifndef __ITfSourceSingle_INTERFACE_DEFINED__
@@ -9316,14 +10912,14 @@
 
 /* Begin additional prototypes for all interfaces */
 
-ULONG           __RPC_USER HWND_UserSize     (ULONG *, ULONG, HWND *);
-unsigned char * __RPC_USER HWND_UserMarshal  (ULONG *, unsigned char *, HWND *);
-unsigned char * __RPC_USER HWND_UserUnmarshal(ULONG *, unsigned char *, HWND *);
-void            __RPC_USER HWND_UserFree     (ULONG *, HWND *);
 ULONG           __RPC_USER BSTR_UserSize     (ULONG *, ULONG, BSTR *);
 unsigned char * __RPC_USER BSTR_UserMarshal  (ULONG *, unsigned char *, BSTR *);
 unsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *);
 void            __RPC_USER BSTR_UserFree     (ULONG *, BSTR *);
+ULONG           __RPC_USER HWND_UserSize     (ULONG *, ULONG, HWND *);
+unsigned char * __RPC_USER HWND_UserMarshal  (ULONG *, unsigned char *, HWND *);
+unsigned char * __RPC_USER HWND_UserUnmarshal(ULONG *, unsigned char *, HWND *);
+void            __RPC_USER HWND_UserFree     (ULONG *, HWND *);
 ULONG           __RPC_USER VARIANT_UserSize     (ULONG *, ULONG, VARIANT *);
 unsigned char * __RPC_USER VARIANT_UserMarshal  (ULONG *, unsigned char *, VARIANT *);
 unsigned char * __RPC_USER VARIANT_UserUnmarshal(ULONG *, unsigned char *, VARIANT *);
diff --git a/x86_64-w64-mingw32/include/msctfmonitorapi.h b/x86_64-w64-mingw32/include/msctfmonitorapi.h
index cae9016..39c51a4 100644
--- a/x86_64-w64-mingw32/include/msctfmonitorapi.h
+++ b/x86_64-w64-mingw32/include/msctfmonitorapi.h
@@ -23,4 +23,4 @@
 
 #endif /*(_WIN32_WINNT >= 0x0600)*/
 
-#endif _INC_MSCTFMONITORAPI
+#endif /* _INC_MSCTFMONITORAPI */
diff --git a/x86_64-w64-mingw32/include/mshtml.h b/x86_64-w64-mingw32/include/mshtml.h
index 1f82429..b7bb03d 100644
--- a/x86_64-w64-mingw32/include/mshtml.h
+++ b/x86_64-w64-mingw32/include/mshtml.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 1.6 from /usr/local/google/buildbot/src/android/mingw/toolchain/mingw/mingw-w64-v4.0.4/mingw-w64-headers/include/mshtml.idl - Do not edit ***/
+/*** Autogenerated by WIDL 1.6 from include/mshtml.idl - Do not edit ***/
 
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
 #define __REQUIRED_RPCNDR_H_VERSION__ 475
diff --git a/x86_64-w64-mingw32/include/msinkaut.h b/x86_64-w64-mingw32/include/msinkaut.h
new file mode 100644
index 0000000..fadab56
--- /dev/null
+++ b/x86_64-w64-mingw32/include/msinkaut.h
@@ -0,0 +1,7850 @@
+/*** Autogenerated by WIDL 1.6 from include/msinkaut.idl - Do not edit ***/
+
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
+
+#ifndef __msinkaut_h__
+#define __msinkaut_h__
+
+/* Forward declarations */
+
+#ifndef __IInkExtendedProperty_FWD_DEFINED__
+#define __IInkExtendedProperty_FWD_DEFINED__
+typedef interface IInkExtendedProperty IInkExtendedProperty;
+#endif
+
+#ifndef __IInkExtendedProperties_FWD_DEFINED__
+#define __IInkExtendedProperties_FWD_DEFINED__
+typedef interface IInkExtendedProperties IInkExtendedProperties;
+#endif
+
+#ifndef __IInkDrawingAttributes_FWD_DEFINED__
+#define __IInkDrawingAttributes_FWD_DEFINED__
+typedef interface IInkDrawingAttributes IInkDrawingAttributes;
+#endif
+
+#ifndef __IInkRectangle_FWD_DEFINED__
+#define __IInkRectangle_FWD_DEFINED__
+typedef interface IInkRectangle IInkRectangle;
+#endif
+
+#ifndef __IInkTablet_FWD_DEFINED__
+#define __IInkTablet_FWD_DEFINED__
+typedef interface IInkTablet IInkTablet;
+#endif
+
+#ifndef __IInkCursorButton_FWD_DEFINED__
+#define __IInkCursorButton_FWD_DEFINED__
+typedef interface IInkCursorButton IInkCursorButton;
+#endif
+
+#ifndef __IInkCursorButtons_FWD_DEFINED__
+#define __IInkCursorButtons_FWD_DEFINED__
+typedef interface IInkCursorButtons IInkCursorButtons;
+#endif
+
+#ifndef __IInkCursor_FWD_DEFINED__
+#define __IInkCursor_FWD_DEFINED__
+typedef interface IInkCursor IInkCursor;
+#endif
+
+#ifndef __IInkTransform_FWD_DEFINED__
+#define __IInkTransform_FWD_DEFINED__
+typedef interface IInkTransform IInkTransform;
+#endif
+
+#ifndef __IInkRecognitionAlternates_FWD_DEFINED__
+#define __IInkRecognitionAlternates_FWD_DEFINED__
+typedef interface IInkRecognitionAlternates IInkRecognitionAlternates;
+#endif
+
+#ifndef __IInkRecognitionAlternate_FWD_DEFINED__
+#define __IInkRecognitionAlternate_FWD_DEFINED__
+typedef interface IInkRecognitionAlternate IInkRecognitionAlternate;
+#endif
+
+#ifndef __IInkRecognitionResult_FWD_DEFINED__
+#define __IInkRecognitionResult_FWD_DEFINED__
+typedef interface IInkRecognitionResult IInkRecognitionResult;
+#endif
+
+#ifndef __IInkStrokeDisp_FWD_DEFINED__
+#define __IInkStrokeDisp_FWD_DEFINED__
+typedef interface IInkStrokeDisp IInkStrokeDisp;
+#endif
+
+#ifndef __IInkCustomStrokes_FWD_DEFINED__
+#define __IInkCustomStrokes_FWD_DEFINED__
+typedef interface IInkCustomStrokes IInkCustomStrokes;
+#endif
+
+#ifndef __IInkDisp_FWD_DEFINED__
+#define __IInkDisp_FWD_DEFINED__
+typedef interface IInkDisp IInkDisp;
+#endif
+
+#ifndef __IInkStrokes_FWD_DEFINED__
+#define __IInkStrokes_FWD_DEFINED__
+typedef interface IInkStrokes IInkStrokes;
+#endif
+
+#ifndef __IInkRenderer_FWD_DEFINED__
+#define __IInkRenderer_FWD_DEFINED__
+typedef interface IInkRenderer IInkRenderer;
+#endif
+
+#ifndef __IInkCursors_FWD_DEFINED__
+#define __IInkCursors_FWD_DEFINED__
+typedef interface IInkCursors IInkCursors;
+#endif
+
+#ifndef __IInkCollector_FWD_DEFINED__
+#define __IInkCollector_FWD_DEFINED__
+typedef interface IInkCollector IInkCollector;
+#endif
+
+#ifndef ___IInkCollectorEvents_FWD_DEFINED__
+#define ___IInkCollectorEvents_FWD_DEFINED__
+typedef interface _IInkCollectorEvents _IInkCollectorEvents;
+#endif
+
+#ifndef __InkCollector_FWD_DEFINED__
+#define __InkCollector_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class InkCollector InkCollector;
+#else
+typedef struct InkCollector InkCollector;
+#endif /* defined __cplusplus */
+#endif /* defined __InkCollector_FWD_DEFINED__ */
+
+/* Headers for imported files */
+
+#include <oaidl.h>
+#include <ocidl.h>
+#include <tpcshrd.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum InkRasterOperation {
+    IRO_Black = 1,
+    IRO_NotMergePen = 2,
+    IRO_MaskNotPen = 3,
+    IRO_NotCopyPen = 4,
+    IRO_MaskPenNot = 5,
+    IRO_Not = 6,
+    IRO_XOrPen = 7,
+    IRO_NotMaskPen = 8,
+    IRO_MaskPen = 9,
+    IRO_NotXOrPen = 10,
+    IRO_NoOperation = 11,
+    IRO_MergeNotPen = 12,
+    IRO_CopyPen = 13,
+    IRO_MergePenNot = 14,
+    IRO_MergePen = 15,
+    IRO_White = 16
+} InkRasterOperation;
+typedef enum InkPenTip {
+    IPT_Ball = 0,
+    IPT_Rectangle = 1
+} InkPenTip;
+typedef enum TabletHardwareCapabilities {
+    THWC_Integrated = 0x1,
+    THWC_CursorMustTouch = 0x2,
+    THWC_HardProximity = 0x4,
+    THWC_CursorsHavePhysicalIds = 0x8
+} TabletHardwareCapabilities;
+typedef enum TabletPropertyMetricUnit {
+    TPMU_Default = 0,
+    TPMU_Inches = 1,
+    TPMU_Centimeters = 2,
+    TPMU_Degrees = 3,
+    TPMU_Radians = 4,
+    TPMU_Seconds = 5,
+    TPMU_Pounds = 6,
+    TPMU_Grams = 7
+} TabletPropertyMetricUnit;
+typedef enum InkCursorButtonState {
+    ICBS_Unavailable = 0,
+    ICBS_Up = 1,
+    ICBS_Down = 2
+} InkCursorButtonState;
+typedef enum InkRecognitionConfidence {
+    IRC_Strong = 0,
+    IRC_Intermediate = 1,
+    IRC_Poor = 2
+} InkRecognitionConfidence;
+typedef enum InkBoundingBoxMode {
+    IBBM_Default = 0,
+    IBBM_NoCurveFit = 1,
+    IBBM_CurveFit = 2,
+    IBBM_PointsOnly = 3,
+    IBBM_Union = 4
+} InkBoundingBoxMode;
+typedef enum InkExtractFlags {
+    IEF_CopyFromOriginal = 0,
+    IEF_RemoveFromOriginal = 1,
+    IEF_Default = IEF_RemoveFromOriginal
+} InkExtractFlags;
+typedef enum InkPersistenceFormat {
+    IPF_InkSerializedFormat = 0,
+    IPF_Base64InkSerializedFormat = 1,
+    IPF_GIF = 2,
+    IPF_Base64GIF = 3
+} InkPersistenceFormat;
+typedef enum InkPersistenceCompressionMode {
+    IPCM_Default = 0,
+    IPCM_MaximumCompression = 1,
+    IPCM_NoCompression = 2
+} InkPersistenceCompressionMode;
+typedef enum InkClipboardFormats {
+    ICF_None = 0x0,
+    ICF_InkSerializedFormat = 0x1,
+    ICF_SketchInk = 0x2,
+    ICF_TextInk = 0x6,
+    ICF_EnhancedMetafile = 0x8,
+    ICF_Metafile = 0x20,
+    ICF_Bitmap = 0x40,
+    ICF_PasteMask = 0x7,
+    ICF_CopyMask = 0x7f,
+    ICF_Default = ICF_CopyMask
+} InkClipboardFormats;
+typedef enum InkClipboardModes {
+    ICB_Copy = 0x0,
+    ICB_Cut = 0x1,
+    ICB_ExtractOnly = 0x30,
+    ICB_DelayedCopy = 0x20,
+    ICB_Default = ICB_Copy
+} InkClipboardModes;
+typedef enum InkCollectionMode {
+    ICM_InkOnly = 0,
+    ICM_GestureOnly = 1,
+    ICM_InkAndGesture = 2
+} InkCollectionMode;
+typedef enum InkMousePointer {
+    IMP_Default = 0,
+    IMP_Arrow = 1,
+    IMP_Crosshair = 2,
+    IMP_Ibeam = 3,
+    IMP_SizeNESW = 4,
+    IMP_SizeNS = 5,
+    IMP_SizeNWSE = 6,
+    IMP_SizeWE = 7,
+    IMP_UpArrow = 8,
+    IMP_Hourglass = 9,
+    IMP_NoDrop = 10,
+    IMP_ArrowHourglass = 11,
+    IMP_ArrowQuestion = 12,
+    IMP_SizeAll = 13,
+    IMP_Hand = 14,
+    IMP_Custom = 99
+} InkMousePointer;
+typedef enum InkApplicationGesture {
+    IAG_AllGestures = 0x0,
+    IAG_NoGesture = 0xf000,
+    IAG_Scratchout = 0xf001,
+    IAG_Triangle = 0xf002,
+    IAG_Square = 0xf003,
+    IAG_Star = 0xf004,
+    IAG_Check = 0xf005,
+    IAG_Curlicue = 0xf010,
+    IAG_DoubleCurlicue = 0xf011,
+    IAG_Circle = 0xf020,
+    IAG_DoubleCircle = 0xf021,
+    IAG_SemiCircleLeft = 0xf028,
+    IAG_SemiCircleRight = 0xf029,
+    IAG_ChevronUp = 0xf030,
+    IAG_ChevronDown = 0xf031,
+    IAG_ChevronLeft = 0xf032,
+    IAG_ChevronRight = 0xf033,
+    IAG_ArrowUp = 0xf038,
+    IAG_ArrowDown = 0xf039,
+    IAG_ArrowLeft = 0xf03a,
+    IAG_ArrowRight = 0xf03b,
+    IAG_Up = 0xf058,
+    IAG_Down = 0xf059,
+    IAG_Left = 0xf05a,
+    IAG_Right = 0xf05b,
+    IAG_UpDown = 0xf060,
+    IAG_DownUp = 0xf061,
+    IAG_LeftRight = 0xf062,
+    IAG_RightLeft = 0xf063,
+    IAG_UpLeftLong = 0xf064,
+    IAG_UpRightLong = 0xf065,
+    IAG_DownLeftLong = 0xf066,
+    IAG_DownRightLong = 0xf067,
+    IAG_UpLeft = 0xf068,
+    IAG_UpRight = 0xf069,
+    IAG_DownLeft = 0xf06a,
+    IAG_DownRight = 0xf06b,
+    IAG_LeftUp = 0xf06c,
+    IAG_LeftDown = 0xf06d,
+    IAG_RightUp = 0xf06e,
+    IAG_RightDown = 0xf06f,
+    IAG_Exclamation = 0xf0a4,
+    IAG_Tap = 0xf0f0,
+    IAG_DoubleTap = 0xf0f1
+} InkApplicationGesture;
+typedef enum InkCollectorEventInterest {
+    ICEI_DefaultEvents = -1,
+    ICEI_CursorDown = ICEI_DefaultEvents + 1,
+    ICEI_Stroke = ICEI_CursorDown + 1,
+    ICEI_NewPackets = ICEI_Stroke + 1,
+    ICEI_NewInAirPackets = ICEI_NewPackets + 1,
+    ICEI_CursorButtonDown = ICEI_NewInAirPackets + 1,
+    ICEI_CursorButtonUp = ICEI_CursorButtonDown + 1,
+    ICEI_CursorInRange = ICEI_CursorButtonUp + 1,
+    ICEI_CursorOutOfRange = ICEI_CursorInRange + 1,
+    ICEI_SystemGesture = ICEI_CursorOutOfRange + 1,
+    ICEI_TabletAdded = ICEI_SystemGesture + 1,
+    ICEI_TabletRemoved = ICEI_TabletAdded + 1,
+    ICEI_MouseDown = ICEI_TabletRemoved + 1,
+    ICEI_MouseMove = ICEI_MouseDown + 1,
+    ICEI_MouseUp = ICEI_MouseMove + 1,
+    ICEI_MouseWheel = ICEI_MouseUp + 1,
+    ICEI_DblClick = ICEI_MouseWheel + 1,
+    ICEI_AllEvents = ICEI_DblClick + 1
+} InkCollectorEventInterest;
+typedef enum DISPID_InkCollectorEvent {
+    DISPID_ICEStroke = 1,
+    DISPID_ICECursorDown = DISPID_ICEStroke + 1,
+    DISPID_ICENewPackets = DISPID_ICECursorDown + 1,
+    DISPID_ICENewInAirPackets = DISPID_ICENewPackets + 1,
+    DISPID_ICECursorButtonDown = DISPID_ICENewInAirPackets + 1,
+    DISPID_ICECursorButtonUp = DISPID_ICECursorButtonDown + 1,
+    DISPID_ICECursorInRange = DISPID_ICECursorButtonUp + 1,
+    DISPID_ICECursorOutOfRange = DISPID_ICECursorInRange + 1,
+    DISPID_ICESystemGesture = DISPID_ICECursorOutOfRange + 1,
+    DISPID_ICEGesture = DISPID_ICESystemGesture + 1,
+    DISPID_ICETabletAdded = DISPID_ICEGesture + 1,
+    DISPID_ICETabletRemoved = DISPID_ICETabletAdded + 1,
+    DISPID_IOEPainting = DISPID_ICETabletRemoved + 1,
+    DISPID_IOEPainted = DISPID_IOEPainting + 1,
+    DISPID_IOESelectionChanging = DISPID_IOEPainted + 1,
+    DISPID_IOESelectionChanged = DISPID_IOESelectionChanging + 1,
+    DISPID_IOESelectionMoving = DISPID_IOESelectionChanged + 1,
+    DISPID_IOESelectionMoved = DISPID_IOESelectionMoving + 1,
+    DISPID_IOESelectionResizing = DISPID_IOESelectionMoved + 1,
+    DISPID_IOESelectionResized = DISPID_IOESelectionResizing + 1,
+    DISPID_IOEStrokesDeleting = DISPID_IOESelectionResized + 1,
+    DISPID_IOEStrokesDeleted = DISPID_IOEStrokesDeleting + 1,
+    DISPID_IPEChangeUICues = DISPID_IOEStrokesDeleted + 1,
+    DISPID_IPEClick = DISPID_IPEChangeUICues + 1,
+    DISPID_IPEDblClick = DISPID_IPEClick + 1,
+    DISPID_IPEInvalidated = DISPID_IPEDblClick + 1,
+    DISPID_IPEMouseDown = DISPID_IPEInvalidated + 1,
+    DISPID_IPEMouseEnter = DISPID_IPEMouseDown + 1,
+    DISPID_IPEMouseHover = DISPID_IPEMouseEnter + 1,
+    DISPID_IPEMouseLeave = DISPID_IPEMouseHover + 1,
+    DISPID_IPEMouseMove = DISPID_IPEMouseLeave + 1,
+    DISPID_IPEMouseUp = DISPID_IPEMouseMove + 1,
+    DISPID_IPEMouseWheel = DISPID_IPEMouseUp + 1,
+    DISPID_IPESizeModeChanged = DISPID_IPEMouseWheel + 1,
+    DISPID_IPEStyleChanged = DISPID_IPESizeModeChanged + 1,
+    DISPID_IPESystemColorsChanged = DISPID_IPEStyleChanged + 1,
+    DISPID_IPEKeyDown = DISPID_IPESystemColorsChanged + 1,
+    DISPID_IPEKeyPress = DISPID_IPEKeyDown + 1,
+    DISPID_IPEKeyUp = DISPID_IPEKeyPress + 1,
+    DISPID_IPEResize = DISPID_IPEKeyUp + 1,
+    DISPID_IPESizeChanged = DISPID_IPEResize + 1
+} DISPID_InkCollectorEvent;
+#ifndef __IInkDisp_FWD_DEFINED__
+#define __IInkDisp_FWD_DEFINED__
+typedef interface IInkDisp IInkDisp;
+#endif
+
+#ifndef __IInkStrokes_FWD_DEFINED__
+#define __IInkStrokes_FWD_DEFINED__
+typedef interface IInkStrokes IInkStrokes;
+#endif
+
+#ifndef __IInkRecognitionAlternate_FWD_DEFINED__
+#define __IInkRecognitionAlternate_FWD_DEFINED__
+typedef interface IInkRecognitionAlternate IInkRecognitionAlternate;
+#endif
+
+/*****************************************************************************
+ * IInkExtendedProperty interface
+ */
+#ifndef __IInkExtendedProperty_INTERFACE_DEFINED__
+#define __IInkExtendedProperty_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInkExtendedProperty, 0xdb489209, 0xb7c3, 0x411d, 0x90,0xf6, 0x15,0x48,0xcf,0xff,0x27,0x1e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("db489209-b7c3-411d-90f6-1548cfff271e")
+IInkExtendedProperty : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Guid(
+        BSTR *Guid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Data(
+        VARIANT *Data) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Data(
+        VARIANT Data) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IInkExtendedProperty, 0xdb489209, 0xb7c3, 0x411d, 0x90,0xf6, 0x15,0x48,0xcf,0xff,0x27,0x1e)
+#endif
+#else
+typedef struct IInkExtendedPropertyVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInkExtendedProperty* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInkExtendedProperty* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInkExtendedProperty* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IInkExtendedProperty* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IInkExtendedProperty* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IInkExtendedProperty* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IInkExtendedProperty* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IInkExtendedProperty methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Guid)(
+        IInkExtendedProperty* This,
+        BSTR *Guid);
+
+    HRESULT (STDMETHODCALLTYPE *get_Data)(
+        IInkExtendedProperty* This,
+        VARIANT *Data);
+
+    HRESULT (STDMETHODCALLTYPE *put_Data)(
+        IInkExtendedProperty* This,
+        VARIANT Data);
+
+    END_INTERFACE
+} IInkExtendedPropertyVtbl;
+interface IInkExtendedProperty {
+    CONST_VTBL IInkExtendedPropertyVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IInkExtendedProperty_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInkExtendedProperty_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInkExtendedProperty_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IInkExtendedProperty_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IInkExtendedProperty_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IInkExtendedProperty_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IInkExtendedProperty_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IInkExtendedProperty methods ***/
+#define IInkExtendedProperty_get_Guid(This,Guid) (This)->lpVtbl->get_Guid(This,Guid)
+#define IInkExtendedProperty_get_Data(This,Data) (This)->lpVtbl->get_Data(This,Data)
+#define IInkExtendedProperty_put_Data(This,Data) (This)->lpVtbl->put_Data(This,Data)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IInkExtendedProperty_QueryInterface(IInkExtendedProperty* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IInkExtendedProperty_AddRef(IInkExtendedProperty* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IInkExtendedProperty_Release(IInkExtendedProperty* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IInkExtendedProperty_GetTypeInfoCount(IInkExtendedProperty* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IInkExtendedProperty_GetTypeInfo(IInkExtendedProperty* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IInkExtendedProperty_GetIDsOfNames(IInkExtendedProperty* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IInkExtendedProperty_Invoke(IInkExtendedProperty* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IInkExtendedProperty methods ***/
+static FORCEINLINE HRESULT IInkExtendedProperty_get_Guid(IInkExtendedProperty* This,BSTR *Guid) {
+    return This->lpVtbl->get_Guid(This,Guid);
+}
+static FORCEINLINE HRESULT IInkExtendedProperty_get_Data(IInkExtendedProperty* This,VARIANT *Data) {
+    return This->lpVtbl->get_Data(This,Data);
+}
+static FORCEINLINE HRESULT IInkExtendedProperty_put_Data(IInkExtendedProperty* This,VARIANT Data) {
+    return This->lpVtbl->put_Data(This,Data);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInkExtendedProperty_get_Guid_Proxy(
+    IInkExtendedProperty* This,
+    BSTR *Guid);
+void __RPC_STUB IInkExtendedProperty_get_Guid_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkExtendedProperty_get_Data_Proxy(
+    IInkExtendedProperty* This,
+    VARIANT *Data);
+void __RPC_STUB IInkExtendedProperty_get_Data_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkExtendedProperty_put_Data_Proxy(
+    IInkExtendedProperty* This,
+    VARIANT Data);
+void __RPC_STUB IInkExtendedProperty_put_Data_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInkExtendedProperty_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInkExtendedProperties interface
+ */
+#ifndef __IInkExtendedProperties_INTERFACE_DEFINED__
+#define __IInkExtendedProperties_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInkExtendedProperties, 0x89f2a8be, 0x95a9, 0x4530, 0x8b,0x8f, 0x88,0xe9,0x71,0xe3,0xe2,0x5f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("89f2a8be-95a9-4530-8b8f-88e971e3e25f")
+IInkExtendedProperties : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Count(
+        LONG *Count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
+        IUnknown **_NewEnum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Item(
+        VARIANT Identifier,
+        IInkExtendedProperty **Item) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Add(
+        BSTR Guid,
+        VARIANT Data,
+        IInkExtendedProperty **InkExtendedProperty) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Remove(
+        VARIANT Identifier) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clear(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DoesPropertyExist(
+        BSTR Guid,
+        VARIANT_BOOL *DoesPropertyExist) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IInkExtendedProperties, 0x89f2a8be, 0x95a9, 0x4530, 0x8b,0x8f, 0x88,0xe9,0x71,0xe3,0xe2,0x5f)
+#endif
+#else
+typedef struct IInkExtendedPropertiesVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInkExtendedProperties* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInkExtendedProperties* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInkExtendedProperties* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IInkExtendedProperties* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IInkExtendedProperties* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IInkExtendedProperties* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IInkExtendedProperties* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IInkExtendedProperties methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Count)(
+        IInkExtendedProperties* This,
+        LONG *Count);
+
+    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
+        IInkExtendedProperties* This,
+        IUnknown **_NewEnum);
+
+    HRESULT (STDMETHODCALLTYPE *Item)(
+        IInkExtendedProperties* This,
+        VARIANT Identifier,
+        IInkExtendedProperty **Item);
+
+    HRESULT (STDMETHODCALLTYPE *Add)(
+        IInkExtendedProperties* This,
+        BSTR Guid,
+        VARIANT Data,
+        IInkExtendedProperty **InkExtendedProperty);
+
+    HRESULT (STDMETHODCALLTYPE *Remove)(
+        IInkExtendedProperties* This,
+        VARIANT Identifier);
+
+    HRESULT (STDMETHODCALLTYPE *Clear)(
+        IInkExtendedProperties* This);
+
+    HRESULT (STDMETHODCALLTYPE *DoesPropertyExist)(
+        IInkExtendedProperties* This,
+        BSTR Guid,
+        VARIANT_BOOL *DoesPropertyExist);
+
+    END_INTERFACE
+} IInkExtendedPropertiesVtbl;
+interface IInkExtendedProperties {
+    CONST_VTBL IInkExtendedPropertiesVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IInkExtendedProperties_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInkExtendedProperties_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInkExtendedProperties_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IInkExtendedProperties_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IInkExtendedProperties_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IInkExtendedProperties_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IInkExtendedProperties_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IInkExtendedProperties methods ***/
+#define IInkExtendedProperties_get_Count(This,Count) (This)->lpVtbl->get_Count(This,Count)
+#define IInkExtendedProperties_get__NewEnum(This,_NewEnum) (This)->lpVtbl->get__NewEnum(This,_NewEnum)
+#define IInkExtendedProperties_Item(This,Identifier,Item) (This)->lpVtbl->Item(This,Identifier,Item)
+#define IInkExtendedProperties_Add(This,Guid,Data,InkExtendedProperty) (This)->lpVtbl->Add(This,Guid,Data,InkExtendedProperty)
+#define IInkExtendedProperties_Remove(This,Identifier) (This)->lpVtbl->Remove(This,Identifier)
+#define IInkExtendedProperties_Clear(This) (This)->lpVtbl->Clear(This)
+#define IInkExtendedProperties_DoesPropertyExist(This,Guid,DoesPropertyExist) (This)->lpVtbl->DoesPropertyExist(This,Guid,DoesPropertyExist)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IInkExtendedProperties_QueryInterface(IInkExtendedProperties* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IInkExtendedProperties_AddRef(IInkExtendedProperties* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IInkExtendedProperties_Release(IInkExtendedProperties* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IInkExtendedProperties_GetTypeInfoCount(IInkExtendedProperties* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IInkExtendedProperties_GetTypeInfo(IInkExtendedProperties* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IInkExtendedProperties_GetIDsOfNames(IInkExtendedProperties* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IInkExtendedProperties_Invoke(IInkExtendedProperties* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IInkExtendedProperties methods ***/
+static FORCEINLINE HRESULT IInkExtendedProperties_get_Count(IInkExtendedProperties* This,LONG *Count) {
+    return This->lpVtbl->get_Count(This,Count);
+}
+static FORCEINLINE HRESULT IInkExtendedProperties_get__NewEnum(IInkExtendedProperties* This,IUnknown **_NewEnum) {
+    return This->lpVtbl->get__NewEnum(This,_NewEnum);
+}
+static FORCEINLINE HRESULT IInkExtendedProperties_Item(IInkExtendedProperties* This,VARIANT Identifier,IInkExtendedProperty **Item) {
+    return This->lpVtbl->Item(This,Identifier,Item);
+}
+static FORCEINLINE HRESULT IInkExtendedProperties_Add(IInkExtendedProperties* This,BSTR Guid,VARIANT Data,IInkExtendedProperty **InkExtendedProperty) {
+    return This->lpVtbl->Add(This,Guid,Data,InkExtendedProperty);
+}
+static FORCEINLINE HRESULT IInkExtendedProperties_Remove(IInkExtendedProperties* This,VARIANT Identifier) {
+    return This->lpVtbl->Remove(This,Identifier);
+}
+static FORCEINLINE HRESULT IInkExtendedProperties_Clear(IInkExtendedProperties* This) {
+    return This->lpVtbl->Clear(This);
+}
+static FORCEINLINE HRESULT IInkExtendedProperties_DoesPropertyExist(IInkExtendedProperties* This,BSTR Guid,VARIANT_BOOL *DoesPropertyExist) {
+    return This->lpVtbl->DoesPropertyExist(This,Guid,DoesPropertyExist);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInkExtendedProperties_get_Count_Proxy(
+    IInkExtendedProperties* This,
+    LONG *Count);
+void __RPC_STUB IInkExtendedProperties_get_Count_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkExtendedProperties_get__NewEnum_Proxy(
+    IInkExtendedProperties* This,
+    IUnknown **_NewEnum);
+void __RPC_STUB IInkExtendedProperties_get__NewEnum_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkExtendedProperties_Item_Proxy(
+    IInkExtendedProperties* This,
+    VARIANT Identifier,
+    IInkExtendedProperty **Item);
+void __RPC_STUB IInkExtendedProperties_Item_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkExtendedProperties_Add_Proxy(
+    IInkExtendedProperties* This,
+    BSTR Guid,
+    VARIANT Data,
+    IInkExtendedProperty **InkExtendedProperty);
+void __RPC_STUB IInkExtendedProperties_Add_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkExtendedProperties_Remove_Proxy(
+    IInkExtendedProperties* This,
+    VARIANT Identifier);
+void __RPC_STUB IInkExtendedProperties_Remove_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkExtendedProperties_Clear_Proxy(
+    IInkExtendedProperties* This);
+void __RPC_STUB IInkExtendedProperties_Clear_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkExtendedProperties_DoesPropertyExist_Proxy(
+    IInkExtendedProperties* This,
+    BSTR Guid,
+    VARIANT_BOOL *DoesPropertyExist);
+void __RPC_STUB IInkExtendedProperties_DoesPropertyExist_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInkExtendedProperties_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInkDrawingAttributes interface
+ */
+#ifndef __IInkDrawingAttributes_INTERFACE_DEFINED__
+#define __IInkDrawingAttributes_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInkDrawingAttributes, 0xbf519b75, 0x0a15, 0x4623, 0xad,0xc9, 0xc0,0x0d,0x43,0x6a,0x80,0x92);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("bf519b75-0a15-4623-adc9-c00d436a8092")
+IInkDrawingAttributes : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Color(
+        LONG *CurrentColor) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Color(
+        LONG NewColor) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Width(
+        float *CurrentWidth) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Width(
+        float NewWidth) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Height(
+        float *CurrentHeight) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Height(
+        float NewHeight) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_FitToCurve(
+        VARIANT_BOOL *Flag) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_FitToCurve(
+        VARIANT_BOOL Flag) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_IgnorePressure(
+        VARIANT_BOOL *Flag) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_IgnorePressure(
+        VARIANT_BOOL Flag) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_AntiAliased(
+        VARIANT_BOOL *Flag) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_AntiAliased(
+        VARIANT_BOOL Flag) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Transparency(
+        LONG *CurrentTransparency) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Transparency(
+        LONG NewTransparency) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_RasterOperation(
+        InkRasterOperation *CurrentRasterOperation) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_RasterOperation(
+        InkRasterOperation NewRasterOperation) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_PenTip(
+        InkPenTip *CurrentPenTip) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_PenTip(
+        InkPenTip NewPenTip) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ExtendedProperties(
+        IInkExtendedProperties **Properties) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IInkDrawingAttributes **DrawingAttributes) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IInkDrawingAttributes, 0xbf519b75, 0x0a15, 0x4623, 0xad,0xc9, 0xc0,0x0d,0x43,0x6a,0x80,0x92)
+#endif
+#else
+typedef struct IInkDrawingAttributesVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInkDrawingAttributes* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInkDrawingAttributes* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInkDrawingAttributes* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IInkDrawingAttributes* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IInkDrawingAttributes* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IInkDrawingAttributes* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IInkDrawingAttributes* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IInkDrawingAttributes methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Color)(
+        IInkDrawingAttributes* This,
+        LONG *CurrentColor);
+
+    HRESULT (STDMETHODCALLTYPE *put_Color)(
+        IInkDrawingAttributes* This,
+        LONG NewColor);
+
+    HRESULT (STDMETHODCALLTYPE *get_Width)(
+        IInkDrawingAttributes* This,
+        float *CurrentWidth);
+
+    HRESULT (STDMETHODCALLTYPE *put_Width)(
+        IInkDrawingAttributes* This,
+        float NewWidth);
+
+    HRESULT (STDMETHODCALLTYPE *get_Height)(
+        IInkDrawingAttributes* This,
+        float *CurrentHeight);
+
+    HRESULT (STDMETHODCALLTYPE *put_Height)(
+        IInkDrawingAttributes* This,
+        float NewHeight);
+
+    HRESULT (STDMETHODCALLTYPE *get_FitToCurve)(
+        IInkDrawingAttributes* This,
+        VARIANT_BOOL *Flag);
+
+    HRESULT (STDMETHODCALLTYPE *put_FitToCurve)(
+        IInkDrawingAttributes* This,
+        VARIANT_BOOL Flag);
+
+    HRESULT (STDMETHODCALLTYPE *get_IgnorePressure)(
+        IInkDrawingAttributes* This,
+        VARIANT_BOOL *Flag);
+
+    HRESULT (STDMETHODCALLTYPE *put_IgnorePressure)(
+        IInkDrawingAttributes* This,
+        VARIANT_BOOL Flag);
+
+    HRESULT (STDMETHODCALLTYPE *get_AntiAliased)(
+        IInkDrawingAttributes* This,
+        VARIANT_BOOL *Flag);
+
+    HRESULT (STDMETHODCALLTYPE *put_AntiAliased)(
+        IInkDrawingAttributes* This,
+        VARIANT_BOOL Flag);
+
+    HRESULT (STDMETHODCALLTYPE *get_Transparency)(
+        IInkDrawingAttributes* This,
+        LONG *CurrentTransparency);
+
+    HRESULT (STDMETHODCALLTYPE *put_Transparency)(
+        IInkDrawingAttributes* This,
+        LONG NewTransparency);
+
+    HRESULT (STDMETHODCALLTYPE *get_RasterOperation)(
+        IInkDrawingAttributes* This,
+        InkRasterOperation *CurrentRasterOperation);
+
+    HRESULT (STDMETHODCALLTYPE *put_RasterOperation)(
+        IInkDrawingAttributes* This,
+        InkRasterOperation NewRasterOperation);
+
+    HRESULT (STDMETHODCALLTYPE *get_PenTip)(
+        IInkDrawingAttributes* This,
+        InkPenTip *CurrentPenTip);
+
+    HRESULT (STDMETHODCALLTYPE *put_PenTip)(
+        IInkDrawingAttributes* This,
+        InkPenTip NewPenTip);
+
+    HRESULT (STDMETHODCALLTYPE *get_ExtendedProperties)(
+        IInkDrawingAttributes* This,
+        IInkExtendedProperties **Properties);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IInkDrawingAttributes* This,
+        IInkDrawingAttributes **DrawingAttributes);
+
+    END_INTERFACE
+} IInkDrawingAttributesVtbl;
+interface IInkDrawingAttributes {
+    CONST_VTBL IInkDrawingAttributesVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IInkDrawingAttributes_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInkDrawingAttributes_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInkDrawingAttributes_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IInkDrawingAttributes_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IInkDrawingAttributes_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IInkDrawingAttributes_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IInkDrawingAttributes_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IInkDrawingAttributes methods ***/
+#define IInkDrawingAttributes_get_Color(This,CurrentColor) (This)->lpVtbl->get_Color(This,CurrentColor)
+#define IInkDrawingAttributes_put_Color(This,NewColor) (This)->lpVtbl->put_Color(This,NewColor)
+#define IInkDrawingAttributes_get_Width(This,CurrentWidth) (This)->lpVtbl->get_Width(This,CurrentWidth)
+#define IInkDrawingAttributes_put_Width(This,NewWidth) (This)->lpVtbl->put_Width(This,NewWidth)
+#define IInkDrawingAttributes_get_Height(This,CurrentHeight) (This)->lpVtbl->get_Height(This,CurrentHeight)
+#define IInkDrawingAttributes_put_Height(This,NewHeight) (This)->lpVtbl->put_Height(This,NewHeight)
+#define IInkDrawingAttributes_get_FitToCurve(This,Flag) (This)->lpVtbl->get_FitToCurve(This,Flag)
+#define IInkDrawingAttributes_put_FitToCurve(This,Flag) (This)->lpVtbl->put_FitToCurve(This,Flag)
+#define IInkDrawingAttributes_get_IgnorePressure(This,Flag) (This)->lpVtbl->get_IgnorePressure(This,Flag)
+#define IInkDrawingAttributes_put_IgnorePressure(This,Flag) (This)->lpVtbl->put_IgnorePressure(This,Flag)
+#define IInkDrawingAttributes_get_AntiAliased(This,Flag) (This)->lpVtbl->get_AntiAliased(This,Flag)
+#define IInkDrawingAttributes_put_AntiAliased(This,Flag) (This)->lpVtbl->put_AntiAliased(This,Flag)
+#define IInkDrawingAttributes_get_Transparency(This,CurrentTransparency) (This)->lpVtbl->get_Transparency(This,CurrentTransparency)
+#define IInkDrawingAttributes_put_Transparency(This,NewTransparency) (This)->lpVtbl->put_Transparency(This,NewTransparency)
+#define IInkDrawingAttributes_get_RasterOperation(This,CurrentRasterOperation) (This)->lpVtbl->get_RasterOperation(This,CurrentRasterOperation)
+#define IInkDrawingAttributes_put_RasterOperation(This,NewRasterOperation) (This)->lpVtbl->put_RasterOperation(This,NewRasterOperation)
+#define IInkDrawingAttributes_get_PenTip(This,CurrentPenTip) (This)->lpVtbl->get_PenTip(This,CurrentPenTip)
+#define IInkDrawingAttributes_put_PenTip(This,NewPenTip) (This)->lpVtbl->put_PenTip(This,NewPenTip)
+#define IInkDrawingAttributes_get_ExtendedProperties(This,Properties) (This)->lpVtbl->get_ExtendedProperties(This,Properties)
+#define IInkDrawingAttributes_Clone(This,DrawingAttributes) (This)->lpVtbl->Clone(This,DrawingAttributes)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IInkDrawingAttributes_QueryInterface(IInkDrawingAttributes* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IInkDrawingAttributes_AddRef(IInkDrawingAttributes* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IInkDrawingAttributes_Release(IInkDrawingAttributes* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IInkDrawingAttributes_GetTypeInfoCount(IInkDrawingAttributes* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IInkDrawingAttributes_GetTypeInfo(IInkDrawingAttributes* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IInkDrawingAttributes_GetIDsOfNames(IInkDrawingAttributes* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IInkDrawingAttributes_Invoke(IInkDrawingAttributes* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IInkDrawingAttributes methods ***/
+static FORCEINLINE HRESULT IInkDrawingAttributes_get_Color(IInkDrawingAttributes* This,LONG *CurrentColor) {
+    return This->lpVtbl->get_Color(This,CurrentColor);
+}
+static FORCEINLINE HRESULT IInkDrawingAttributes_put_Color(IInkDrawingAttributes* This,LONG NewColor) {
+    return This->lpVtbl->put_Color(This,NewColor);
+}
+static FORCEINLINE HRESULT IInkDrawingAttributes_get_Width(IInkDrawingAttributes* This,float *CurrentWidth) {
+    return This->lpVtbl->get_Width(This,CurrentWidth);
+}
+static FORCEINLINE HRESULT IInkDrawingAttributes_put_Width(IInkDrawingAttributes* This,float NewWidth) {
+    return This->lpVtbl->put_Width(This,NewWidth);
+}
+static FORCEINLINE HRESULT IInkDrawingAttributes_get_Height(IInkDrawingAttributes* This,float *CurrentHeight) {
+    return This->lpVtbl->get_Height(This,CurrentHeight);
+}
+static FORCEINLINE HRESULT IInkDrawingAttributes_put_Height(IInkDrawingAttributes* This,float NewHeight) {
+    return This->lpVtbl->put_Height(This,NewHeight);
+}
+static FORCEINLINE HRESULT IInkDrawingAttributes_get_FitToCurve(IInkDrawingAttributes* This,VARIANT_BOOL *Flag) {
+    return This->lpVtbl->get_FitToCurve(This,Flag);
+}
+static FORCEINLINE HRESULT IInkDrawingAttributes_put_FitToCurve(IInkDrawingAttributes* This,VARIANT_BOOL Flag) {
+    return This->lpVtbl->put_FitToCurve(This,Flag);
+}
+static FORCEINLINE HRESULT IInkDrawingAttributes_get_IgnorePressure(IInkDrawingAttributes* This,VARIANT_BOOL *Flag) {
+    return This->lpVtbl->get_IgnorePressure(This,Flag);
+}
+static FORCEINLINE HRESULT IInkDrawingAttributes_put_IgnorePressure(IInkDrawingAttributes* This,VARIANT_BOOL Flag) {
+    return This->lpVtbl->put_IgnorePressure(This,Flag);
+}
+static FORCEINLINE HRESULT IInkDrawingAttributes_get_AntiAliased(IInkDrawingAttributes* This,VARIANT_BOOL *Flag) {
+    return This->lpVtbl->get_AntiAliased(This,Flag);
+}
+static FORCEINLINE HRESULT IInkDrawingAttributes_put_AntiAliased(IInkDrawingAttributes* This,VARIANT_BOOL Flag) {
+    return This->lpVtbl->put_AntiAliased(This,Flag);
+}
+static FORCEINLINE HRESULT IInkDrawingAttributes_get_Transparency(IInkDrawingAttributes* This,LONG *CurrentTransparency) {
+    return This->lpVtbl->get_Transparency(This,CurrentTransparency);
+}
+static FORCEINLINE HRESULT IInkDrawingAttributes_put_Transparency(IInkDrawingAttributes* This,LONG NewTransparency) {
+    return This->lpVtbl->put_Transparency(This,NewTransparency);
+}
+static FORCEINLINE HRESULT IInkDrawingAttributes_get_RasterOperation(IInkDrawingAttributes* This,InkRasterOperation *CurrentRasterOperation) {
+    return This->lpVtbl->get_RasterOperation(This,CurrentRasterOperation);
+}
+static FORCEINLINE HRESULT IInkDrawingAttributes_put_RasterOperation(IInkDrawingAttributes* This,InkRasterOperation NewRasterOperation) {
+    return This->lpVtbl->put_RasterOperation(This,NewRasterOperation);
+}
+static FORCEINLINE HRESULT IInkDrawingAttributes_get_PenTip(IInkDrawingAttributes* This,InkPenTip *CurrentPenTip) {
+    return This->lpVtbl->get_PenTip(This,CurrentPenTip);
+}
+static FORCEINLINE HRESULT IInkDrawingAttributes_put_PenTip(IInkDrawingAttributes* This,InkPenTip NewPenTip) {
+    return This->lpVtbl->put_PenTip(This,NewPenTip);
+}
+static FORCEINLINE HRESULT IInkDrawingAttributes_get_ExtendedProperties(IInkDrawingAttributes* This,IInkExtendedProperties **Properties) {
+    return This->lpVtbl->get_ExtendedProperties(This,Properties);
+}
+static FORCEINLINE HRESULT IInkDrawingAttributes_Clone(IInkDrawingAttributes* This,IInkDrawingAttributes **DrawingAttributes) {
+    return This->lpVtbl->Clone(This,DrawingAttributes);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInkDrawingAttributes_get_Color_Proxy(
+    IInkDrawingAttributes* This,
+    LONG *CurrentColor);
+void __RPC_STUB IInkDrawingAttributes_get_Color_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDrawingAttributes_put_Color_Proxy(
+    IInkDrawingAttributes* This,
+    LONG NewColor);
+void __RPC_STUB IInkDrawingAttributes_put_Color_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDrawingAttributes_get_Width_Proxy(
+    IInkDrawingAttributes* This,
+    float *CurrentWidth);
+void __RPC_STUB IInkDrawingAttributes_get_Width_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDrawingAttributes_put_Width_Proxy(
+    IInkDrawingAttributes* This,
+    float NewWidth);
+void __RPC_STUB IInkDrawingAttributes_put_Width_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDrawingAttributes_get_Height_Proxy(
+    IInkDrawingAttributes* This,
+    float *CurrentHeight);
+void __RPC_STUB IInkDrawingAttributes_get_Height_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDrawingAttributes_put_Height_Proxy(
+    IInkDrawingAttributes* This,
+    float NewHeight);
+void __RPC_STUB IInkDrawingAttributes_put_Height_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDrawingAttributes_get_FitToCurve_Proxy(
+    IInkDrawingAttributes* This,
+    VARIANT_BOOL *Flag);
+void __RPC_STUB IInkDrawingAttributes_get_FitToCurve_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDrawingAttributes_put_FitToCurve_Proxy(
+    IInkDrawingAttributes* This,
+    VARIANT_BOOL Flag);
+void __RPC_STUB IInkDrawingAttributes_put_FitToCurve_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDrawingAttributes_get_IgnorePressure_Proxy(
+    IInkDrawingAttributes* This,
+    VARIANT_BOOL *Flag);
+void __RPC_STUB IInkDrawingAttributes_get_IgnorePressure_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDrawingAttributes_put_IgnorePressure_Proxy(
+    IInkDrawingAttributes* This,
+    VARIANT_BOOL Flag);
+void __RPC_STUB IInkDrawingAttributes_put_IgnorePressure_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDrawingAttributes_get_AntiAliased_Proxy(
+    IInkDrawingAttributes* This,
+    VARIANT_BOOL *Flag);
+void __RPC_STUB IInkDrawingAttributes_get_AntiAliased_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDrawingAttributes_put_AntiAliased_Proxy(
+    IInkDrawingAttributes* This,
+    VARIANT_BOOL Flag);
+void __RPC_STUB IInkDrawingAttributes_put_AntiAliased_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDrawingAttributes_get_Transparency_Proxy(
+    IInkDrawingAttributes* This,
+    LONG *CurrentTransparency);
+void __RPC_STUB IInkDrawingAttributes_get_Transparency_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDrawingAttributes_put_Transparency_Proxy(
+    IInkDrawingAttributes* This,
+    LONG NewTransparency);
+void __RPC_STUB IInkDrawingAttributes_put_Transparency_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDrawingAttributes_get_RasterOperation_Proxy(
+    IInkDrawingAttributes* This,
+    InkRasterOperation *CurrentRasterOperation);
+void __RPC_STUB IInkDrawingAttributes_get_RasterOperation_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDrawingAttributes_put_RasterOperation_Proxy(
+    IInkDrawingAttributes* This,
+    InkRasterOperation NewRasterOperation);
+void __RPC_STUB IInkDrawingAttributes_put_RasterOperation_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDrawingAttributes_get_PenTip_Proxy(
+    IInkDrawingAttributes* This,
+    InkPenTip *CurrentPenTip);
+void __RPC_STUB IInkDrawingAttributes_get_PenTip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDrawingAttributes_put_PenTip_Proxy(
+    IInkDrawingAttributes* This,
+    InkPenTip NewPenTip);
+void __RPC_STUB IInkDrawingAttributes_put_PenTip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDrawingAttributes_get_ExtendedProperties_Proxy(
+    IInkDrawingAttributes* This,
+    IInkExtendedProperties **Properties);
+void __RPC_STUB IInkDrawingAttributes_get_ExtendedProperties_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDrawingAttributes_Clone_Proxy(
+    IInkDrawingAttributes* This,
+    IInkDrawingAttributes **DrawingAttributes);
+void __RPC_STUB IInkDrawingAttributes_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInkDrawingAttributes_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInkRectangle interface
+ */
+#ifndef __IInkRectangle_INTERFACE_DEFINED__
+#define __IInkRectangle_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInkRectangle, 0x9794ff82, 0x6071, 0x4717, 0x8a,0x8b, 0x6a,0xc7,0xc6,0x4a,0x68,0x6e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("9794ff82-6071-4717-8a8b-6ac7c64a686e")
+IInkRectangle : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Top(
+        LONG *Units) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Top(
+        LONG Units) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Left(
+        LONG *Units) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Left(
+        LONG Units) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Bottom(
+        LONG *Units) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Bottom(
+        LONG Units) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Right(
+        LONG *Units) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Right(
+        LONG Units) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Data(
+        RECT *Rect) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Data(
+        RECT Rect) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRectangle(
+        LONG *Top,
+        LONG *Left,
+        LONG *Bottom,
+        LONG *Right) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetRectangle(
+        LONG Top,
+        LONG Left,
+        LONG Bottom,
+        LONG Right) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IInkRectangle, 0x9794ff82, 0x6071, 0x4717, 0x8a,0x8b, 0x6a,0xc7,0xc6,0x4a,0x68,0x6e)
+#endif
+#else
+typedef struct IInkRectangleVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInkRectangle* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInkRectangle* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInkRectangle* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IInkRectangle* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IInkRectangle* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IInkRectangle* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IInkRectangle* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IInkRectangle methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Top)(
+        IInkRectangle* This,
+        LONG *Units);
+
+    HRESULT (STDMETHODCALLTYPE *put_Top)(
+        IInkRectangle* This,
+        LONG Units);
+
+    HRESULT (STDMETHODCALLTYPE *get_Left)(
+        IInkRectangle* This,
+        LONG *Units);
+
+    HRESULT (STDMETHODCALLTYPE *put_Left)(
+        IInkRectangle* This,
+        LONG Units);
+
+    HRESULT (STDMETHODCALLTYPE *get_Bottom)(
+        IInkRectangle* This,
+        LONG *Units);
+
+    HRESULT (STDMETHODCALLTYPE *put_Bottom)(
+        IInkRectangle* This,
+        LONG Units);
+
+    HRESULT (STDMETHODCALLTYPE *get_Right)(
+        IInkRectangle* This,
+        LONG *Units);
+
+    HRESULT (STDMETHODCALLTYPE *put_Right)(
+        IInkRectangle* This,
+        LONG Units);
+
+    HRESULT (STDMETHODCALLTYPE *get_Data)(
+        IInkRectangle* This,
+        RECT *Rect);
+
+    HRESULT (STDMETHODCALLTYPE *put_Data)(
+        IInkRectangle* This,
+        RECT Rect);
+
+    HRESULT (STDMETHODCALLTYPE *GetRectangle)(
+        IInkRectangle* This,
+        LONG *Top,
+        LONG *Left,
+        LONG *Bottom,
+        LONG *Right);
+
+    HRESULT (STDMETHODCALLTYPE *SetRectangle)(
+        IInkRectangle* This,
+        LONG Top,
+        LONG Left,
+        LONG Bottom,
+        LONG Right);
+
+    END_INTERFACE
+} IInkRectangleVtbl;
+interface IInkRectangle {
+    CONST_VTBL IInkRectangleVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IInkRectangle_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInkRectangle_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInkRectangle_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IInkRectangle_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IInkRectangle_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IInkRectangle_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IInkRectangle_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IInkRectangle methods ***/
+#define IInkRectangle_get_Top(This,Units) (This)->lpVtbl->get_Top(This,Units)
+#define IInkRectangle_put_Top(This,Units) (This)->lpVtbl->put_Top(This,Units)
+#define IInkRectangle_get_Left(This,Units) (This)->lpVtbl->get_Left(This,Units)
+#define IInkRectangle_put_Left(This,Units) (This)->lpVtbl->put_Left(This,Units)
+#define IInkRectangle_get_Bottom(This,Units) (This)->lpVtbl->get_Bottom(This,Units)
+#define IInkRectangle_put_Bottom(This,Units) (This)->lpVtbl->put_Bottom(This,Units)
+#define IInkRectangle_get_Right(This,Units) (This)->lpVtbl->get_Right(This,Units)
+#define IInkRectangle_put_Right(This,Units) (This)->lpVtbl->put_Right(This,Units)
+#define IInkRectangle_get_Data(This,Rect) (This)->lpVtbl->get_Data(This,Rect)
+#define IInkRectangle_put_Data(This,Rect) (This)->lpVtbl->put_Data(This,Rect)
+#define IInkRectangle_GetRectangle(This,Top,Left,Bottom,Right) (This)->lpVtbl->GetRectangle(This,Top,Left,Bottom,Right)
+#define IInkRectangle_SetRectangle(This,Top,Left,Bottom,Right) (This)->lpVtbl->SetRectangle(This,Top,Left,Bottom,Right)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IInkRectangle_QueryInterface(IInkRectangle* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IInkRectangle_AddRef(IInkRectangle* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IInkRectangle_Release(IInkRectangle* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IInkRectangle_GetTypeInfoCount(IInkRectangle* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IInkRectangle_GetTypeInfo(IInkRectangle* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IInkRectangle_GetIDsOfNames(IInkRectangle* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IInkRectangle_Invoke(IInkRectangle* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IInkRectangle methods ***/
+static FORCEINLINE HRESULT IInkRectangle_get_Top(IInkRectangle* This,LONG *Units) {
+    return This->lpVtbl->get_Top(This,Units);
+}
+static FORCEINLINE HRESULT IInkRectangle_put_Top(IInkRectangle* This,LONG Units) {
+    return This->lpVtbl->put_Top(This,Units);
+}
+static FORCEINLINE HRESULT IInkRectangle_get_Left(IInkRectangle* This,LONG *Units) {
+    return This->lpVtbl->get_Left(This,Units);
+}
+static FORCEINLINE HRESULT IInkRectangle_put_Left(IInkRectangle* This,LONG Units) {
+    return This->lpVtbl->put_Left(This,Units);
+}
+static FORCEINLINE HRESULT IInkRectangle_get_Bottom(IInkRectangle* This,LONG *Units) {
+    return This->lpVtbl->get_Bottom(This,Units);
+}
+static FORCEINLINE HRESULT IInkRectangle_put_Bottom(IInkRectangle* This,LONG Units) {
+    return This->lpVtbl->put_Bottom(This,Units);
+}
+static FORCEINLINE HRESULT IInkRectangle_get_Right(IInkRectangle* This,LONG *Units) {
+    return This->lpVtbl->get_Right(This,Units);
+}
+static FORCEINLINE HRESULT IInkRectangle_put_Right(IInkRectangle* This,LONG Units) {
+    return This->lpVtbl->put_Right(This,Units);
+}
+static FORCEINLINE HRESULT IInkRectangle_get_Data(IInkRectangle* This,RECT *Rect) {
+    return This->lpVtbl->get_Data(This,Rect);
+}
+static FORCEINLINE HRESULT IInkRectangle_put_Data(IInkRectangle* This,RECT Rect) {
+    return This->lpVtbl->put_Data(This,Rect);
+}
+static FORCEINLINE HRESULT IInkRectangle_GetRectangle(IInkRectangle* This,LONG *Top,LONG *Left,LONG *Bottom,LONG *Right) {
+    return This->lpVtbl->GetRectangle(This,Top,Left,Bottom,Right);
+}
+static FORCEINLINE HRESULT IInkRectangle_SetRectangle(IInkRectangle* This,LONG Top,LONG Left,LONG Bottom,LONG Right) {
+    return This->lpVtbl->SetRectangle(This,Top,Left,Bottom,Right);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInkRectangle_get_Top_Proxy(
+    IInkRectangle* This,
+    LONG *Units);
+void __RPC_STUB IInkRectangle_get_Top_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRectangle_put_Top_Proxy(
+    IInkRectangle* This,
+    LONG Units);
+void __RPC_STUB IInkRectangle_put_Top_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRectangle_get_Left_Proxy(
+    IInkRectangle* This,
+    LONG *Units);
+void __RPC_STUB IInkRectangle_get_Left_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRectangle_put_Left_Proxy(
+    IInkRectangle* This,
+    LONG Units);
+void __RPC_STUB IInkRectangle_put_Left_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRectangle_get_Bottom_Proxy(
+    IInkRectangle* This,
+    LONG *Units);
+void __RPC_STUB IInkRectangle_get_Bottom_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRectangle_put_Bottom_Proxy(
+    IInkRectangle* This,
+    LONG Units);
+void __RPC_STUB IInkRectangle_put_Bottom_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRectangle_get_Right_Proxy(
+    IInkRectangle* This,
+    LONG *Units);
+void __RPC_STUB IInkRectangle_get_Right_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRectangle_put_Right_Proxy(
+    IInkRectangle* This,
+    LONG Units);
+void __RPC_STUB IInkRectangle_put_Right_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRectangle_get_Data_Proxy(
+    IInkRectangle* This,
+    RECT *Rect);
+void __RPC_STUB IInkRectangle_get_Data_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRectangle_put_Data_Proxy(
+    IInkRectangle* This,
+    RECT Rect);
+void __RPC_STUB IInkRectangle_put_Data_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRectangle_GetRectangle_Proxy(
+    IInkRectangle* This,
+    LONG *Top,
+    LONG *Left,
+    LONG *Bottom,
+    LONG *Right);
+void __RPC_STUB IInkRectangle_GetRectangle_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRectangle_SetRectangle_Proxy(
+    IInkRectangle* This,
+    LONG Top,
+    LONG Left,
+    LONG Bottom,
+    LONG Right);
+void __RPC_STUB IInkRectangle_SetRectangle_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInkRectangle_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInkTablet interface
+ */
+#ifndef __IInkTablet_INTERFACE_DEFINED__
+#define __IInkTablet_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInkTablet, 0x2de25eaa, 0x6ef8, 0x42d5, 0xae,0xe9, 0x18,0x5b,0xc8,0x1b,0x91,0x2d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("2de25eaa-6ef8-42d5-aee9-185bc81b912d")
+IInkTablet : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Name(
+        BSTR *Name) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_PlugAndPlayId(
+        BSTR *Id) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_MaximumInputRectangle(
+        IInkRectangle **Rectangle) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_HardwareCapabilities(
+        TabletHardwareCapabilities *Capabilities) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsPacketPropertySupported(
+        BSTR packetPropertyName,
+        VARIANT_BOOL *Supported) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPropertyMetrics(
+        BSTR propertyName,
+        LONG *Minimum,
+        LONG *Maximum,
+        TabletPropertyMetricUnit *Units,
+        float *Resolution) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IInkTablet, 0x2de25eaa, 0x6ef8, 0x42d5, 0xae,0xe9, 0x18,0x5b,0xc8,0x1b,0x91,0x2d)
+#endif
+#else
+typedef struct IInkTabletVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInkTablet* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInkTablet* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInkTablet* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IInkTablet* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IInkTablet* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IInkTablet* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IInkTablet* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IInkTablet methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Name)(
+        IInkTablet* This,
+        BSTR *Name);
+
+    HRESULT (STDMETHODCALLTYPE *get_PlugAndPlayId)(
+        IInkTablet* This,
+        BSTR *Id);
+
+    HRESULT (STDMETHODCALLTYPE *get_MaximumInputRectangle)(
+        IInkTablet* This,
+        IInkRectangle **Rectangle);
+
+    HRESULT (STDMETHODCALLTYPE *get_HardwareCapabilities)(
+        IInkTablet* This,
+        TabletHardwareCapabilities *Capabilities);
+
+    HRESULT (STDMETHODCALLTYPE *IsPacketPropertySupported)(
+        IInkTablet* This,
+        BSTR packetPropertyName,
+        VARIANT_BOOL *Supported);
+
+    HRESULT (STDMETHODCALLTYPE *GetPropertyMetrics)(
+        IInkTablet* This,
+        BSTR propertyName,
+        LONG *Minimum,
+        LONG *Maximum,
+        TabletPropertyMetricUnit *Units,
+        float *Resolution);
+
+    END_INTERFACE
+} IInkTabletVtbl;
+interface IInkTablet {
+    CONST_VTBL IInkTabletVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IInkTablet_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInkTablet_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInkTablet_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IInkTablet_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IInkTablet_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IInkTablet_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IInkTablet_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IInkTablet methods ***/
+#define IInkTablet_get_Name(This,Name) (This)->lpVtbl->get_Name(This,Name)
+#define IInkTablet_get_PlugAndPlayId(This,Id) (This)->lpVtbl->get_PlugAndPlayId(This,Id)
+#define IInkTablet_get_MaximumInputRectangle(This,Rectangle) (This)->lpVtbl->get_MaximumInputRectangle(This,Rectangle)
+#define IInkTablet_get_HardwareCapabilities(This,Capabilities) (This)->lpVtbl->get_HardwareCapabilities(This,Capabilities)
+#define IInkTablet_IsPacketPropertySupported(This,packetPropertyName,Supported) (This)->lpVtbl->IsPacketPropertySupported(This,packetPropertyName,Supported)
+#define IInkTablet_GetPropertyMetrics(This,propertyName,Minimum,Maximum,Units,Resolution) (This)->lpVtbl->GetPropertyMetrics(This,propertyName,Minimum,Maximum,Units,Resolution)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IInkTablet_QueryInterface(IInkTablet* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IInkTablet_AddRef(IInkTablet* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IInkTablet_Release(IInkTablet* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IInkTablet_GetTypeInfoCount(IInkTablet* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IInkTablet_GetTypeInfo(IInkTablet* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IInkTablet_GetIDsOfNames(IInkTablet* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IInkTablet_Invoke(IInkTablet* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IInkTablet methods ***/
+static FORCEINLINE HRESULT IInkTablet_get_Name(IInkTablet* This,BSTR *Name) {
+    return This->lpVtbl->get_Name(This,Name);
+}
+static FORCEINLINE HRESULT IInkTablet_get_PlugAndPlayId(IInkTablet* This,BSTR *Id) {
+    return This->lpVtbl->get_PlugAndPlayId(This,Id);
+}
+static FORCEINLINE HRESULT IInkTablet_get_MaximumInputRectangle(IInkTablet* This,IInkRectangle **Rectangle) {
+    return This->lpVtbl->get_MaximumInputRectangle(This,Rectangle);
+}
+static FORCEINLINE HRESULT IInkTablet_get_HardwareCapabilities(IInkTablet* This,TabletHardwareCapabilities *Capabilities) {
+    return This->lpVtbl->get_HardwareCapabilities(This,Capabilities);
+}
+static FORCEINLINE HRESULT IInkTablet_IsPacketPropertySupported(IInkTablet* This,BSTR packetPropertyName,VARIANT_BOOL *Supported) {
+    return This->lpVtbl->IsPacketPropertySupported(This,packetPropertyName,Supported);
+}
+static FORCEINLINE HRESULT IInkTablet_GetPropertyMetrics(IInkTablet* This,BSTR propertyName,LONG *Minimum,LONG *Maximum,TabletPropertyMetricUnit *Units,float *Resolution) {
+    return This->lpVtbl->GetPropertyMetrics(This,propertyName,Minimum,Maximum,Units,Resolution);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInkTablet_get_Name_Proxy(
+    IInkTablet* This,
+    BSTR *Name);
+void __RPC_STUB IInkTablet_get_Name_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkTablet_get_PlugAndPlayId_Proxy(
+    IInkTablet* This,
+    BSTR *Id);
+void __RPC_STUB IInkTablet_get_PlugAndPlayId_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkTablet_get_MaximumInputRectangle_Proxy(
+    IInkTablet* This,
+    IInkRectangle **Rectangle);
+void __RPC_STUB IInkTablet_get_MaximumInputRectangle_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkTablet_get_HardwareCapabilities_Proxy(
+    IInkTablet* This,
+    TabletHardwareCapabilities *Capabilities);
+void __RPC_STUB IInkTablet_get_HardwareCapabilities_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkTablet_IsPacketPropertySupported_Proxy(
+    IInkTablet* This,
+    BSTR packetPropertyName,
+    VARIANT_BOOL *Supported);
+void __RPC_STUB IInkTablet_IsPacketPropertySupported_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkTablet_GetPropertyMetrics_Proxy(
+    IInkTablet* This,
+    BSTR propertyName,
+    LONG *Minimum,
+    LONG *Maximum,
+    TabletPropertyMetricUnit *Units,
+    float *Resolution);
+void __RPC_STUB IInkTablet_GetPropertyMetrics_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInkTablet_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInkCursorButton interface
+ */
+#ifndef __IInkCursorButton_INTERFACE_DEFINED__
+#define __IInkCursorButton_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInkCursorButton, 0x85ef9417, 0x1d59, 0x49b2, 0xa1,0x3c, 0x70,0x2c,0x85,0x43,0x08,0x94);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("85ef9417-1d59-49b2-a13c-702c85430894")
+IInkCursorButton : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Name(
+        BSTR *Name) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Id(
+        BSTR *Id) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_State(
+        InkCursorButtonState *CurrentState) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IInkCursorButton, 0x85ef9417, 0x1d59, 0x49b2, 0xa1,0x3c, 0x70,0x2c,0x85,0x43,0x08,0x94)
+#endif
+#else
+typedef struct IInkCursorButtonVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInkCursorButton* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInkCursorButton* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInkCursorButton* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IInkCursorButton* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IInkCursorButton* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IInkCursorButton* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IInkCursorButton* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IInkCursorButton methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Name)(
+        IInkCursorButton* This,
+        BSTR *Name);
+
+    HRESULT (STDMETHODCALLTYPE *get_Id)(
+        IInkCursorButton* This,
+        BSTR *Id);
+
+    HRESULT (STDMETHODCALLTYPE *get_State)(
+        IInkCursorButton* This,
+        InkCursorButtonState *CurrentState);
+
+    END_INTERFACE
+} IInkCursorButtonVtbl;
+interface IInkCursorButton {
+    CONST_VTBL IInkCursorButtonVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IInkCursorButton_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInkCursorButton_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInkCursorButton_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IInkCursorButton_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IInkCursorButton_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IInkCursorButton_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IInkCursorButton_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IInkCursorButton methods ***/
+#define IInkCursorButton_get_Name(This,Name) (This)->lpVtbl->get_Name(This,Name)
+#define IInkCursorButton_get_Id(This,Id) (This)->lpVtbl->get_Id(This,Id)
+#define IInkCursorButton_get_State(This,CurrentState) (This)->lpVtbl->get_State(This,CurrentState)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IInkCursorButton_QueryInterface(IInkCursorButton* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IInkCursorButton_AddRef(IInkCursorButton* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IInkCursorButton_Release(IInkCursorButton* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IInkCursorButton_GetTypeInfoCount(IInkCursorButton* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IInkCursorButton_GetTypeInfo(IInkCursorButton* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IInkCursorButton_GetIDsOfNames(IInkCursorButton* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IInkCursorButton_Invoke(IInkCursorButton* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IInkCursorButton methods ***/
+static FORCEINLINE HRESULT IInkCursorButton_get_Name(IInkCursorButton* This,BSTR *Name) {
+    return This->lpVtbl->get_Name(This,Name);
+}
+static FORCEINLINE HRESULT IInkCursorButton_get_Id(IInkCursorButton* This,BSTR *Id) {
+    return This->lpVtbl->get_Id(This,Id);
+}
+static FORCEINLINE HRESULT IInkCursorButton_get_State(IInkCursorButton* This,InkCursorButtonState *CurrentState) {
+    return This->lpVtbl->get_State(This,CurrentState);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInkCursorButton_get_Name_Proxy(
+    IInkCursorButton* This,
+    BSTR *Name);
+void __RPC_STUB IInkCursorButton_get_Name_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCursorButton_get_Id_Proxy(
+    IInkCursorButton* This,
+    BSTR *Id);
+void __RPC_STUB IInkCursorButton_get_Id_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCursorButton_get_State_Proxy(
+    IInkCursorButton* This,
+    InkCursorButtonState *CurrentState);
+void __RPC_STUB IInkCursorButton_get_State_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInkCursorButton_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInkCursorButtons interface
+ */
+#ifndef __IInkCursorButtons_INTERFACE_DEFINED__
+#define __IInkCursorButtons_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInkCursorButtons, 0x3671cc40, 0xb624, 0x4671, 0x9f,0xa0, 0xdb,0x11,0x9d,0x95,0x2d,0x54);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("3671cc40-b624-4671-9fa0-db119d952d54")
+IInkCursorButtons : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Count(
+        LONG *Count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
+        IUnknown **_NewEnum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Item(
+        VARIANT Identifier,
+        IInkCursorButton **Button) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IInkCursorButtons, 0x3671cc40, 0xb624, 0x4671, 0x9f,0xa0, 0xdb,0x11,0x9d,0x95,0x2d,0x54)
+#endif
+#else
+typedef struct IInkCursorButtonsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInkCursorButtons* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInkCursorButtons* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInkCursorButtons* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IInkCursorButtons* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IInkCursorButtons* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IInkCursorButtons* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IInkCursorButtons* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IInkCursorButtons methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Count)(
+        IInkCursorButtons* This,
+        LONG *Count);
+
+    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
+        IInkCursorButtons* This,
+        IUnknown **_NewEnum);
+
+    HRESULT (STDMETHODCALLTYPE *Item)(
+        IInkCursorButtons* This,
+        VARIANT Identifier,
+        IInkCursorButton **Button);
+
+    END_INTERFACE
+} IInkCursorButtonsVtbl;
+interface IInkCursorButtons {
+    CONST_VTBL IInkCursorButtonsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IInkCursorButtons_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInkCursorButtons_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInkCursorButtons_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IInkCursorButtons_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IInkCursorButtons_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IInkCursorButtons_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IInkCursorButtons_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IInkCursorButtons methods ***/
+#define IInkCursorButtons_get_Count(This,Count) (This)->lpVtbl->get_Count(This,Count)
+#define IInkCursorButtons_get__NewEnum(This,_NewEnum) (This)->lpVtbl->get__NewEnum(This,_NewEnum)
+#define IInkCursorButtons_Item(This,Identifier,Button) (This)->lpVtbl->Item(This,Identifier,Button)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IInkCursorButtons_QueryInterface(IInkCursorButtons* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IInkCursorButtons_AddRef(IInkCursorButtons* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IInkCursorButtons_Release(IInkCursorButtons* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IInkCursorButtons_GetTypeInfoCount(IInkCursorButtons* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IInkCursorButtons_GetTypeInfo(IInkCursorButtons* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IInkCursorButtons_GetIDsOfNames(IInkCursorButtons* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IInkCursorButtons_Invoke(IInkCursorButtons* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IInkCursorButtons methods ***/
+static FORCEINLINE HRESULT IInkCursorButtons_get_Count(IInkCursorButtons* This,LONG *Count) {
+    return This->lpVtbl->get_Count(This,Count);
+}
+static FORCEINLINE HRESULT IInkCursorButtons_get__NewEnum(IInkCursorButtons* This,IUnknown **_NewEnum) {
+    return This->lpVtbl->get__NewEnum(This,_NewEnum);
+}
+static FORCEINLINE HRESULT IInkCursorButtons_Item(IInkCursorButtons* This,VARIANT Identifier,IInkCursorButton **Button) {
+    return This->lpVtbl->Item(This,Identifier,Button);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInkCursorButtons_get_Count_Proxy(
+    IInkCursorButtons* This,
+    LONG *Count);
+void __RPC_STUB IInkCursorButtons_get_Count_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCursorButtons_get__NewEnum_Proxy(
+    IInkCursorButtons* This,
+    IUnknown **_NewEnum);
+void __RPC_STUB IInkCursorButtons_get__NewEnum_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCursorButtons_Item_Proxy(
+    IInkCursorButtons* This,
+    VARIANT Identifier,
+    IInkCursorButton **Button);
+void __RPC_STUB IInkCursorButtons_Item_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInkCursorButtons_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInkCursor interface
+ */
+#ifndef __IInkCursor_INTERFACE_DEFINED__
+#define __IInkCursor_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInkCursor, 0xad30c630, 0x40c5, 0x4350, 0x84,0x05, 0x9c,0x71,0x01,0x2f,0xc5,0x58);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("ad30c630-40c5-4350-8405-9c71012fc558")
+IInkCursor : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Name(
+        BSTR *Name) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Id(
+        LONG *Id) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Inverted(
+        VARIANT_BOOL *Status) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_DrawingAttributes(
+        IInkDrawingAttributes **Attributes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE putref_DrawingAttributes(
+        IInkDrawingAttributes *Attributes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Tablet(
+        IInkTablet **Tablet) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Buttons(
+        IInkCursorButtons **Buttons) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IInkCursor, 0xad30c630, 0x40c5, 0x4350, 0x84,0x05, 0x9c,0x71,0x01,0x2f,0xc5,0x58)
+#endif
+#else
+typedef struct IInkCursorVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInkCursor* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInkCursor* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInkCursor* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IInkCursor* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IInkCursor* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IInkCursor* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IInkCursor* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IInkCursor methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Name)(
+        IInkCursor* This,
+        BSTR *Name);
+
+    HRESULT (STDMETHODCALLTYPE *get_Id)(
+        IInkCursor* This,
+        LONG *Id);
+
+    HRESULT (STDMETHODCALLTYPE *get_Inverted)(
+        IInkCursor* This,
+        VARIANT_BOOL *Status);
+
+    HRESULT (STDMETHODCALLTYPE *get_DrawingAttributes)(
+        IInkCursor* This,
+        IInkDrawingAttributes **Attributes);
+
+    HRESULT (STDMETHODCALLTYPE *putref_DrawingAttributes)(
+        IInkCursor* This,
+        IInkDrawingAttributes *Attributes);
+
+    HRESULT (STDMETHODCALLTYPE *get_Tablet)(
+        IInkCursor* This,
+        IInkTablet **Tablet);
+
+    HRESULT (STDMETHODCALLTYPE *get_Buttons)(
+        IInkCursor* This,
+        IInkCursorButtons **Buttons);
+
+    END_INTERFACE
+} IInkCursorVtbl;
+interface IInkCursor {
+    CONST_VTBL IInkCursorVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IInkCursor_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInkCursor_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInkCursor_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IInkCursor_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IInkCursor_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IInkCursor_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IInkCursor_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IInkCursor methods ***/
+#define IInkCursor_get_Name(This,Name) (This)->lpVtbl->get_Name(This,Name)
+#define IInkCursor_get_Id(This,Id) (This)->lpVtbl->get_Id(This,Id)
+#define IInkCursor_get_Inverted(This,Status) (This)->lpVtbl->get_Inverted(This,Status)
+#define IInkCursor_get_DrawingAttributes(This,Attributes) (This)->lpVtbl->get_DrawingAttributes(This,Attributes)
+#define IInkCursor_putref_DrawingAttributes(This,Attributes) (This)->lpVtbl->putref_DrawingAttributes(This,Attributes)
+#define IInkCursor_get_Tablet(This,Tablet) (This)->lpVtbl->get_Tablet(This,Tablet)
+#define IInkCursor_get_Buttons(This,Buttons) (This)->lpVtbl->get_Buttons(This,Buttons)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IInkCursor_QueryInterface(IInkCursor* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IInkCursor_AddRef(IInkCursor* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IInkCursor_Release(IInkCursor* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IInkCursor_GetTypeInfoCount(IInkCursor* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IInkCursor_GetTypeInfo(IInkCursor* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IInkCursor_GetIDsOfNames(IInkCursor* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IInkCursor_Invoke(IInkCursor* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IInkCursor methods ***/
+static FORCEINLINE HRESULT IInkCursor_get_Name(IInkCursor* This,BSTR *Name) {
+    return This->lpVtbl->get_Name(This,Name);
+}
+static FORCEINLINE HRESULT IInkCursor_get_Id(IInkCursor* This,LONG *Id) {
+    return This->lpVtbl->get_Id(This,Id);
+}
+static FORCEINLINE HRESULT IInkCursor_get_Inverted(IInkCursor* This,VARIANT_BOOL *Status) {
+    return This->lpVtbl->get_Inverted(This,Status);
+}
+static FORCEINLINE HRESULT IInkCursor_get_DrawingAttributes(IInkCursor* This,IInkDrawingAttributes **Attributes) {
+    return This->lpVtbl->get_DrawingAttributes(This,Attributes);
+}
+static FORCEINLINE HRESULT IInkCursor_putref_DrawingAttributes(IInkCursor* This,IInkDrawingAttributes *Attributes) {
+    return This->lpVtbl->putref_DrawingAttributes(This,Attributes);
+}
+static FORCEINLINE HRESULT IInkCursor_get_Tablet(IInkCursor* This,IInkTablet **Tablet) {
+    return This->lpVtbl->get_Tablet(This,Tablet);
+}
+static FORCEINLINE HRESULT IInkCursor_get_Buttons(IInkCursor* This,IInkCursorButtons **Buttons) {
+    return This->lpVtbl->get_Buttons(This,Buttons);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInkCursor_get_Name_Proxy(
+    IInkCursor* This,
+    BSTR *Name);
+void __RPC_STUB IInkCursor_get_Name_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCursor_get_Id_Proxy(
+    IInkCursor* This,
+    LONG *Id);
+void __RPC_STUB IInkCursor_get_Id_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCursor_get_Inverted_Proxy(
+    IInkCursor* This,
+    VARIANT_BOOL *Status);
+void __RPC_STUB IInkCursor_get_Inverted_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCursor_get_DrawingAttributes_Proxy(
+    IInkCursor* This,
+    IInkDrawingAttributes **Attributes);
+void __RPC_STUB IInkCursor_get_DrawingAttributes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCursor_putref_DrawingAttributes_Proxy(
+    IInkCursor* This,
+    IInkDrawingAttributes *Attributes);
+void __RPC_STUB IInkCursor_putref_DrawingAttributes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCursor_get_Tablet_Proxy(
+    IInkCursor* This,
+    IInkTablet **Tablet);
+void __RPC_STUB IInkCursor_get_Tablet_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCursor_get_Buttons_Proxy(
+    IInkCursor* This,
+    IInkCursorButtons **Buttons);
+void __RPC_STUB IInkCursor_get_Buttons_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInkCursor_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInkTransform interface
+ */
+#ifndef __IInkTransform_INTERFACE_DEFINED__
+#define __IInkTransform_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInkTransform, 0x615f1d43, 0x8703, 0x4565, 0x88,0xe2, 0x82,0x01,0xd2,0xec,0xd7,0xb7);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("615f1d43-8703-4565-88e2-8201d2ecd7b7")
+IInkTransform : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Translate(
+        float HorizontalComponent,
+        float VerticalComponent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Rotate(
+        float Degrees,
+        float x = 0,
+        float y = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reflect(
+        VARIANT_BOOL Horizontally,
+        VARIANT_BOOL Vertically) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Shear(
+        float HorizontalComponent,
+        float VerticalComponent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ScaleTransform(
+        float HorizontalMultiplier,
+        float VerticalMultiplier) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTransform(
+        float *eM11,
+        float *eM12,
+        float *eM21,
+        float *eM22,
+        float *eDx,
+        float *eDy) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetTransform(
+        float eM11,
+        float eM12,
+        float eM21,
+        float eM22,
+        float eDx,
+        float eDy) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_eM11(
+        float *Value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_eM11(
+        float Value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_eM12(
+        float *Value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_eM12(
+        float Value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_eM21(
+        float *Value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_eM21(
+        float Value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_eM22(
+        float *Value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_eM22(
+        float Value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_eDx(
+        float *Value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_eDx(
+        float Value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_eDy(
+        float *Value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_eDy(
+        float Value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Data(
+        XFORM *XForm) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Data(
+        XFORM XForm) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IInkTransform, 0x615f1d43, 0x8703, 0x4565, 0x88,0xe2, 0x82,0x01,0xd2,0xec,0xd7,0xb7)
+#endif
+#else
+typedef struct IInkTransformVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInkTransform* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInkTransform* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInkTransform* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IInkTransform* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IInkTransform* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IInkTransform* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IInkTransform* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IInkTransform methods ***/
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        IInkTransform* This);
+
+    HRESULT (STDMETHODCALLTYPE *Translate)(
+        IInkTransform* This,
+        float HorizontalComponent,
+        float VerticalComponent);
+
+    HRESULT (STDMETHODCALLTYPE *Rotate)(
+        IInkTransform* This,
+        float Degrees,
+        float x,
+        float y);
+
+    HRESULT (STDMETHODCALLTYPE *Reflect)(
+        IInkTransform* This,
+        VARIANT_BOOL Horizontally,
+        VARIANT_BOOL Vertically);
+
+    HRESULT (STDMETHODCALLTYPE *Shear)(
+        IInkTransform* This,
+        float HorizontalComponent,
+        float VerticalComponent);
+
+    HRESULT (STDMETHODCALLTYPE *ScaleTransform)(
+        IInkTransform* This,
+        float HorizontalMultiplier,
+        float VerticalMultiplier);
+
+    HRESULT (STDMETHODCALLTYPE *GetTransform)(
+        IInkTransform* This,
+        float *eM11,
+        float *eM12,
+        float *eM21,
+        float *eM22,
+        float *eDx,
+        float *eDy);
+
+    HRESULT (STDMETHODCALLTYPE *SetTransform)(
+        IInkTransform* This,
+        float eM11,
+        float eM12,
+        float eM21,
+        float eM22,
+        float eDx,
+        float eDy);
+
+    HRESULT (STDMETHODCALLTYPE *get_eM11)(
+        IInkTransform* This,
+        float *Value);
+
+    HRESULT (STDMETHODCALLTYPE *put_eM11)(
+        IInkTransform* This,
+        float Value);
+
+    HRESULT (STDMETHODCALLTYPE *get_eM12)(
+        IInkTransform* This,
+        float *Value);
+
+    HRESULT (STDMETHODCALLTYPE *put_eM12)(
+        IInkTransform* This,
+        float Value);
+
+    HRESULT (STDMETHODCALLTYPE *get_eM21)(
+        IInkTransform* This,
+        float *Value);
+
+    HRESULT (STDMETHODCALLTYPE *put_eM21)(
+        IInkTransform* This,
+        float Value);
+
+    HRESULT (STDMETHODCALLTYPE *get_eM22)(
+        IInkTransform* This,
+        float *Value);
+
+    HRESULT (STDMETHODCALLTYPE *put_eM22)(
+        IInkTransform* This,
+        float Value);
+
+    HRESULT (STDMETHODCALLTYPE *get_eDx)(
+        IInkTransform* This,
+        float *Value);
+
+    HRESULT (STDMETHODCALLTYPE *put_eDx)(
+        IInkTransform* This,
+        float Value);
+
+    HRESULT (STDMETHODCALLTYPE *get_eDy)(
+        IInkTransform* This,
+        float *Value);
+
+    HRESULT (STDMETHODCALLTYPE *put_eDy)(
+        IInkTransform* This,
+        float Value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Data)(
+        IInkTransform* This,
+        XFORM *XForm);
+
+    HRESULT (STDMETHODCALLTYPE *put_Data)(
+        IInkTransform* This,
+        XFORM XForm);
+
+    END_INTERFACE
+} IInkTransformVtbl;
+interface IInkTransform {
+    CONST_VTBL IInkTransformVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IInkTransform_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInkTransform_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInkTransform_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IInkTransform_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IInkTransform_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IInkTransform_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IInkTransform_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IInkTransform methods ***/
+#define IInkTransform_Reset(This) (This)->lpVtbl->Reset(This)
+#define IInkTransform_Translate(This,HorizontalComponent,VerticalComponent) (This)->lpVtbl->Translate(This,HorizontalComponent,VerticalComponent)
+#define IInkTransform_Rotate(This,Degrees,x,y) (This)->lpVtbl->Rotate(This,Degrees,x,y)
+#define IInkTransform_Reflect(This,Horizontally,Vertically) (This)->lpVtbl->Reflect(This,Horizontally,Vertically)
+#define IInkTransform_Shear(This,HorizontalComponent,VerticalComponent) (This)->lpVtbl->Shear(This,HorizontalComponent,VerticalComponent)
+#define IInkTransform_ScaleTransform(This,HorizontalMultiplier,VerticalMultiplier) (This)->lpVtbl->ScaleTransform(This,HorizontalMultiplier,VerticalMultiplier)
+#define IInkTransform_GetTransform(This,eM11,eM12,eM21,eM22,eDx,eDy) (This)->lpVtbl->GetTransform(This,eM11,eM12,eM21,eM22,eDx,eDy)
+#define IInkTransform_SetTransform(This,eM11,eM12,eM21,eM22,eDx,eDy) (This)->lpVtbl->SetTransform(This,eM11,eM12,eM21,eM22,eDx,eDy)
+#define IInkTransform_get_eM11(This,Value) (This)->lpVtbl->get_eM11(This,Value)
+#define IInkTransform_put_eM11(This,Value) (This)->lpVtbl->put_eM11(This,Value)
+#define IInkTransform_get_eM12(This,Value) (This)->lpVtbl->get_eM12(This,Value)
+#define IInkTransform_put_eM12(This,Value) (This)->lpVtbl->put_eM12(This,Value)
+#define IInkTransform_get_eM21(This,Value) (This)->lpVtbl->get_eM21(This,Value)
+#define IInkTransform_put_eM21(This,Value) (This)->lpVtbl->put_eM21(This,Value)
+#define IInkTransform_get_eM22(This,Value) (This)->lpVtbl->get_eM22(This,Value)
+#define IInkTransform_put_eM22(This,Value) (This)->lpVtbl->put_eM22(This,Value)
+#define IInkTransform_get_eDx(This,Value) (This)->lpVtbl->get_eDx(This,Value)
+#define IInkTransform_put_eDx(This,Value) (This)->lpVtbl->put_eDx(This,Value)
+#define IInkTransform_get_eDy(This,Value) (This)->lpVtbl->get_eDy(This,Value)
+#define IInkTransform_put_eDy(This,Value) (This)->lpVtbl->put_eDy(This,Value)
+#define IInkTransform_get_Data(This,XForm) (This)->lpVtbl->get_Data(This,XForm)
+#define IInkTransform_put_Data(This,XForm) (This)->lpVtbl->put_Data(This,XForm)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IInkTransform_QueryInterface(IInkTransform* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IInkTransform_AddRef(IInkTransform* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IInkTransform_Release(IInkTransform* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IInkTransform_GetTypeInfoCount(IInkTransform* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IInkTransform_GetTypeInfo(IInkTransform* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IInkTransform_GetIDsOfNames(IInkTransform* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IInkTransform_Invoke(IInkTransform* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IInkTransform methods ***/
+static FORCEINLINE HRESULT IInkTransform_Reset(IInkTransform* This) {
+    return This->lpVtbl->Reset(This);
+}
+static FORCEINLINE HRESULT IInkTransform_Translate(IInkTransform* This,float HorizontalComponent,float VerticalComponent) {
+    return This->lpVtbl->Translate(This,HorizontalComponent,VerticalComponent);
+}
+static FORCEINLINE HRESULT IInkTransform_Rotate(IInkTransform* This,float Degrees,float x,float y) {
+    return This->lpVtbl->Rotate(This,Degrees,x,y);
+}
+static FORCEINLINE HRESULT IInkTransform_Reflect(IInkTransform* This,VARIANT_BOOL Horizontally,VARIANT_BOOL Vertically) {
+    return This->lpVtbl->Reflect(This,Horizontally,Vertically);
+}
+static FORCEINLINE HRESULT IInkTransform_Shear(IInkTransform* This,float HorizontalComponent,float VerticalComponent) {
+    return This->lpVtbl->Shear(This,HorizontalComponent,VerticalComponent);
+}
+static FORCEINLINE HRESULT IInkTransform_ScaleTransform(IInkTransform* This,float HorizontalMultiplier,float VerticalMultiplier) {
+    return This->lpVtbl->ScaleTransform(This,HorizontalMultiplier,VerticalMultiplier);
+}
+static FORCEINLINE HRESULT IInkTransform_GetTransform(IInkTransform* This,float *eM11,float *eM12,float *eM21,float *eM22,float *eDx,float *eDy) {
+    return This->lpVtbl->GetTransform(This,eM11,eM12,eM21,eM22,eDx,eDy);
+}
+static FORCEINLINE HRESULT IInkTransform_SetTransform(IInkTransform* This,float eM11,float eM12,float eM21,float eM22,float eDx,float eDy) {
+    return This->lpVtbl->SetTransform(This,eM11,eM12,eM21,eM22,eDx,eDy);
+}
+static FORCEINLINE HRESULT IInkTransform_get_eM11(IInkTransform* This,float *Value) {
+    return This->lpVtbl->get_eM11(This,Value);
+}
+static FORCEINLINE HRESULT IInkTransform_put_eM11(IInkTransform* This,float Value) {
+    return This->lpVtbl->put_eM11(This,Value);
+}
+static FORCEINLINE HRESULT IInkTransform_get_eM12(IInkTransform* This,float *Value) {
+    return This->lpVtbl->get_eM12(This,Value);
+}
+static FORCEINLINE HRESULT IInkTransform_put_eM12(IInkTransform* This,float Value) {
+    return This->lpVtbl->put_eM12(This,Value);
+}
+static FORCEINLINE HRESULT IInkTransform_get_eM21(IInkTransform* This,float *Value) {
+    return This->lpVtbl->get_eM21(This,Value);
+}
+static FORCEINLINE HRESULT IInkTransform_put_eM21(IInkTransform* This,float Value) {
+    return This->lpVtbl->put_eM21(This,Value);
+}
+static FORCEINLINE HRESULT IInkTransform_get_eM22(IInkTransform* This,float *Value) {
+    return This->lpVtbl->get_eM22(This,Value);
+}
+static FORCEINLINE HRESULT IInkTransform_put_eM22(IInkTransform* This,float Value) {
+    return This->lpVtbl->put_eM22(This,Value);
+}
+static FORCEINLINE HRESULT IInkTransform_get_eDx(IInkTransform* This,float *Value) {
+    return This->lpVtbl->get_eDx(This,Value);
+}
+static FORCEINLINE HRESULT IInkTransform_put_eDx(IInkTransform* This,float Value) {
+    return This->lpVtbl->put_eDx(This,Value);
+}
+static FORCEINLINE HRESULT IInkTransform_get_eDy(IInkTransform* This,float *Value) {
+    return This->lpVtbl->get_eDy(This,Value);
+}
+static FORCEINLINE HRESULT IInkTransform_put_eDy(IInkTransform* This,float Value) {
+    return This->lpVtbl->put_eDy(This,Value);
+}
+static FORCEINLINE HRESULT IInkTransform_get_Data(IInkTransform* This,XFORM *XForm) {
+    return This->lpVtbl->get_Data(This,XForm);
+}
+static FORCEINLINE HRESULT IInkTransform_put_Data(IInkTransform* This,XFORM XForm) {
+    return This->lpVtbl->put_Data(This,XForm);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInkTransform_Reset_Proxy(
+    IInkTransform* This);
+void __RPC_STUB IInkTransform_Reset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkTransform_Translate_Proxy(
+    IInkTransform* This,
+    float HorizontalComponent,
+    float VerticalComponent);
+void __RPC_STUB IInkTransform_Translate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkTransform_Rotate_Proxy(
+    IInkTransform* This,
+    float Degrees,
+    float x,
+    float y);
+void __RPC_STUB IInkTransform_Rotate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkTransform_Reflect_Proxy(
+    IInkTransform* This,
+    VARIANT_BOOL Horizontally,
+    VARIANT_BOOL Vertically);
+void __RPC_STUB IInkTransform_Reflect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkTransform_Shear_Proxy(
+    IInkTransform* This,
+    float HorizontalComponent,
+    float VerticalComponent);
+void __RPC_STUB IInkTransform_Shear_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkTransform_ScaleTransform_Proxy(
+    IInkTransform* This,
+    float HorizontalMultiplier,
+    float VerticalMultiplier);
+void __RPC_STUB IInkTransform_ScaleTransform_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkTransform_GetTransform_Proxy(
+    IInkTransform* This,
+    float *eM11,
+    float *eM12,
+    float *eM21,
+    float *eM22,
+    float *eDx,
+    float *eDy);
+void __RPC_STUB IInkTransform_GetTransform_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkTransform_SetTransform_Proxy(
+    IInkTransform* This,
+    float eM11,
+    float eM12,
+    float eM21,
+    float eM22,
+    float eDx,
+    float eDy);
+void __RPC_STUB IInkTransform_SetTransform_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkTransform_get_eM11_Proxy(
+    IInkTransform* This,
+    float *Value);
+void __RPC_STUB IInkTransform_get_eM11_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkTransform_put_eM11_Proxy(
+    IInkTransform* This,
+    float Value);
+void __RPC_STUB IInkTransform_put_eM11_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkTransform_get_eM12_Proxy(
+    IInkTransform* This,
+    float *Value);
+void __RPC_STUB IInkTransform_get_eM12_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkTransform_put_eM12_Proxy(
+    IInkTransform* This,
+    float Value);
+void __RPC_STUB IInkTransform_put_eM12_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkTransform_get_eM21_Proxy(
+    IInkTransform* This,
+    float *Value);
+void __RPC_STUB IInkTransform_get_eM21_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkTransform_put_eM21_Proxy(
+    IInkTransform* This,
+    float Value);
+void __RPC_STUB IInkTransform_put_eM21_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkTransform_get_eM22_Proxy(
+    IInkTransform* This,
+    float *Value);
+void __RPC_STUB IInkTransform_get_eM22_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkTransform_put_eM22_Proxy(
+    IInkTransform* This,
+    float Value);
+void __RPC_STUB IInkTransform_put_eM22_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkTransform_get_eDx_Proxy(
+    IInkTransform* This,
+    float *Value);
+void __RPC_STUB IInkTransform_get_eDx_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkTransform_put_eDx_Proxy(
+    IInkTransform* This,
+    float Value);
+void __RPC_STUB IInkTransform_put_eDx_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkTransform_get_eDy_Proxy(
+    IInkTransform* This,
+    float *Value);
+void __RPC_STUB IInkTransform_get_eDy_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkTransform_put_eDy_Proxy(
+    IInkTransform* This,
+    float Value);
+void __RPC_STUB IInkTransform_put_eDy_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkTransform_get_Data_Proxy(
+    IInkTransform* This,
+    XFORM *XForm);
+void __RPC_STUB IInkTransform_get_Data_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkTransform_put_Data_Proxy(
+    IInkTransform* This,
+    XFORM XForm);
+void __RPC_STUB IInkTransform_put_Data_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInkTransform_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInkRecognitionAlternates interface
+ */
+#ifndef __IInkRecognitionAlternates_INTERFACE_DEFINED__
+#define __IInkRecognitionAlternates_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInkRecognitionAlternates, 0x286a167f, 0x9f19, 0x4c61, 0x9d,0x53, 0x4f,0x07,0xbe,0x62,0x2b,0x84);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("286a167f-9f19-4c61-9d53-4f07be622b84")
+IInkRecognitionAlternates : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Count(
+        LONG *Count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
+        IUnknown **_NewEnum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Strokes(
+        IInkStrokes **Strokes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Item(
+        LONG Index,
+        IInkRecognitionAlternate **InkRecoAlternate) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IInkRecognitionAlternates, 0x286a167f, 0x9f19, 0x4c61, 0x9d,0x53, 0x4f,0x07,0xbe,0x62,0x2b,0x84)
+#endif
+#else
+typedef struct IInkRecognitionAlternatesVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInkRecognitionAlternates* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInkRecognitionAlternates* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInkRecognitionAlternates* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IInkRecognitionAlternates* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IInkRecognitionAlternates* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IInkRecognitionAlternates* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IInkRecognitionAlternates* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IInkRecognitionAlternates methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Count)(
+        IInkRecognitionAlternates* This,
+        LONG *Count);
+
+    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
+        IInkRecognitionAlternates* This,
+        IUnknown **_NewEnum);
+
+    HRESULT (STDMETHODCALLTYPE *get_Strokes)(
+        IInkRecognitionAlternates* This,
+        IInkStrokes **Strokes);
+
+    HRESULT (STDMETHODCALLTYPE *Item)(
+        IInkRecognitionAlternates* This,
+        LONG Index,
+        IInkRecognitionAlternate **InkRecoAlternate);
+
+    END_INTERFACE
+} IInkRecognitionAlternatesVtbl;
+interface IInkRecognitionAlternates {
+    CONST_VTBL IInkRecognitionAlternatesVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IInkRecognitionAlternates_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInkRecognitionAlternates_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInkRecognitionAlternates_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IInkRecognitionAlternates_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IInkRecognitionAlternates_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IInkRecognitionAlternates_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IInkRecognitionAlternates_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IInkRecognitionAlternates methods ***/
+#define IInkRecognitionAlternates_get_Count(This,Count) (This)->lpVtbl->get_Count(This,Count)
+#define IInkRecognitionAlternates_get__NewEnum(This,_NewEnum) (This)->lpVtbl->get__NewEnum(This,_NewEnum)
+#define IInkRecognitionAlternates_get_Strokes(This,Strokes) (This)->lpVtbl->get_Strokes(This,Strokes)
+#define IInkRecognitionAlternates_Item(This,Index,InkRecoAlternate) (This)->lpVtbl->Item(This,Index,InkRecoAlternate)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IInkRecognitionAlternates_QueryInterface(IInkRecognitionAlternates* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IInkRecognitionAlternates_AddRef(IInkRecognitionAlternates* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IInkRecognitionAlternates_Release(IInkRecognitionAlternates* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IInkRecognitionAlternates_GetTypeInfoCount(IInkRecognitionAlternates* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IInkRecognitionAlternates_GetTypeInfo(IInkRecognitionAlternates* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IInkRecognitionAlternates_GetIDsOfNames(IInkRecognitionAlternates* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IInkRecognitionAlternates_Invoke(IInkRecognitionAlternates* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IInkRecognitionAlternates methods ***/
+static FORCEINLINE HRESULT IInkRecognitionAlternates_get_Count(IInkRecognitionAlternates* This,LONG *Count) {
+    return This->lpVtbl->get_Count(This,Count);
+}
+static FORCEINLINE HRESULT IInkRecognitionAlternates_get__NewEnum(IInkRecognitionAlternates* This,IUnknown **_NewEnum) {
+    return This->lpVtbl->get__NewEnum(This,_NewEnum);
+}
+static FORCEINLINE HRESULT IInkRecognitionAlternates_get_Strokes(IInkRecognitionAlternates* This,IInkStrokes **Strokes) {
+    return This->lpVtbl->get_Strokes(This,Strokes);
+}
+static FORCEINLINE HRESULT IInkRecognitionAlternates_Item(IInkRecognitionAlternates* This,LONG Index,IInkRecognitionAlternate **InkRecoAlternate) {
+    return This->lpVtbl->Item(This,Index,InkRecoAlternate);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInkRecognitionAlternates_get_Count_Proxy(
+    IInkRecognitionAlternates* This,
+    LONG *Count);
+void __RPC_STUB IInkRecognitionAlternates_get_Count_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRecognitionAlternates_get__NewEnum_Proxy(
+    IInkRecognitionAlternates* This,
+    IUnknown **_NewEnum);
+void __RPC_STUB IInkRecognitionAlternates_get__NewEnum_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRecognitionAlternates_get_Strokes_Proxy(
+    IInkRecognitionAlternates* This,
+    IInkStrokes **Strokes);
+void __RPC_STUB IInkRecognitionAlternates_get_Strokes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRecognitionAlternates_Item_Proxy(
+    IInkRecognitionAlternates* This,
+    LONG Index,
+    IInkRecognitionAlternate **InkRecoAlternate);
+void __RPC_STUB IInkRecognitionAlternates_Item_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInkRecognitionAlternates_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInkRecognitionAlternate interface
+ */
+#ifndef __IInkRecognitionAlternate_INTERFACE_DEFINED__
+#define __IInkRecognitionAlternate_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInkRecognitionAlternate, 0xb7e660ad, 0x77e4, 0x429b, 0xad,0xda, 0x87,0x37,0x80,0xd1,0xfc,0x4a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("b7e660ad-77e4-429b-adda-873780d1fc4a")
+IInkRecognitionAlternate : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_String(
+        BSTR *RecoString) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Confidence(
+        InkRecognitionConfidence *Confidence) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Baseline(
+        VARIANT *Baseline) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Midline(
+        VARIANT *Midline) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Ascender(
+        VARIANT *Ascender) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Descender(
+        VARIANT *Descender) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_LineNumber(
+        LONG *LineNumber) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Strokes(
+        IInkStrokes **Strokes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_LineAlternates(
+        IInkRecognitionAlternates **LineAlternates) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ConfidenceAlternates(
+        IInkRecognitionAlternates **ConfidenceAlternates) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetStrokesFromStrokeRanges(
+        IInkStrokes *Strokes,
+        IInkStrokes **GetStrokesFromStrokeRanges) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetStrokesFromTextRange(
+        LONG *selectionStart,
+        LONG *selectionLength,
+        IInkStrokes **GetStrokesFromTextRange) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTextRangeFromStrokes(
+        IInkStrokes *Strokes,
+        LONG *selectionStart,
+        LONG *selectionLength) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AlternatesWithConstantPropertyValues(
+        BSTR PropertyType,
+        IInkRecognitionAlternates **AlternatesWithConstantPropertyValues) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPropertyValue(
+        BSTR PropertyType,
+        VARIANT *PropertyValue) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IInkRecognitionAlternate, 0xb7e660ad, 0x77e4, 0x429b, 0xad,0xda, 0x87,0x37,0x80,0xd1,0xfc,0x4a)
+#endif
+#else
+typedef struct IInkRecognitionAlternateVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInkRecognitionAlternate* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInkRecognitionAlternate* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInkRecognitionAlternate* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IInkRecognitionAlternate* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IInkRecognitionAlternate* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IInkRecognitionAlternate* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IInkRecognitionAlternate* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IInkRecognitionAlternate methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_String)(
+        IInkRecognitionAlternate* This,
+        BSTR *RecoString);
+
+    HRESULT (STDMETHODCALLTYPE *get_Confidence)(
+        IInkRecognitionAlternate* This,
+        InkRecognitionConfidence *Confidence);
+
+    HRESULT (STDMETHODCALLTYPE *get_Baseline)(
+        IInkRecognitionAlternate* This,
+        VARIANT *Baseline);
+
+    HRESULT (STDMETHODCALLTYPE *get_Midline)(
+        IInkRecognitionAlternate* This,
+        VARIANT *Midline);
+
+    HRESULT (STDMETHODCALLTYPE *get_Ascender)(
+        IInkRecognitionAlternate* This,
+        VARIANT *Ascender);
+
+    HRESULT (STDMETHODCALLTYPE *get_Descender)(
+        IInkRecognitionAlternate* This,
+        VARIANT *Descender);
+
+    HRESULT (STDMETHODCALLTYPE *get_LineNumber)(
+        IInkRecognitionAlternate* This,
+        LONG *LineNumber);
+
+    HRESULT (STDMETHODCALLTYPE *get_Strokes)(
+        IInkRecognitionAlternate* This,
+        IInkStrokes **Strokes);
+
+    HRESULT (STDMETHODCALLTYPE *get_LineAlternates)(
+        IInkRecognitionAlternate* This,
+        IInkRecognitionAlternates **LineAlternates);
+
+    HRESULT (STDMETHODCALLTYPE *get_ConfidenceAlternates)(
+        IInkRecognitionAlternate* This,
+        IInkRecognitionAlternates **ConfidenceAlternates);
+
+    HRESULT (STDMETHODCALLTYPE *GetStrokesFromStrokeRanges)(
+        IInkRecognitionAlternate* This,
+        IInkStrokes *Strokes,
+        IInkStrokes **GetStrokesFromStrokeRanges);
+
+    HRESULT (STDMETHODCALLTYPE *GetStrokesFromTextRange)(
+        IInkRecognitionAlternate* This,
+        LONG *selectionStart,
+        LONG *selectionLength,
+        IInkStrokes **GetStrokesFromTextRange);
+
+    HRESULT (STDMETHODCALLTYPE *GetTextRangeFromStrokes)(
+        IInkRecognitionAlternate* This,
+        IInkStrokes *Strokes,
+        LONG *selectionStart,
+        LONG *selectionLength);
+
+    HRESULT (STDMETHODCALLTYPE *AlternatesWithConstantPropertyValues)(
+        IInkRecognitionAlternate* This,
+        BSTR PropertyType,
+        IInkRecognitionAlternates **AlternatesWithConstantPropertyValues);
+
+    HRESULT (STDMETHODCALLTYPE *GetPropertyValue)(
+        IInkRecognitionAlternate* This,
+        BSTR PropertyType,
+        VARIANT *PropertyValue);
+
+    END_INTERFACE
+} IInkRecognitionAlternateVtbl;
+interface IInkRecognitionAlternate {
+    CONST_VTBL IInkRecognitionAlternateVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IInkRecognitionAlternate_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInkRecognitionAlternate_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInkRecognitionAlternate_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IInkRecognitionAlternate_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IInkRecognitionAlternate_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IInkRecognitionAlternate_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IInkRecognitionAlternate_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IInkRecognitionAlternate methods ***/
+#define IInkRecognitionAlternate_get_String(This,RecoString) (This)->lpVtbl->get_String(This,RecoString)
+#define IInkRecognitionAlternate_get_Confidence(This,Confidence) (This)->lpVtbl->get_Confidence(This,Confidence)
+#define IInkRecognitionAlternate_get_Baseline(This,Baseline) (This)->lpVtbl->get_Baseline(This,Baseline)
+#define IInkRecognitionAlternate_get_Midline(This,Midline) (This)->lpVtbl->get_Midline(This,Midline)
+#define IInkRecognitionAlternate_get_Ascender(This,Ascender) (This)->lpVtbl->get_Ascender(This,Ascender)
+#define IInkRecognitionAlternate_get_Descender(This,Descender) (This)->lpVtbl->get_Descender(This,Descender)
+#define IInkRecognitionAlternate_get_LineNumber(This,LineNumber) (This)->lpVtbl->get_LineNumber(This,LineNumber)
+#define IInkRecognitionAlternate_get_Strokes(This,Strokes) (This)->lpVtbl->get_Strokes(This,Strokes)
+#define IInkRecognitionAlternate_get_LineAlternates(This,LineAlternates) (This)->lpVtbl->get_LineAlternates(This,LineAlternates)
+#define IInkRecognitionAlternate_get_ConfidenceAlternates(This,ConfidenceAlternates) (This)->lpVtbl->get_ConfidenceAlternates(This,ConfidenceAlternates)
+#define IInkRecognitionAlternate_GetStrokesFromStrokeRanges(This,Strokes,GetStrokesFromStrokeRanges) (This)->lpVtbl->GetStrokesFromStrokeRanges(This,Strokes,GetStrokesFromStrokeRanges)
+#define IInkRecognitionAlternate_GetStrokesFromTextRange(This,selectionStart,selectionLength,GetStrokesFromTextRange) (This)->lpVtbl->GetStrokesFromTextRange(This,selectionStart,selectionLength,GetStrokesFromTextRange)
+#define IInkRecognitionAlternate_GetTextRangeFromStrokes(This,Strokes,selectionStart,selectionLength) (This)->lpVtbl->GetTextRangeFromStrokes(This,Strokes,selectionStart,selectionLength)
+#define IInkRecognitionAlternate_AlternatesWithConstantPropertyValues(This,PropertyType,AlternatesWithConstantPropertyValues) (This)->lpVtbl->AlternatesWithConstantPropertyValues(This,PropertyType,AlternatesWithConstantPropertyValues)
+#define IInkRecognitionAlternate_GetPropertyValue(This,PropertyType,PropertyValue) (This)->lpVtbl->GetPropertyValue(This,PropertyType,PropertyValue)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IInkRecognitionAlternate_QueryInterface(IInkRecognitionAlternate* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IInkRecognitionAlternate_AddRef(IInkRecognitionAlternate* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IInkRecognitionAlternate_Release(IInkRecognitionAlternate* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IInkRecognitionAlternate_GetTypeInfoCount(IInkRecognitionAlternate* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IInkRecognitionAlternate_GetTypeInfo(IInkRecognitionAlternate* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IInkRecognitionAlternate_GetIDsOfNames(IInkRecognitionAlternate* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IInkRecognitionAlternate_Invoke(IInkRecognitionAlternate* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IInkRecognitionAlternate methods ***/
+static FORCEINLINE HRESULT IInkRecognitionAlternate_get_String(IInkRecognitionAlternate* This,BSTR *RecoString) {
+    return This->lpVtbl->get_String(This,RecoString);
+}
+static FORCEINLINE HRESULT IInkRecognitionAlternate_get_Confidence(IInkRecognitionAlternate* This,InkRecognitionConfidence *Confidence) {
+    return This->lpVtbl->get_Confidence(This,Confidence);
+}
+static FORCEINLINE HRESULT IInkRecognitionAlternate_get_Baseline(IInkRecognitionAlternate* This,VARIANT *Baseline) {
+    return This->lpVtbl->get_Baseline(This,Baseline);
+}
+static FORCEINLINE HRESULT IInkRecognitionAlternate_get_Midline(IInkRecognitionAlternate* This,VARIANT *Midline) {
+    return This->lpVtbl->get_Midline(This,Midline);
+}
+static FORCEINLINE HRESULT IInkRecognitionAlternate_get_Ascender(IInkRecognitionAlternate* This,VARIANT *Ascender) {
+    return This->lpVtbl->get_Ascender(This,Ascender);
+}
+static FORCEINLINE HRESULT IInkRecognitionAlternate_get_Descender(IInkRecognitionAlternate* This,VARIANT *Descender) {
+    return This->lpVtbl->get_Descender(This,Descender);
+}
+static FORCEINLINE HRESULT IInkRecognitionAlternate_get_LineNumber(IInkRecognitionAlternate* This,LONG *LineNumber) {
+    return This->lpVtbl->get_LineNumber(This,LineNumber);
+}
+static FORCEINLINE HRESULT IInkRecognitionAlternate_get_Strokes(IInkRecognitionAlternate* This,IInkStrokes **Strokes) {
+    return This->lpVtbl->get_Strokes(This,Strokes);
+}
+static FORCEINLINE HRESULT IInkRecognitionAlternate_get_LineAlternates(IInkRecognitionAlternate* This,IInkRecognitionAlternates **LineAlternates) {
+    return This->lpVtbl->get_LineAlternates(This,LineAlternates);
+}
+static FORCEINLINE HRESULT IInkRecognitionAlternate_get_ConfidenceAlternates(IInkRecognitionAlternate* This,IInkRecognitionAlternates **ConfidenceAlternates) {
+    return This->lpVtbl->get_ConfidenceAlternates(This,ConfidenceAlternates);
+}
+static FORCEINLINE HRESULT IInkRecognitionAlternate_GetStrokesFromStrokeRanges(IInkRecognitionAlternate* This,IInkStrokes *Strokes,IInkStrokes **GetStrokesFromStrokeRanges) {
+    return This->lpVtbl->GetStrokesFromStrokeRanges(This,Strokes,GetStrokesFromStrokeRanges);
+}
+static FORCEINLINE HRESULT IInkRecognitionAlternate_GetStrokesFromTextRange(IInkRecognitionAlternate* This,LONG *selectionStart,LONG *selectionLength,IInkStrokes **GetStrokesFromTextRange) {
+    return This->lpVtbl->GetStrokesFromTextRange(This,selectionStart,selectionLength,GetStrokesFromTextRange);
+}
+static FORCEINLINE HRESULT IInkRecognitionAlternate_GetTextRangeFromStrokes(IInkRecognitionAlternate* This,IInkStrokes *Strokes,LONG *selectionStart,LONG *selectionLength) {
+    return This->lpVtbl->GetTextRangeFromStrokes(This,Strokes,selectionStart,selectionLength);
+}
+static FORCEINLINE HRESULT IInkRecognitionAlternate_AlternatesWithConstantPropertyValues(IInkRecognitionAlternate* This,BSTR PropertyType,IInkRecognitionAlternates **AlternatesWithConstantPropertyValues) {
+    return This->lpVtbl->AlternatesWithConstantPropertyValues(This,PropertyType,AlternatesWithConstantPropertyValues);
+}
+static FORCEINLINE HRESULT IInkRecognitionAlternate_GetPropertyValue(IInkRecognitionAlternate* This,BSTR PropertyType,VARIANT *PropertyValue) {
+    return This->lpVtbl->GetPropertyValue(This,PropertyType,PropertyValue);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInkRecognitionAlternate_get_String_Proxy(
+    IInkRecognitionAlternate* This,
+    BSTR *RecoString);
+void __RPC_STUB IInkRecognitionAlternate_get_String_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRecognitionAlternate_get_Confidence_Proxy(
+    IInkRecognitionAlternate* This,
+    InkRecognitionConfidence *Confidence);
+void __RPC_STUB IInkRecognitionAlternate_get_Confidence_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRecognitionAlternate_get_Baseline_Proxy(
+    IInkRecognitionAlternate* This,
+    VARIANT *Baseline);
+void __RPC_STUB IInkRecognitionAlternate_get_Baseline_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRecognitionAlternate_get_Midline_Proxy(
+    IInkRecognitionAlternate* This,
+    VARIANT *Midline);
+void __RPC_STUB IInkRecognitionAlternate_get_Midline_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRecognitionAlternate_get_Ascender_Proxy(
+    IInkRecognitionAlternate* This,
+    VARIANT *Ascender);
+void __RPC_STUB IInkRecognitionAlternate_get_Ascender_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRecognitionAlternate_get_Descender_Proxy(
+    IInkRecognitionAlternate* This,
+    VARIANT *Descender);
+void __RPC_STUB IInkRecognitionAlternate_get_Descender_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRecognitionAlternate_get_LineNumber_Proxy(
+    IInkRecognitionAlternate* This,
+    LONG *LineNumber);
+void __RPC_STUB IInkRecognitionAlternate_get_LineNumber_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRecognitionAlternate_get_Strokes_Proxy(
+    IInkRecognitionAlternate* This,
+    IInkStrokes **Strokes);
+void __RPC_STUB IInkRecognitionAlternate_get_Strokes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRecognitionAlternate_get_LineAlternates_Proxy(
+    IInkRecognitionAlternate* This,
+    IInkRecognitionAlternates **LineAlternates);
+void __RPC_STUB IInkRecognitionAlternate_get_LineAlternates_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRecognitionAlternate_get_ConfidenceAlternates_Proxy(
+    IInkRecognitionAlternate* This,
+    IInkRecognitionAlternates **ConfidenceAlternates);
+void __RPC_STUB IInkRecognitionAlternate_get_ConfidenceAlternates_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRecognitionAlternate_GetStrokesFromStrokeRanges_Proxy(
+    IInkRecognitionAlternate* This,
+    IInkStrokes *Strokes,
+    IInkStrokes **GetStrokesFromStrokeRanges);
+void __RPC_STUB IInkRecognitionAlternate_GetStrokesFromStrokeRanges_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRecognitionAlternate_GetStrokesFromTextRange_Proxy(
+    IInkRecognitionAlternate* This,
+    LONG *selectionStart,
+    LONG *selectionLength,
+    IInkStrokes **GetStrokesFromTextRange);
+void __RPC_STUB IInkRecognitionAlternate_GetStrokesFromTextRange_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRecognitionAlternate_GetTextRangeFromStrokes_Proxy(
+    IInkRecognitionAlternate* This,
+    IInkStrokes *Strokes,
+    LONG *selectionStart,
+    LONG *selectionLength);
+void __RPC_STUB IInkRecognitionAlternate_GetTextRangeFromStrokes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRecognitionAlternate_AlternatesWithConstantPropertyValues_Proxy(
+    IInkRecognitionAlternate* This,
+    BSTR PropertyType,
+    IInkRecognitionAlternates **AlternatesWithConstantPropertyValues);
+void __RPC_STUB IInkRecognitionAlternate_AlternatesWithConstantPropertyValues_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRecognitionAlternate_GetPropertyValue_Proxy(
+    IInkRecognitionAlternate* This,
+    BSTR PropertyType,
+    VARIANT *PropertyValue);
+void __RPC_STUB IInkRecognitionAlternate_GetPropertyValue_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInkRecognitionAlternate_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInkRecognitionResult interface
+ */
+#ifndef __IInkRecognitionResult_INTERFACE_DEFINED__
+#define __IInkRecognitionResult_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInkRecognitionResult, 0x3bc129a8, 0x86cd, 0x45ad, 0xbd,0xe8, 0xe0,0xd3,0x2d,0x61,0xc1,0x6d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("3bc129a8-86cd-45ad-bde8-e0d32d61c16d")
+IInkRecognitionResult : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_TopString(
+        BSTR *TopString) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_TopAlternate(
+        IInkRecognitionAlternate **TopAlternate) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_TopConfidence(
+        InkRecognitionConfidence *TopConfidence) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Strokes(
+        IInkStrokes **Strokes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AlternatesFromSelection(
+        LONG selectionStart,
+        LONG selectionLength,
+        LONG maximumAlternates,
+        IInkRecognitionAlternates **AlternatesFromSelection) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ModifyTopAlternate(
+        IInkRecognitionAlternate *Alternate) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetResultOnStrokes(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IInkRecognitionResult, 0x3bc129a8, 0x86cd, 0x45ad, 0xbd,0xe8, 0xe0,0xd3,0x2d,0x61,0xc1,0x6d)
+#endif
+#else
+typedef struct IInkRecognitionResultVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInkRecognitionResult* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInkRecognitionResult* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInkRecognitionResult* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IInkRecognitionResult* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IInkRecognitionResult* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IInkRecognitionResult* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IInkRecognitionResult* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IInkRecognitionResult methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_TopString)(
+        IInkRecognitionResult* This,
+        BSTR *TopString);
+
+    HRESULT (STDMETHODCALLTYPE *get_TopAlternate)(
+        IInkRecognitionResult* This,
+        IInkRecognitionAlternate **TopAlternate);
+
+    HRESULT (STDMETHODCALLTYPE *get_TopConfidence)(
+        IInkRecognitionResult* This,
+        InkRecognitionConfidence *TopConfidence);
+
+    HRESULT (STDMETHODCALLTYPE *get_Strokes)(
+        IInkRecognitionResult* This,
+        IInkStrokes **Strokes);
+
+    HRESULT (STDMETHODCALLTYPE *AlternatesFromSelection)(
+        IInkRecognitionResult* This,
+        LONG selectionStart,
+        LONG selectionLength,
+        LONG maximumAlternates,
+        IInkRecognitionAlternates **AlternatesFromSelection);
+
+    HRESULT (STDMETHODCALLTYPE *ModifyTopAlternate)(
+        IInkRecognitionResult* This,
+        IInkRecognitionAlternate *Alternate);
+
+    HRESULT (STDMETHODCALLTYPE *SetResultOnStrokes)(
+        IInkRecognitionResult* This);
+
+    END_INTERFACE
+} IInkRecognitionResultVtbl;
+interface IInkRecognitionResult {
+    CONST_VTBL IInkRecognitionResultVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IInkRecognitionResult_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInkRecognitionResult_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInkRecognitionResult_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IInkRecognitionResult_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IInkRecognitionResult_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IInkRecognitionResult_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IInkRecognitionResult_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IInkRecognitionResult methods ***/
+#define IInkRecognitionResult_get_TopString(This,TopString) (This)->lpVtbl->get_TopString(This,TopString)
+#define IInkRecognitionResult_get_TopAlternate(This,TopAlternate) (This)->lpVtbl->get_TopAlternate(This,TopAlternate)
+#define IInkRecognitionResult_get_TopConfidence(This,TopConfidence) (This)->lpVtbl->get_TopConfidence(This,TopConfidence)
+#define IInkRecognitionResult_get_Strokes(This,Strokes) (This)->lpVtbl->get_Strokes(This,Strokes)
+#define IInkRecognitionResult_AlternatesFromSelection(This,selectionStart,selectionLength,maximumAlternates,AlternatesFromSelection) (This)->lpVtbl->AlternatesFromSelection(This,selectionStart,selectionLength,maximumAlternates,AlternatesFromSelection)
+#define IInkRecognitionResult_ModifyTopAlternate(This,Alternate) (This)->lpVtbl->ModifyTopAlternate(This,Alternate)
+#define IInkRecognitionResult_SetResultOnStrokes(This) (This)->lpVtbl->SetResultOnStrokes(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IInkRecognitionResult_QueryInterface(IInkRecognitionResult* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IInkRecognitionResult_AddRef(IInkRecognitionResult* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IInkRecognitionResult_Release(IInkRecognitionResult* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IInkRecognitionResult_GetTypeInfoCount(IInkRecognitionResult* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IInkRecognitionResult_GetTypeInfo(IInkRecognitionResult* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IInkRecognitionResult_GetIDsOfNames(IInkRecognitionResult* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IInkRecognitionResult_Invoke(IInkRecognitionResult* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IInkRecognitionResult methods ***/
+static FORCEINLINE HRESULT IInkRecognitionResult_get_TopString(IInkRecognitionResult* This,BSTR *TopString) {
+    return This->lpVtbl->get_TopString(This,TopString);
+}
+static FORCEINLINE HRESULT IInkRecognitionResult_get_TopAlternate(IInkRecognitionResult* This,IInkRecognitionAlternate **TopAlternate) {
+    return This->lpVtbl->get_TopAlternate(This,TopAlternate);
+}
+static FORCEINLINE HRESULT IInkRecognitionResult_get_TopConfidence(IInkRecognitionResult* This,InkRecognitionConfidence *TopConfidence) {
+    return This->lpVtbl->get_TopConfidence(This,TopConfidence);
+}
+static FORCEINLINE HRESULT IInkRecognitionResult_get_Strokes(IInkRecognitionResult* This,IInkStrokes **Strokes) {
+    return This->lpVtbl->get_Strokes(This,Strokes);
+}
+static FORCEINLINE HRESULT IInkRecognitionResult_AlternatesFromSelection(IInkRecognitionResult* This,LONG selectionStart,LONG selectionLength,LONG maximumAlternates,IInkRecognitionAlternates **AlternatesFromSelection) {
+    return This->lpVtbl->AlternatesFromSelection(This,selectionStart,selectionLength,maximumAlternates,AlternatesFromSelection);
+}
+static FORCEINLINE HRESULT IInkRecognitionResult_ModifyTopAlternate(IInkRecognitionResult* This,IInkRecognitionAlternate *Alternate) {
+    return This->lpVtbl->ModifyTopAlternate(This,Alternate);
+}
+static FORCEINLINE HRESULT IInkRecognitionResult_SetResultOnStrokes(IInkRecognitionResult* This) {
+    return This->lpVtbl->SetResultOnStrokes(This);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInkRecognitionResult_get_TopString_Proxy(
+    IInkRecognitionResult* This,
+    BSTR *TopString);
+void __RPC_STUB IInkRecognitionResult_get_TopString_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRecognitionResult_get_TopAlternate_Proxy(
+    IInkRecognitionResult* This,
+    IInkRecognitionAlternate **TopAlternate);
+void __RPC_STUB IInkRecognitionResult_get_TopAlternate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRecognitionResult_get_TopConfidence_Proxy(
+    IInkRecognitionResult* This,
+    InkRecognitionConfidence *TopConfidence);
+void __RPC_STUB IInkRecognitionResult_get_TopConfidence_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRecognitionResult_get_Strokes_Proxy(
+    IInkRecognitionResult* This,
+    IInkStrokes **Strokes);
+void __RPC_STUB IInkRecognitionResult_get_Strokes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRecognitionResult_AlternatesFromSelection_Proxy(
+    IInkRecognitionResult* This,
+    LONG selectionStart,
+    LONG selectionLength,
+    LONG maximumAlternates,
+    IInkRecognitionAlternates **AlternatesFromSelection);
+void __RPC_STUB IInkRecognitionResult_AlternatesFromSelection_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRecognitionResult_ModifyTopAlternate_Proxy(
+    IInkRecognitionResult* This,
+    IInkRecognitionAlternate *Alternate);
+void __RPC_STUB IInkRecognitionResult_ModifyTopAlternate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRecognitionResult_SetResultOnStrokes_Proxy(
+    IInkRecognitionResult* This);
+void __RPC_STUB IInkRecognitionResult_SetResultOnStrokes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInkRecognitionResult_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInkStrokeDisp interface
+ */
+#ifndef __IInkStrokeDisp_INTERFACE_DEFINED__
+#define __IInkStrokeDisp_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInkStrokeDisp, 0x43242fea, 0x91d1, 0x4a72, 0x96,0x3e, 0xfb,0xb9,0x18,0x29,0xcf,0xa2);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("43242fea-91d1-4a72-963e-fbb91829cfa2")
+IInkStrokeDisp : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_ID(
+        LONG *ID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_BezierPoints(
+        VARIANT *Points) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_DrawingAttributes(
+        IInkDrawingAttributes **DrawAttrs) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE putref_DrawingAttributes(
+        IInkDrawingAttributes *DrawAttrs) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Ink(
+        IInkDisp **Ink) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ExtendedProperties(
+        IInkExtendedProperties **Properties) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_PolylineCusps(
+        VARIANT *Cusps) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_BezierCusps(
+        VARIANT *Cusps) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SelfIntersections(
+        VARIANT *Intersections) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_PacketCount(
+        LONG *plCount) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_PacketSize(
+        LONG *plSize) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_PacketDescription(
+        VARIANT *PacketDescription) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Deleted(
+        VARIANT_BOOL *Deleted) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBoundingBox(
+        InkBoundingBoxMode BoundingBoxMode,
+        IInkRectangle **Rectangle) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE FindIntersections(
+        IInkStrokes *Strokes,
+        VARIANT *Intersections) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRectangleIntersections(
+        IInkRectangle *Rectangle,
+        VARIANT *Intersections) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clip(
+        IInkRectangle *Rectangle) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE HitTestCircle(
+        LONG X,
+        LONG Y,
+        float Radius,
+        VARIANT_BOOL *Intersects) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE NearestPoint(
+        LONG X,
+        LONG Y,
+        float *Distance,
+        float *Point) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Split(
+        float SplitAt,
+        IInkStrokeDisp **NewStroke) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPacketDescriptionPropertyMetrics(
+        BSTR PropertyName,
+        LONG *Minimum,
+        LONG *Maximum,
+        TabletPropertyMetricUnit *Units,
+        float *Resolution) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPoints(
+        LONG Index,
+        LONG Count,
+        VARIANT *Points) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPoints(
+        VARIANT Points,
+        LONG Index,
+        LONG Count,
+        LONG *NumberOfPointsSet) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPacketData(
+        LONG Index,
+        LONG Count,
+        VARIANT *PacketData) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPacketValuesByProperty(
+        BSTR PropertyName,
+        LONG Index,
+        LONG Count,
+        VARIANT *PacketValues) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPacketValuesByProperty(
+        BSTR bstrPropertyName,
+        VARIANT PacketValues,
+        LONG Index,
+        LONG Count,
+        LONG *NumberOfPacketsSet) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFlattenedBezierPoints(
+        LONG FittingError,
+        VARIANT *FlattenedBezierPoints) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Transform(
+        IInkTransform *Transform,
+        VARIANT_BOOL ApplyOnPenWidth = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ScaleToRectangle(
+        IInkRectangle *Rectangle) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Move(
+        float HorizontalComponent,
+        float VerticalComponent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Rotate(
+        float Degrees,
+        float x = 0,
+        float y = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Shear(
+        float HorizontalMultiplier,
+        float VerticalMultiplier) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ScaleTransform(
+        float HorizontalMultiplier,
+        float VerticalMultiplier) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IInkStrokeDisp, 0x43242fea, 0x91d1, 0x4a72, 0x96,0x3e, 0xfb,0xb9,0x18,0x29,0xcf,0xa2)
+#endif
+#else
+typedef struct IInkStrokeDispVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInkStrokeDisp* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInkStrokeDisp* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInkStrokeDisp* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IInkStrokeDisp* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IInkStrokeDisp* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IInkStrokeDisp* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IInkStrokeDisp* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IInkStrokeDisp methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_ID)(
+        IInkStrokeDisp* This,
+        LONG *ID);
+
+    HRESULT (STDMETHODCALLTYPE *get_BezierPoints)(
+        IInkStrokeDisp* This,
+        VARIANT *Points);
+
+    HRESULT (STDMETHODCALLTYPE *get_DrawingAttributes)(
+        IInkStrokeDisp* This,
+        IInkDrawingAttributes **DrawAttrs);
+
+    HRESULT (STDMETHODCALLTYPE *putref_DrawingAttributes)(
+        IInkStrokeDisp* This,
+        IInkDrawingAttributes *DrawAttrs);
+
+    HRESULT (STDMETHODCALLTYPE *get_Ink)(
+        IInkStrokeDisp* This,
+        IInkDisp **Ink);
+
+    HRESULT (STDMETHODCALLTYPE *get_ExtendedProperties)(
+        IInkStrokeDisp* This,
+        IInkExtendedProperties **Properties);
+
+    HRESULT (STDMETHODCALLTYPE *get_PolylineCusps)(
+        IInkStrokeDisp* This,
+        VARIANT *Cusps);
+
+    HRESULT (STDMETHODCALLTYPE *get_BezierCusps)(
+        IInkStrokeDisp* This,
+        VARIANT *Cusps);
+
+    HRESULT (STDMETHODCALLTYPE *get_SelfIntersections)(
+        IInkStrokeDisp* This,
+        VARIANT *Intersections);
+
+    HRESULT (STDMETHODCALLTYPE *get_PacketCount)(
+        IInkStrokeDisp* This,
+        LONG *plCount);
+
+    HRESULT (STDMETHODCALLTYPE *get_PacketSize)(
+        IInkStrokeDisp* This,
+        LONG *plSize);
+
+    HRESULT (STDMETHODCALLTYPE *get_PacketDescription)(
+        IInkStrokeDisp* This,
+        VARIANT *PacketDescription);
+
+    HRESULT (STDMETHODCALLTYPE *get_Deleted)(
+        IInkStrokeDisp* This,
+        VARIANT_BOOL *Deleted);
+
+    HRESULT (STDMETHODCALLTYPE *GetBoundingBox)(
+        IInkStrokeDisp* This,
+        InkBoundingBoxMode BoundingBoxMode,
+        IInkRectangle **Rectangle);
+
+    HRESULT (STDMETHODCALLTYPE *FindIntersections)(
+        IInkStrokeDisp* This,
+        IInkStrokes *Strokes,
+        VARIANT *Intersections);
+
+    HRESULT (STDMETHODCALLTYPE *GetRectangleIntersections)(
+        IInkStrokeDisp* This,
+        IInkRectangle *Rectangle,
+        VARIANT *Intersections);
+
+    HRESULT (STDMETHODCALLTYPE *Clip)(
+        IInkStrokeDisp* This,
+        IInkRectangle *Rectangle);
+
+    HRESULT (STDMETHODCALLTYPE *HitTestCircle)(
+        IInkStrokeDisp* This,
+        LONG X,
+        LONG Y,
+        float Radius,
+        VARIANT_BOOL *Intersects);
+
+    HRESULT (STDMETHODCALLTYPE *NearestPoint)(
+        IInkStrokeDisp* This,
+        LONG X,
+        LONG Y,
+        float *Distance,
+        float *Point);
+
+    HRESULT (STDMETHODCALLTYPE *Split)(
+        IInkStrokeDisp* This,
+        float SplitAt,
+        IInkStrokeDisp **NewStroke);
+
+    HRESULT (STDMETHODCALLTYPE *GetPacketDescriptionPropertyMetrics)(
+        IInkStrokeDisp* This,
+        BSTR PropertyName,
+        LONG *Minimum,
+        LONG *Maximum,
+        TabletPropertyMetricUnit *Units,
+        float *Resolution);
+
+    HRESULT (STDMETHODCALLTYPE *GetPoints)(
+        IInkStrokeDisp* This,
+        LONG Index,
+        LONG Count,
+        VARIANT *Points);
+
+    HRESULT (STDMETHODCALLTYPE *SetPoints)(
+        IInkStrokeDisp* This,
+        VARIANT Points,
+        LONG Index,
+        LONG Count,
+        LONG *NumberOfPointsSet);
+
+    HRESULT (STDMETHODCALLTYPE *GetPacketData)(
+        IInkStrokeDisp* This,
+        LONG Index,
+        LONG Count,
+        VARIANT *PacketData);
+
+    HRESULT (STDMETHODCALLTYPE *GetPacketValuesByProperty)(
+        IInkStrokeDisp* This,
+        BSTR PropertyName,
+        LONG Index,
+        LONG Count,
+        VARIANT *PacketValues);
+
+    HRESULT (STDMETHODCALLTYPE *SetPacketValuesByProperty)(
+        IInkStrokeDisp* This,
+        BSTR bstrPropertyName,
+        VARIANT PacketValues,
+        LONG Index,
+        LONG Count,
+        LONG *NumberOfPacketsSet);
+
+    HRESULT (STDMETHODCALLTYPE *GetFlattenedBezierPoints)(
+        IInkStrokeDisp* This,
+        LONG FittingError,
+        VARIANT *FlattenedBezierPoints);
+
+    HRESULT (STDMETHODCALLTYPE *Transform)(
+        IInkStrokeDisp* This,
+        IInkTransform *Transform,
+        VARIANT_BOOL ApplyOnPenWidth);
+
+    HRESULT (STDMETHODCALLTYPE *ScaleToRectangle)(
+        IInkStrokeDisp* This,
+        IInkRectangle *Rectangle);
+
+    HRESULT (STDMETHODCALLTYPE *Move)(
+        IInkStrokeDisp* This,
+        float HorizontalComponent,
+        float VerticalComponent);
+
+    HRESULT (STDMETHODCALLTYPE *Rotate)(
+        IInkStrokeDisp* This,
+        float Degrees,
+        float x,
+        float y);
+
+    HRESULT (STDMETHODCALLTYPE *Shear)(
+        IInkStrokeDisp* This,
+        float HorizontalMultiplier,
+        float VerticalMultiplier);
+
+    HRESULT (STDMETHODCALLTYPE *ScaleTransform)(
+        IInkStrokeDisp* This,
+        float HorizontalMultiplier,
+        float VerticalMultiplier);
+
+    END_INTERFACE
+} IInkStrokeDispVtbl;
+interface IInkStrokeDisp {
+    CONST_VTBL IInkStrokeDispVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IInkStrokeDisp_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInkStrokeDisp_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInkStrokeDisp_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IInkStrokeDisp_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IInkStrokeDisp_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IInkStrokeDisp_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IInkStrokeDisp_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IInkStrokeDisp methods ***/
+#define IInkStrokeDisp_get_ID(This,ID) (This)->lpVtbl->get_ID(This,ID)
+#define IInkStrokeDisp_get_BezierPoints(This,Points) (This)->lpVtbl->get_BezierPoints(This,Points)
+#define IInkStrokeDisp_get_DrawingAttributes(This,DrawAttrs) (This)->lpVtbl->get_DrawingAttributes(This,DrawAttrs)
+#define IInkStrokeDisp_putref_DrawingAttributes(This,DrawAttrs) (This)->lpVtbl->putref_DrawingAttributes(This,DrawAttrs)
+#define IInkStrokeDisp_get_Ink(This,Ink) (This)->lpVtbl->get_Ink(This,Ink)
+#define IInkStrokeDisp_get_ExtendedProperties(This,Properties) (This)->lpVtbl->get_ExtendedProperties(This,Properties)
+#define IInkStrokeDisp_get_PolylineCusps(This,Cusps) (This)->lpVtbl->get_PolylineCusps(This,Cusps)
+#define IInkStrokeDisp_get_BezierCusps(This,Cusps) (This)->lpVtbl->get_BezierCusps(This,Cusps)
+#define IInkStrokeDisp_get_SelfIntersections(This,Intersections) (This)->lpVtbl->get_SelfIntersections(This,Intersections)
+#define IInkStrokeDisp_get_PacketCount(This,plCount) (This)->lpVtbl->get_PacketCount(This,plCount)
+#define IInkStrokeDisp_get_PacketSize(This,plSize) (This)->lpVtbl->get_PacketSize(This,plSize)
+#define IInkStrokeDisp_get_PacketDescription(This,PacketDescription) (This)->lpVtbl->get_PacketDescription(This,PacketDescription)
+#define IInkStrokeDisp_get_Deleted(This,Deleted) (This)->lpVtbl->get_Deleted(This,Deleted)
+#define IInkStrokeDisp_GetBoundingBox(This,BoundingBoxMode,Rectangle) (This)->lpVtbl->GetBoundingBox(This,BoundingBoxMode,Rectangle)
+#define IInkStrokeDisp_FindIntersections(This,Strokes,Intersections) (This)->lpVtbl->FindIntersections(This,Strokes,Intersections)
+#define IInkStrokeDisp_GetRectangleIntersections(This,Rectangle,Intersections) (This)->lpVtbl->GetRectangleIntersections(This,Rectangle,Intersections)
+#define IInkStrokeDisp_Clip(This,Rectangle) (This)->lpVtbl->Clip(This,Rectangle)
+#define IInkStrokeDisp_HitTestCircle(This,X,Y,Radius,Intersects) (This)->lpVtbl->HitTestCircle(This,X,Y,Radius,Intersects)
+#define IInkStrokeDisp_NearestPoint(This,X,Y,Distance,Point) (This)->lpVtbl->NearestPoint(This,X,Y,Distance,Point)
+#define IInkStrokeDisp_Split(This,SplitAt,NewStroke) (This)->lpVtbl->Split(This,SplitAt,NewStroke)
+#define IInkStrokeDisp_GetPacketDescriptionPropertyMetrics(This,PropertyName,Minimum,Maximum,Units,Resolution) (This)->lpVtbl->GetPacketDescriptionPropertyMetrics(This,PropertyName,Minimum,Maximum,Units,Resolution)
+#define IInkStrokeDisp_GetPoints(This,Index,Count,Points) (This)->lpVtbl->GetPoints(This,Index,Count,Points)
+#define IInkStrokeDisp_SetPoints(This,Points,Index,Count,NumberOfPointsSet) (This)->lpVtbl->SetPoints(This,Points,Index,Count,NumberOfPointsSet)
+#define IInkStrokeDisp_GetPacketData(This,Index,Count,PacketData) (This)->lpVtbl->GetPacketData(This,Index,Count,PacketData)
+#define IInkStrokeDisp_GetPacketValuesByProperty(This,PropertyName,Index,Count,PacketValues) (This)->lpVtbl->GetPacketValuesByProperty(This,PropertyName,Index,Count,PacketValues)
+#define IInkStrokeDisp_SetPacketValuesByProperty(This,bstrPropertyName,PacketValues,Index,Count,NumberOfPacketsSet) (This)->lpVtbl->SetPacketValuesByProperty(This,bstrPropertyName,PacketValues,Index,Count,NumberOfPacketsSet)
+#define IInkStrokeDisp_GetFlattenedBezierPoints(This,FittingError,FlattenedBezierPoints) (This)->lpVtbl->GetFlattenedBezierPoints(This,FittingError,FlattenedBezierPoints)
+#define IInkStrokeDisp_Transform(This,Transform,ApplyOnPenWidth) (This)->lpVtbl->Transform(This,Transform,ApplyOnPenWidth)
+#define IInkStrokeDisp_ScaleToRectangle(This,Rectangle) (This)->lpVtbl->ScaleToRectangle(This,Rectangle)
+#define IInkStrokeDisp_Move(This,HorizontalComponent,VerticalComponent) (This)->lpVtbl->Move(This,HorizontalComponent,VerticalComponent)
+#define IInkStrokeDisp_Rotate(This,Degrees,x,y) (This)->lpVtbl->Rotate(This,Degrees,x,y)
+#define IInkStrokeDisp_Shear(This,HorizontalMultiplier,VerticalMultiplier) (This)->lpVtbl->Shear(This,HorizontalMultiplier,VerticalMultiplier)
+#define IInkStrokeDisp_ScaleTransform(This,HorizontalMultiplier,VerticalMultiplier) (This)->lpVtbl->ScaleTransform(This,HorizontalMultiplier,VerticalMultiplier)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IInkStrokeDisp_QueryInterface(IInkStrokeDisp* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IInkStrokeDisp_AddRef(IInkStrokeDisp* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IInkStrokeDisp_Release(IInkStrokeDisp* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IInkStrokeDisp_GetTypeInfoCount(IInkStrokeDisp* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_GetTypeInfo(IInkStrokeDisp* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_GetIDsOfNames(IInkStrokeDisp* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_Invoke(IInkStrokeDisp* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IInkStrokeDisp methods ***/
+static FORCEINLINE HRESULT IInkStrokeDisp_get_ID(IInkStrokeDisp* This,LONG *ID) {
+    return This->lpVtbl->get_ID(This,ID);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_get_BezierPoints(IInkStrokeDisp* This,VARIANT *Points) {
+    return This->lpVtbl->get_BezierPoints(This,Points);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_get_DrawingAttributes(IInkStrokeDisp* This,IInkDrawingAttributes **DrawAttrs) {
+    return This->lpVtbl->get_DrawingAttributes(This,DrawAttrs);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_putref_DrawingAttributes(IInkStrokeDisp* This,IInkDrawingAttributes *DrawAttrs) {
+    return This->lpVtbl->putref_DrawingAttributes(This,DrawAttrs);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_get_Ink(IInkStrokeDisp* This,IInkDisp **Ink) {
+    return This->lpVtbl->get_Ink(This,Ink);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_get_ExtendedProperties(IInkStrokeDisp* This,IInkExtendedProperties **Properties) {
+    return This->lpVtbl->get_ExtendedProperties(This,Properties);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_get_PolylineCusps(IInkStrokeDisp* This,VARIANT *Cusps) {
+    return This->lpVtbl->get_PolylineCusps(This,Cusps);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_get_BezierCusps(IInkStrokeDisp* This,VARIANT *Cusps) {
+    return This->lpVtbl->get_BezierCusps(This,Cusps);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_get_SelfIntersections(IInkStrokeDisp* This,VARIANT *Intersections) {
+    return This->lpVtbl->get_SelfIntersections(This,Intersections);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_get_PacketCount(IInkStrokeDisp* This,LONG *plCount) {
+    return This->lpVtbl->get_PacketCount(This,plCount);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_get_PacketSize(IInkStrokeDisp* This,LONG *plSize) {
+    return This->lpVtbl->get_PacketSize(This,plSize);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_get_PacketDescription(IInkStrokeDisp* This,VARIANT *PacketDescription) {
+    return This->lpVtbl->get_PacketDescription(This,PacketDescription);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_get_Deleted(IInkStrokeDisp* This,VARIANT_BOOL *Deleted) {
+    return This->lpVtbl->get_Deleted(This,Deleted);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_GetBoundingBox(IInkStrokeDisp* This,InkBoundingBoxMode BoundingBoxMode,IInkRectangle **Rectangle) {
+    return This->lpVtbl->GetBoundingBox(This,BoundingBoxMode,Rectangle);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_FindIntersections(IInkStrokeDisp* This,IInkStrokes *Strokes,VARIANT *Intersections) {
+    return This->lpVtbl->FindIntersections(This,Strokes,Intersections);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_GetRectangleIntersections(IInkStrokeDisp* This,IInkRectangle *Rectangle,VARIANT *Intersections) {
+    return This->lpVtbl->GetRectangleIntersections(This,Rectangle,Intersections);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_Clip(IInkStrokeDisp* This,IInkRectangle *Rectangle) {
+    return This->lpVtbl->Clip(This,Rectangle);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_HitTestCircle(IInkStrokeDisp* This,LONG X,LONG Y,float Radius,VARIANT_BOOL *Intersects) {
+    return This->lpVtbl->HitTestCircle(This,X,Y,Radius,Intersects);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_NearestPoint(IInkStrokeDisp* This,LONG X,LONG Y,float *Distance,float *Point) {
+    return This->lpVtbl->NearestPoint(This,X,Y,Distance,Point);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_Split(IInkStrokeDisp* This,float SplitAt,IInkStrokeDisp **NewStroke) {
+    return This->lpVtbl->Split(This,SplitAt,NewStroke);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_GetPacketDescriptionPropertyMetrics(IInkStrokeDisp* This,BSTR PropertyName,LONG *Minimum,LONG *Maximum,TabletPropertyMetricUnit *Units,float *Resolution) {
+    return This->lpVtbl->GetPacketDescriptionPropertyMetrics(This,PropertyName,Minimum,Maximum,Units,Resolution);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_GetPoints(IInkStrokeDisp* This,LONG Index,LONG Count,VARIANT *Points) {
+    return This->lpVtbl->GetPoints(This,Index,Count,Points);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_SetPoints(IInkStrokeDisp* This,VARIANT Points,LONG Index,LONG Count,LONG *NumberOfPointsSet) {
+    return This->lpVtbl->SetPoints(This,Points,Index,Count,NumberOfPointsSet);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_GetPacketData(IInkStrokeDisp* This,LONG Index,LONG Count,VARIANT *PacketData) {
+    return This->lpVtbl->GetPacketData(This,Index,Count,PacketData);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_GetPacketValuesByProperty(IInkStrokeDisp* This,BSTR PropertyName,LONG Index,LONG Count,VARIANT *PacketValues) {
+    return This->lpVtbl->GetPacketValuesByProperty(This,PropertyName,Index,Count,PacketValues);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_SetPacketValuesByProperty(IInkStrokeDisp* This,BSTR bstrPropertyName,VARIANT PacketValues,LONG Index,LONG Count,LONG *NumberOfPacketsSet) {
+    return This->lpVtbl->SetPacketValuesByProperty(This,bstrPropertyName,PacketValues,Index,Count,NumberOfPacketsSet);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_GetFlattenedBezierPoints(IInkStrokeDisp* This,LONG FittingError,VARIANT *FlattenedBezierPoints) {
+    return This->lpVtbl->GetFlattenedBezierPoints(This,FittingError,FlattenedBezierPoints);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_Transform(IInkStrokeDisp* This,IInkTransform *Transform,VARIANT_BOOL ApplyOnPenWidth) {
+    return This->lpVtbl->Transform(This,Transform,ApplyOnPenWidth);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_ScaleToRectangle(IInkStrokeDisp* This,IInkRectangle *Rectangle) {
+    return This->lpVtbl->ScaleToRectangle(This,Rectangle);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_Move(IInkStrokeDisp* This,float HorizontalComponent,float VerticalComponent) {
+    return This->lpVtbl->Move(This,HorizontalComponent,VerticalComponent);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_Rotate(IInkStrokeDisp* This,float Degrees,float x,float y) {
+    return This->lpVtbl->Rotate(This,Degrees,x,y);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_Shear(IInkStrokeDisp* This,float HorizontalMultiplier,float VerticalMultiplier) {
+    return This->lpVtbl->Shear(This,HorizontalMultiplier,VerticalMultiplier);
+}
+static FORCEINLINE HRESULT IInkStrokeDisp_ScaleTransform(IInkStrokeDisp* This,float HorizontalMultiplier,float VerticalMultiplier) {
+    return This->lpVtbl->ScaleTransform(This,HorizontalMultiplier,VerticalMultiplier);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_get_ID_Proxy(
+    IInkStrokeDisp* This,
+    LONG *ID);
+void __RPC_STUB IInkStrokeDisp_get_ID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_get_BezierPoints_Proxy(
+    IInkStrokeDisp* This,
+    VARIANT *Points);
+void __RPC_STUB IInkStrokeDisp_get_BezierPoints_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_get_DrawingAttributes_Proxy(
+    IInkStrokeDisp* This,
+    IInkDrawingAttributes **DrawAttrs);
+void __RPC_STUB IInkStrokeDisp_get_DrawingAttributes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_putref_DrawingAttributes_Proxy(
+    IInkStrokeDisp* This,
+    IInkDrawingAttributes *DrawAttrs);
+void __RPC_STUB IInkStrokeDisp_putref_DrawingAttributes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_get_Ink_Proxy(
+    IInkStrokeDisp* This,
+    IInkDisp **Ink);
+void __RPC_STUB IInkStrokeDisp_get_Ink_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_get_ExtendedProperties_Proxy(
+    IInkStrokeDisp* This,
+    IInkExtendedProperties **Properties);
+void __RPC_STUB IInkStrokeDisp_get_ExtendedProperties_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_get_PolylineCusps_Proxy(
+    IInkStrokeDisp* This,
+    VARIANT *Cusps);
+void __RPC_STUB IInkStrokeDisp_get_PolylineCusps_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_get_BezierCusps_Proxy(
+    IInkStrokeDisp* This,
+    VARIANT *Cusps);
+void __RPC_STUB IInkStrokeDisp_get_BezierCusps_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_get_SelfIntersections_Proxy(
+    IInkStrokeDisp* This,
+    VARIANT *Intersections);
+void __RPC_STUB IInkStrokeDisp_get_SelfIntersections_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_get_PacketCount_Proxy(
+    IInkStrokeDisp* This,
+    LONG *plCount);
+void __RPC_STUB IInkStrokeDisp_get_PacketCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_get_PacketSize_Proxy(
+    IInkStrokeDisp* This,
+    LONG *plSize);
+void __RPC_STUB IInkStrokeDisp_get_PacketSize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_get_PacketDescription_Proxy(
+    IInkStrokeDisp* This,
+    VARIANT *PacketDescription);
+void __RPC_STUB IInkStrokeDisp_get_PacketDescription_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_get_Deleted_Proxy(
+    IInkStrokeDisp* This,
+    VARIANT_BOOL *Deleted);
+void __RPC_STUB IInkStrokeDisp_get_Deleted_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_GetBoundingBox_Proxy(
+    IInkStrokeDisp* This,
+    InkBoundingBoxMode BoundingBoxMode,
+    IInkRectangle **Rectangle);
+void __RPC_STUB IInkStrokeDisp_GetBoundingBox_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_FindIntersections_Proxy(
+    IInkStrokeDisp* This,
+    IInkStrokes *Strokes,
+    VARIANT *Intersections);
+void __RPC_STUB IInkStrokeDisp_FindIntersections_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_GetRectangleIntersections_Proxy(
+    IInkStrokeDisp* This,
+    IInkRectangle *Rectangle,
+    VARIANT *Intersections);
+void __RPC_STUB IInkStrokeDisp_GetRectangleIntersections_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_Clip_Proxy(
+    IInkStrokeDisp* This,
+    IInkRectangle *Rectangle);
+void __RPC_STUB IInkStrokeDisp_Clip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_HitTestCircle_Proxy(
+    IInkStrokeDisp* This,
+    LONG X,
+    LONG Y,
+    float Radius,
+    VARIANT_BOOL *Intersects);
+void __RPC_STUB IInkStrokeDisp_HitTestCircle_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_NearestPoint_Proxy(
+    IInkStrokeDisp* This,
+    LONG X,
+    LONG Y,
+    float *Distance,
+    float *Point);
+void __RPC_STUB IInkStrokeDisp_NearestPoint_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_Split_Proxy(
+    IInkStrokeDisp* This,
+    float SplitAt,
+    IInkStrokeDisp **NewStroke);
+void __RPC_STUB IInkStrokeDisp_Split_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_GetPacketDescriptionPropertyMetrics_Proxy(
+    IInkStrokeDisp* This,
+    BSTR PropertyName,
+    LONG *Minimum,
+    LONG *Maximum,
+    TabletPropertyMetricUnit *Units,
+    float *Resolution);
+void __RPC_STUB IInkStrokeDisp_GetPacketDescriptionPropertyMetrics_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_GetPoints_Proxy(
+    IInkStrokeDisp* This,
+    LONG Index,
+    LONG Count,
+    VARIANT *Points);
+void __RPC_STUB IInkStrokeDisp_GetPoints_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_SetPoints_Proxy(
+    IInkStrokeDisp* This,
+    VARIANT Points,
+    LONG Index,
+    LONG Count,
+    LONG *NumberOfPointsSet);
+void __RPC_STUB IInkStrokeDisp_SetPoints_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_GetPacketData_Proxy(
+    IInkStrokeDisp* This,
+    LONG Index,
+    LONG Count,
+    VARIANT *PacketData);
+void __RPC_STUB IInkStrokeDisp_GetPacketData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_GetPacketValuesByProperty_Proxy(
+    IInkStrokeDisp* This,
+    BSTR PropertyName,
+    LONG Index,
+    LONG Count,
+    VARIANT *PacketValues);
+void __RPC_STUB IInkStrokeDisp_GetPacketValuesByProperty_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_SetPacketValuesByProperty_Proxy(
+    IInkStrokeDisp* This,
+    BSTR bstrPropertyName,
+    VARIANT PacketValues,
+    LONG Index,
+    LONG Count,
+    LONG *NumberOfPacketsSet);
+void __RPC_STUB IInkStrokeDisp_SetPacketValuesByProperty_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_GetFlattenedBezierPoints_Proxy(
+    IInkStrokeDisp* This,
+    LONG FittingError,
+    VARIANT *FlattenedBezierPoints);
+void __RPC_STUB IInkStrokeDisp_GetFlattenedBezierPoints_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_Transform_Proxy(
+    IInkStrokeDisp* This,
+    IInkTransform *Transform,
+    VARIANT_BOOL ApplyOnPenWidth);
+void __RPC_STUB IInkStrokeDisp_Transform_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_ScaleToRectangle_Proxy(
+    IInkStrokeDisp* This,
+    IInkRectangle *Rectangle);
+void __RPC_STUB IInkStrokeDisp_ScaleToRectangle_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_Move_Proxy(
+    IInkStrokeDisp* This,
+    float HorizontalComponent,
+    float VerticalComponent);
+void __RPC_STUB IInkStrokeDisp_Move_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_Rotate_Proxy(
+    IInkStrokeDisp* This,
+    float Degrees,
+    float x,
+    float y);
+void __RPC_STUB IInkStrokeDisp_Rotate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_Shear_Proxy(
+    IInkStrokeDisp* This,
+    float HorizontalMultiplier,
+    float VerticalMultiplier);
+void __RPC_STUB IInkStrokeDisp_Shear_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokeDisp_ScaleTransform_Proxy(
+    IInkStrokeDisp* This,
+    float HorizontalMultiplier,
+    float VerticalMultiplier);
+void __RPC_STUB IInkStrokeDisp_ScaleTransform_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInkStrokeDisp_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInkCustomStrokes interface
+ */
+#ifndef __IInkCustomStrokes_INTERFACE_DEFINED__
+#define __IInkCustomStrokes_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInkCustomStrokes, 0x7e23a88f, 0xc30e, 0x420f, 0x9b,0xdb, 0x28,0x90,0x25,0x43,0xf0,0xc1);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("7e23a88f-c30e-420f-9bdb-28902543f0c1")
+IInkCustomStrokes : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Count(
+        LONG *Count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
+        IUnknown **_NewEnum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Item(
+        VARIANT Identifier,
+        IInkStrokes **Strokes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Add(
+        BSTR Name,
+        IInkStrokes *Strokes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Remove(
+        VARIANT Identifier) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clear(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IInkCustomStrokes, 0x7e23a88f, 0xc30e, 0x420f, 0x9b,0xdb, 0x28,0x90,0x25,0x43,0xf0,0xc1)
+#endif
+#else
+typedef struct IInkCustomStrokesVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInkCustomStrokes* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInkCustomStrokes* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInkCustomStrokes* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IInkCustomStrokes* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IInkCustomStrokes* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IInkCustomStrokes* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IInkCustomStrokes* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IInkCustomStrokes methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Count)(
+        IInkCustomStrokes* This,
+        LONG *Count);
+
+    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
+        IInkCustomStrokes* This,
+        IUnknown **_NewEnum);
+
+    HRESULT (STDMETHODCALLTYPE *Item)(
+        IInkCustomStrokes* This,
+        VARIANT Identifier,
+        IInkStrokes **Strokes);
+
+    HRESULT (STDMETHODCALLTYPE *Add)(
+        IInkCustomStrokes* This,
+        BSTR Name,
+        IInkStrokes *Strokes);
+
+    HRESULT (STDMETHODCALLTYPE *Remove)(
+        IInkCustomStrokes* This,
+        VARIANT Identifier);
+
+    HRESULT (STDMETHODCALLTYPE *Clear)(
+        IInkCustomStrokes* This);
+
+    END_INTERFACE
+} IInkCustomStrokesVtbl;
+interface IInkCustomStrokes {
+    CONST_VTBL IInkCustomStrokesVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IInkCustomStrokes_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInkCustomStrokes_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInkCustomStrokes_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IInkCustomStrokes_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IInkCustomStrokes_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IInkCustomStrokes_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IInkCustomStrokes_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IInkCustomStrokes methods ***/
+#define IInkCustomStrokes_get_Count(This,Count) (This)->lpVtbl->get_Count(This,Count)
+#define IInkCustomStrokes_get__NewEnum(This,_NewEnum) (This)->lpVtbl->get__NewEnum(This,_NewEnum)
+#define IInkCustomStrokes_Item(This,Identifier,Strokes) (This)->lpVtbl->Item(This,Identifier,Strokes)
+#define IInkCustomStrokes_Add(This,Name,Strokes) (This)->lpVtbl->Add(This,Name,Strokes)
+#define IInkCustomStrokes_Remove(This,Identifier) (This)->lpVtbl->Remove(This,Identifier)
+#define IInkCustomStrokes_Clear(This) (This)->lpVtbl->Clear(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IInkCustomStrokes_QueryInterface(IInkCustomStrokes* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IInkCustomStrokes_AddRef(IInkCustomStrokes* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IInkCustomStrokes_Release(IInkCustomStrokes* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IInkCustomStrokes_GetTypeInfoCount(IInkCustomStrokes* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IInkCustomStrokes_GetTypeInfo(IInkCustomStrokes* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IInkCustomStrokes_GetIDsOfNames(IInkCustomStrokes* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IInkCustomStrokes_Invoke(IInkCustomStrokes* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IInkCustomStrokes methods ***/
+static FORCEINLINE HRESULT IInkCustomStrokes_get_Count(IInkCustomStrokes* This,LONG *Count) {
+    return This->lpVtbl->get_Count(This,Count);
+}
+static FORCEINLINE HRESULT IInkCustomStrokes_get__NewEnum(IInkCustomStrokes* This,IUnknown **_NewEnum) {
+    return This->lpVtbl->get__NewEnum(This,_NewEnum);
+}
+static FORCEINLINE HRESULT IInkCustomStrokes_Item(IInkCustomStrokes* This,VARIANT Identifier,IInkStrokes **Strokes) {
+    return This->lpVtbl->Item(This,Identifier,Strokes);
+}
+static FORCEINLINE HRESULT IInkCustomStrokes_Add(IInkCustomStrokes* This,BSTR Name,IInkStrokes *Strokes) {
+    return This->lpVtbl->Add(This,Name,Strokes);
+}
+static FORCEINLINE HRESULT IInkCustomStrokes_Remove(IInkCustomStrokes* This,VARIANT Identifier) {
+    return This->lpVtbl->Remove(This,Identifier);
+}
+static FORCEINLINE HRESULT IInkCustomStrokes_Clear(IInkCustomStrokes* This) {
+    return This->lpVtbl->Clear(This);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInkCustomStrokes_get_Count_Proxy(
+    IInkCustomStrokes* This,
+    LONG *Count);
+void __RPC_STUB IInkCustomStrokes_get_Count_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCustomStrokes_get__NewEnum_Proxy(
+    IInkCustomStrokes* This,
+    IUnknown **_NewEnum);
+void __RPC_STUB IInkCustomStrokes_get__NewEnum_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCustomStrokes_Item_Proxy(
+    IInkCustomStrokes* This,
+    VARIANT Identifier,
+    IInkStrokes **Strokes);
+void __RPC_STUB IInkCustomStrokes_Item_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCustomStrokes_Add_Proxy(
+    IInkCustomStrokes* This,
+    BSTR Name,
+    IInkStrokes *Strokes);
+void __RPC_STUB IInkCustomStrokes_Add_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCustomStrokes_Remove_Proxy(
+    IInkCustomStrokes* This,
+    VARIANT Identifier);
+void __RPC_STUB IInkCustomStrokes_Remove_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCustomStrokes_Clear_Proxy(
+    IInkCustomStrokes* This);
+void __RPC_STUB IInkCustomStrokes_Clear_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInkCustomStrokes_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInkDisp interface
+ */
+#ifndef __IInkDisp_INTERFACE_DEFINED__
+#define __IInkDisp_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInkDisp, 0x9d398fa0, 0xc4e2, 0x4fcd, 0x99,0x73, 0x97,0x5c,0xaa,0xf4,0x7e,0xa6);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("9d398fa0-c4e2-4fcd-9973-975caaf47ea6")
+IInkDisp : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Strokes(
+        IInkStrokes **Strokes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ExtendedProperties(
+        IInkExtendedProperties **Properties) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Dirty(
+        VARIANT_BOOL *Dirty) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Dirty(
+        VARIANT_BOOL Dirty) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_CustomStrokes(
+        IInkCustomStrokes **ppunkInkCustomStrokes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBoundingBox(
+        InkBoundingBoxMode BoundingBoxMode,
+        IInkRectangle **Rectangle) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DeleteStrokes(
+        IInkStrokes *Strokes = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DeleteStroke(
+        IInkStrokeDisp *Stroke) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ExtractStrokes(
+        IInkStrokes *Strokes,
+        InkExtractFlags ExtractFlags,
+        IInkDisp **ExtractedInk) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ExtractWithRectangle(
+        IInkRectangle *Rectangle,
+        InkExtractFlags extractFlags,
+        IInkDisp **ExtractedInk) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clip(
+        IInkRectangle *Rectangle) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IInkDisp **NewInk) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE HitTestCircle(
+        LONG X,
+        LONG Y,
+        float radius,
+        IInkStrokes **Strokes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE HitTestWithRectangle(
+        IInkRectangle *SelectionRectangle,
+        float IntersectPercent,
+        IInkStrokes **Strokes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE HitTestWithLasso(
+        VARIANT Points,
+        float IntersectPercent,
+        VARIANT *LassoPoints,
+        IInkStrokes **Strokes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE NearestPoint(
+        LONG X,
+        LONG Y,
+        float *PointOnStroke,
+        float *DistanceFromPacket,
+        IInkStrokeDisp **Stroke) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateStrokes(
+        VARIANT StrokeIds,
+        IInkStrokes **Strokes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddStrokesAtRectangle(
+        IInkStrokes *SourceStrokes,
+        IInkRectangle *TargetRectangle) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Save(
+        InkPersistenceFormat PersistenceFormat,
+        InkPersistenceCompressionMode CompressionMode,
+        VARIANT *Data) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Load(
+        VARIANT Data) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateStroke(
+        VARIANT PacketData,
+        VARIANT PacketDescription,
+        IInkStrokeDisp **Stroke) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ClipboardCopyWithRectangle(
+        IInkRectangle *Rectangle,
+        InkClipboardFormats ClipboardFormats,
+        InkClipboardModes ClipboardModes,
+        IDataObject **DataObject) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ClipboardCopy(
+        IInkStrokes *strokes,
+        InkClipboardFormats ClipboardFormats,
+        InkClipboardModes ClipboardModes,
+        IDataObject **DataObject) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CanPaste(
+        IDataObject *DataObject,
+        VARIANT_BOOL *CanPaste) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ClipboardPaste(
+        LONG x,
+        LONG y,
+        IDataObject *DataObject,
+        IInkStrokes **Strokes) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IInkDisp, 0x9d398fa0, 0xc4e2, 0x4fcd, 0x99,0x73, 0x97,0x5c,0xaa,0xf4,0x7e,0xa6)
+#endif
+#else
+typedef struct IInkDispVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInkDisp* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInkDisp* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInkDisp* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IInkDisp* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IInkDisp* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IInkDisp* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IInkDisp* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IInkDisp methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Strokes)(
+        IInkDisp* This,
+        IInkStrokes **Strokes);
+
+    HRESULT (STDMETHODCALLTYPE *get_ExtendedProperties)(
+        IInkDisp* This,
+        IInkExtendedProperties **Properties);
+
+    HRESULT (STDMETHODCALLTYPE *get_Dirty)(
+        IInkDisp* This,
+        VARIANT_BOOL *Dirty);
+
+    HRESULT (STDMETHODCALLTYPE *put_Dirty)(
+        IInkDisp* This,
+        VARIANT_BOOL Dirty);
+
+    HRESULT (STDMETHODCALLTYPE *get_CustomStrokes)(
+        IInkDisp* This,
+        IInkCustomStrokes **ppunkInkCustomStrokes);
+
+    HRESULT (STDMETHODCALLTYPE *GetBoundingBox)(
+        IInkDisp* This,
+        InkBoundingBoxMode BoundingBoxMode,
+        IInkRectangle **Rectangle);
+
+    HRESULT (STDMETHODCALLTYPE *DeleteStrokes)(
+        IInkDisp* This,
+        IInkStrokes *Strokes);
+
+    HRESULT (STDMETHODCALLTYPE *DeleteStroke)(
+        IInkDisp* This,
+        IInkStrokeDisp *Stroke);
+
+    HRESULT (STDMETHODCALLTYPE *ExtractStrokes)(
+        IInkDisp* This,
+        IInkStrokes *Strokes,
+        InkExtractFlags ExtractFlags,
+        IInkDisp **ExtractedInk);
+
+    HRESULT (STDMETHODCALLTYPE *ExtractWithRectangle)(
+        IInkDisp* This,
+        IInkRectangle *Rectangle,
+        InkExtractFlags extractFlags,
+        IInkDisp **ExtractedInk);
+
+    HRESULT (STDMETHODCALLTYPE *Clip)(
+        IInkDisp* This,
+        IInkRectangle *Rectangle);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IInkDisp* This,
+        IInkDisp **NewInk);
+
+    HRESULT (STDMETHODCALLTYPE *HitTestCircle)(
+        IInkDisp* This,
+        LONG X,
+        LONG Y,
+        float radius,
+        IInkStrokes **Strokes);
+
+    HRESULT (STDMETHODCALLTYPE *HitTestWithRectangle)(
+        IInkDisp* This,
+        IInkRectangle *SelectionRectangle,
+        float IntersectPercent,
+        IInkStrokes **Strokes);
+
+    HRESULT (STDMETHODCALLTYPE *HitTestWithLasso)(
+        IInkDisp* This,
+        VARIANT Points,
+        float IntersectPercent,
+        VARIANT *LassoPoints,
+        IInkStrokes **Strokes);
+
+    HRESULT (STDMETHODCALLTYPE *NearestPoint)(
+        IInkDisp* This,
+        LONG X,
+        LONG Y,
+        float *PointOnStroke,
+        float *DistanceFromPacket,
+        IInkStrokeDisp **Stroke);
+
+    HRESULT (STDMETHODCALLTYPE *CreateStrokes)(
+        IInkDisp* This,
+        VARIANT StrokeIds,
+        IInkStrokes **Strokes);
+
+    HRESULT (STDMETHODCALLTYPE *AddStrokesAtRectangle)(
+        IInkDisp* This,
+        IInkStrokes *SourceStrokes,
+        IInkRectangle *TargetRectangle);
+
+    HRESULT (STDMETHODCALLTYPE *Save)(
+        IInkDisp* This,
+        InkPersistenceFormat PersistenceFormat,
+        InkPersistenceCompressionMode CompressionMode,
+        VARIANT *Data);
+
+    HRESULT (STDMETHODCALLTYPE *Load)(
+        IInkDisp* This,
+        VARIANT Data);
+
+    HRESULT (STDMETHODCALLTYPE *CreateStroke)(
+        IInkDisp* This,
+        VARIANT PacketData,
+        VARIANT PacketDescription,
+        IInkStrokeDisp **Stroke);
+
+    HRESULT (STDMETHODCALLTYPE *ClipboardCopyWithRectangle)(
+        IInkDisp* This,
+        IInkRectangle *Rectangle,
+        InkClipboardFormats ClipboardFormats,
+        InkClipboardModes ClipboardModes,
+        IDataObject **DataObject);
+
+    HRESULT (STDMETHODCALLTYPE *ClipboardCopy)(
+        IInkDisp* This,
+        IInkStrokes *strokes,
+        InkClipboardFormats ClipboardFormats,
+        InkClipboardModes ClipboardModes,
+        IDataObject **DataObject);
+
+    HRESULT (STDMETHODCALLTYPE *CanPaste)(
+        IInkDisp* This,
+        IDataObject *DataObject,
+        VARIANT_BOOL *CanPaste);
+
+    HRESULT (STDMETHODCALLTYPE *ClipboardPaste)(
+        IInkDisp* This,
+        LONG x,
+        LONG y,
+        IDataObject *DataObject,
+        IInkStrokes **Strokes);
+
+    END_INTERFACE
+} IInkDispVtbl;
+interface IInkDisp {
+    CONST_VTBL IInkDispVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IInkDisp_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInkDisp_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInkDisp_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IInkDisp_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IInkDisp_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IInkDisp_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IInkDisp_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IInkDisp methods ***/
+#define IInkDisp_get_Strokes(This,Strokes) (This)->lpVtbl->get_Strokes(This,Strokes)
+#define IInkDisp_get_ExtendedProperties(This,Properties) (This)->lpVtbl->get_ExtendedProperties(This,Properties)
+#define IInkDisp_get_Dirty(This,Dirty) (This)->lpVtbl->get_Dirty(This,Dirty)
+#define IInkDisp_put_Dirty(This,Dirty) (This)->lpVtbl->put_Dirty(This,Dirty)
+#define IInkDisp_get_CustomStrokes(This,ppunkInkCustomStrokes) (This)->lpVtbl->get_CustomStrokes(This,ppunkInkCustomStrokes)
+#define IInkDisp_GetBoundingBox(This,BoundingBoxMode,Rectangle) (This)->lpVtbl->GetBoundingBox(This,BoundingBoxMode,Rectangle)
+#define IInkDisp_DeleteStrokes(This,Strokes) (This)->lpVtbl->DeleteStrokes(This,Strokes)
+#define IInkDisp_DeleteStroke(This,Stroke) (This)->lpVtbl->DeleteStroke(This,Stroke)
+#define IInkDisp_ExtractStrokes(This,Strokes,ExtractFlags,ExtractedInk) (This)->lpVtbl->ExtractStrokes(This,Strokes,ExtractFlags,ExtractedInk)
+#define IInkDisp_ExtractWithRectangle(This,Rectangle,extractFlags,ExtractedInk) (This)->lpVtbl->ExtractWithRectangle(This,Rectangle,extractFlags,ExtractedInk)
+#define IInkDisp_Clip(This,Rectangle) (This)->lpVtbl->Clip(This,Rectangle)
+#define IInkDisp_Clone(This,NewInk) (This)->lpVtbl->Clone(This,NewInk)
+#define IInkDisp_HitTestCircle(This,X,Y,radius,Strokes) (This)->lpVtbl->HitTestCircle(This,X,Y,radius,Strokes)
+#define IInkDisp_HitTestWithRectangle(This,SelectionRectangle,IntersectPercent,Strokes) (This)->lpVtbl->HitTestWithRectangle(This,SelectionRectangle,IntersectPercent,Strokes)
+#define IInkDisp_HitTestWithLasso(This,Points,IntersectPercent,LassoPoints,Strokes) (This)->lpVtbl->HitTestWithLasso(This,Points,IntersectPercent,LassoPoints,Strokes)
+#define IInkDisp_NearestPoint(This,X,Y,PointOnStroke,DistanceFromPacket,Stroke) (This)->lpVtbl->NearestPoint(This,X,Y,PointOnStroke,DistanceFromPacket,Stroke)
+#define IInkDisp_CreateStrokes(This,StrokeIds,Strokes) (This)->lpVtbl->CreateStrokes(This,StrokeIds,Strokes)
+#define IInkDisp_AddStrokesAtRectangle(This,SourceStrokes,TargetRectangle) (This)->lpVtbl->AddStrokesAtRectangle(This,SourceStrokes,TargetRectangle)
+#define IInkDisp_Save(This,PersistenceFormat,CompressionMode,Data) (This)->lpVtbl->Save(This,PersistenceFormat,CompressionMode,Data)
+#define IInkDisp_Load(This,Data) (This)->lpVtbl->Load(This,Data)
+#define IInkDisp_CreateStroke(This,PacketData,PacketDescription,Stroke) (This)->lpVtbl->CreateStroke(This,PacketData,PacketDescription,Stroke)
+#define IInkDisp_ClipboardCopyWithRectangle(This,Rectangle,ClipboardFormats,ClipboardModes,DataObject) (This)->lpVtbl->ClipboardCopyWithRectangle(This,Rectangle,ClipboardFormats,ClipboardModes,DataObject)
+#define IInkDisp_ClipboardCopy(This,strokes,ClipboardFormats,ClipboardModes,DataObject) (This)->lpVtbl->ClipboardCopy(This,strokes,ClipboardFormats,ClipboardModes,DataObject)
+#define IInkDisp_CanPaste(This,DataObject,CanPaste) (This)->lpVtbl->CanPaste(This,DataObject,CanPaste)
+#define IInkDisp_ClipboardPaste(This,x,y,DataObject,Strokes) (This)->lpVtbl->ClipboardPaste(This,x,y,DataObject,Strokes)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IInkDisp_QueryInterface(IInkDisp* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IInkDisp_AddRef(IInkDisp* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IInkDisp_Release(IInkDisp* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IInkDisp_GetTypeInfoCount(IInkDisp* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IInkDisp_GetTypeInfo(IInkDisp* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IInkDisp_GetIDsOfNames(IInkDisp* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IInkDisp_Invoke(IInkDisp* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IInkDisp methods ***/
+static FORCEINLINE HRESULT IInkDisp_get_Strokes(IInkDisp* This,IInkStrokes **Strokes) {
+    return This->lpVtbl->get_Strokes(This,Strokes);
+}
+static FORCEINLINE HRESULT IInkDisp_get_ExtendedProperties(IInkDisp* This,IInkExtendedProperties **Properties) {
+    return This->lpVtbl->get_ExtendedProperties(This,Properties);
+}
+static FORCEINLINE HRESULT IInkDisp_get_Dirty(IInkDisp* This,VARIANT_BOOL *Dirty) {
+    return This->lpVtbl->get_Dirty(This,Dirty);
+}
+static FORCEINLINE HRESULT IInkDisp_put_Dirty(IInkDisp* This,VARIANT_BOOL Dirty) {
+    return This->lpVtbl->put_Dirty(This,Dirty);
+}
+static FORCEINLINE HRESULT IInkDisp_get_CustomStrokes(IInkDisp* This,IInkCustomStrokes **ppunkInkCustomStrokes) {
+    return This->lpVtbl->get_CustomStrokes(This,ppunkInkCustomStrokes);
+}
+static FORCEINLINE HRESULT IInkDisp_GetBoundingBox(IInkDisp* This,InkBoundingBoxMode BoundingBoxMode,IInkRectangle **Rectangle) {
+    return This->lpVtbl->GetBoundingBox(This,BoundingBoxMode,Rectangle);
+}
+static FORCEINLINE HRESULT IInkDisp_DeleteStrokes(IInkDisp* This,IInkStrokes *Strokes) {
+    return This->lpVtbl->DeleteStrokes(This,Strokes);
+}
+static FORCEINLINE HRESULT IInkDisp_DeleteStroke(IInkDisp* This,IInkStrokeDisp *Stroke) {
+    return This->lpVtbl->DeleteStroke(This,Stroke);
+}
+static FORCEINLINE HRESULT IInkDisp_ExtractStrokes(IInkDisp* This,IInkStrokes *Strokes,InkExtractFlags ExtractFlags,IInkDisp **ExtractedInk) {
+    return This->lpVtbl->ExtractStrokes(This,Strokes,ExtractFlags,ExtractedInk);
+}
+static FORCEINLINE HRESULT IInkDisp_ExtractWithRectangle(IInkDisp* This,IInkRectangle *Rectangle,InkExtractFlags extractFlags,IInkDisp **ExtractedInk) {
+    return This->lpVtbl->ExtractWithRectangle(This,Rectangle,extractFlags,ExtractedInk);
+}
+static FORCEINLINE HRESULT IInkDisp_Clip(IInkDisp* This,IInkRectangle *Rectangle) {
+    return This->lpVtbl->Clip(This,Rectangle);
+}
+static FORCEINLINE HRESULT IInkDisp_Clone(IInkDisp* This,IInkDisp **NewInk) {
+    return This->lpVtbl->Clone(This,NewInk);
+}
+static FORCEINLINE HRESULT IInkDisp_HitTestCircle(IInkDisp* This,LONG X,LONG Y,float radius,IInkStrokes **Strokes) {
+    return This->lpVtbl->HitTestCircle(This,X,Y,radius,Strokes);
+}
+static FORCEINLINE HRESULT IInkDisp_HitTestWithRectangle(IInkDisp* This,IInkRectangle *SelectionRectangle,float IntersectPercent,IInkStrokes **Strokes) {
+    return This->lpVtbl->HitTestWithRectangle(This,SelectionRectangle,IntersectPercent,Strokes);
+}
+static FORCEINLINE HRESULT IInkDisp_HitTestWithLasso(IInkDisp* This,VARIANT Points,float IntersectPercent,VARIANT *LassoPoints,IInkStrokes **Strokes) {
+    return This->lpVtbl->HitTestWithLasso(This,Points,IntersectPercent,LassoPoints,Strokes);
+}
+static FORCEINLINE HRESULT IInkDisp_NearestPoint(IInkDisp* This,LONG X,LONG Y,float *PointOnStroke,float *DistanceFromPacket,IInkStrokeDisp **Stroke) {
+    return This->lpVtbl->NearestPoint(This,X,Y,PointOnStroke,DistanceFromPacket,Stroke);
+}
+static FORCEINLINE HRESULT IInkDisp_CreateStrokes(IInkDisp* This,VARIANT StrokeIds,IInkStrokes **Strokes) {
+    return This->lpVtbl->CreateStrokes(This,StrokeIds,Strokes);
+}
+static FORCEINLINE HRESULT IInkDisp_AddStrokesAtRectangle(IInkDisp* This,IInkStrokes *SourceStrokes,IInkRectangle *TargetRectangle) {
+    return This->lpVtbl->AddStrokesAtRectangle(This,SourceStrokes,TargetRectangle);
+}
+static FORCEINLINE HRESULT IInkDisp_Save(IInkDisp* This,InkPersistenceFormat PersistenceFormat,InkPersistenceCompressionMode CompressionMode,VARIANT *Data) {
+    return This->lpVtbl->Save(This,PersistenceFormat,CompressionMode,Data);
+}
+static FORCEINLINE HRESULT IInkDisp_Load(IInkDisp* This,VARIANT Data) {
+    return This->lpVtbl->Load(This,Data);
+}
+static FORCEINLINE HRESULT IInkDisp_CreateStroke(IInkDisp* This,VARIANT PacketData,VARIANT PacketDescription,IInkStrokeDisp **Stroke) {
+    return This->lpVtbl->CreateStroke(This,PacketData,PacketDescription,Stroke);
+}
+static FORCEINLINE HRESULT IInkDisp_ClipboardCopyWithRectangle(IInkDisp* This,IInkRectangle *Rectangle,InkClipboardFormats ClipboardFormats,InkClipboardModes ClipboardModes,IDataObject **DataObject) {
+    return This->lpVtbl->ClipboardCopyWithRectangle(This,Rectangle,ClipboardFormats,ClipboardModes,DataObject);
+}
+static FORCEINLINE HRESULT IInkDisp_ClipboardCopy(IInkDisp* This,IInkStrokes *strokes,InkClipboardFormats ClipboardFormats,InkClipboardModes ClipboardModes,IDataObject **DataObject) {
+    return This->lpVtbl->ClipboardCopy(This,strokes,ClipboardFormats,ClipboardModes,DataObject);
+}
+static FORCEINLINE HRESULT IInkDisp_CanPaste(IInkDisp* This,IDataObject *DataObject,VARIANT_BOOL *CanPaste) {
+    return This->lpVtbl->CanPaste(This,DataObject,CanPaste);
+}
+static FORCEINLINE HRESULT IInkDisp_ClipboardPaste(IInkDisp* This,LONG x,LONG y,IDataObject *DataObject,IInkStrokes **Strokes) {
+    return This->lpVtbl->ClipboardPaste(This,x,y,DataObject,Strokes);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInkDisp_get_Strokes_Proxy(
+    IInkDisp* This,
+    IInkStrokes **Strokes);
+void __RPC_STUB IInkDisp_get_Strokes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDisp_get_ExtendedProperties_Proxy(
+    IInkDisp* This,
+    IInkExtendedProperties **Properties);
+void __RPC_STUB IInkDisp_get_ExtendedProperties_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDisp_get_Dirty_Proxy(
+    IInkDisp* This,
+    VARIANT_BOOL *Dirty);
+void __RPC_STUB IInkDisp_get_Dirty_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDisp_put_Dirty_Proxy(
+    IInkDisp* This,
+    VARIANT_BOOL Dirty);
+void __RPC_STUB IInkDisp_put_Dirty_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDisp_get_CustomStrokes_Proxy(
+    IInkDisp* This,
+    IInkCustomStrokes **ppunkInkCustomStrokes);
+void __RPC_STUB IInkDisp_get_CustomStrokes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDisp_GetBoundingBox_Proxy(
+    IInkDisp* This,
+    InkBoundingBoxMode BoundingBoxMode,
+    IInkRectangle **Rectangle);
+void __RPC_STUB IInkDisp_GetBoundingBox_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDisp_DeleteStrokes_Proxy(
+    IInkDisp* This,
+    IInkStrokes *Strokes);
+void __RPC_STUB IInkDisp_DeleteStrokes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDisp_DeleteStroke_Proxy(
+    IInkDisp* This,
+    IInkStrokeDisp *Stroke);
+void __RPC_STUB IInkDisp_DeleteStroke_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDisp_ExtractStrokes_Proxy(
+    IInkDisp* This,
+    IInkStrokes *Strokes,
+    InkExtractFlags ExtractFlags,
+    IInkDisp **ExtractedInk);
+void __RPC_STUB IInkDisp_ExtractStrokes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDisp_ExtractWithRectangle_Proxy(
+    IInkDisp* This,
+    IInkRectangle *Rectangle,
+    InkExtractFlags extractFlags,
+    IInkDisp **ExtractedInk);
+void __RPC_STUB IInkDisp_ExtractWithRectangle_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDisp_Clip_Proxy(
+    IInkDisp* This,
+    IInkRectangle *Rectangle);
+void __RPC_STUB IInkDisp_Clip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDisp_Clone_Proxy(
+    IInkDisp* This,
+    IInkDisp **NewInk);
+void __RPC_STUB IInkDisp_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDisp_HitTestCircle_Proxy(
+    IInkDisp* This,
+    LONG X,
+    LONG Y,
+    float radius,
+    IInkStrokes **Strokes);
+void __RPC_STUB IInkDisp_HitTestCircle_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDisp_HitTestWithRectangle_Proxy(
+    IInkDisp* This,
+    IInkRectangle *SelectionRectangle,
+    float IntersectPercent,
+    IInkStrokes **Strokes);
+void __RPC_STUB IInkDisp_HitTestWithRectangle_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDisp_HitTestWithLasso_Proxy(
+    IInkDisp* This,
+    VARIANT Points,
+    float IntersectPercent,
+    VARIANT *LassoPoints,
+    IInkStrokes **Strokes);
+void __RPC_STUB IInkDisp_HitTestWithLasso_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDisp_NearestPoint_Proxy(
+    IInkDisp* This,
+    LONG X,
+    LONG Y,
+    float *PointOnStroke,
+    float *DistanceFromPacket,
+    IInkStrokeDisp **Stroke);
+void __RPC_STUB IInkDisp_NearestPoint_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDisp_CreateStrokes_Proxy(
+    IInkDisp* This,
+    VARIANT StrokeIds,
+    IInkStrokes **Strokes);
+void __RPC_STUB IInkDisp_CreateStrokes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDisp_AddStrokesAtRectangle_Proxy(
+    IInkDisp* This,
+    IInkStrokes *SourceStrokes,
+    IInkRectangle *TargetRectangle);
+void __RPC_STUB IInkDisp_AddStrokesAtRectangle_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDisp_Save_Proxy(
+    IInkDisp* This,
+    InkPersistenceFormat PersistenceFormat,
+    InkPersistenceCompressionMode CompressionMode,
+    VARIANT *Data);
+void __RPC_STUB IInkDisp_Save_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDisp_Load_Proxy(
+    IInkDisp* This,
+    VARIANT Data);
+void __RPC_STUB IInkDisp_Load_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDisp_CreateStroke_Proxy(
+    IInkDisp* This,
+    VARIANT PacketData,
+    VARIANT PacketDescription,
+    IInkStrokeDisp **Stroke);
+void __RPC_STUB IInkDisp_CreateStroke_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDisp_ClipboardCopyWithRectangle_Proxy(
+    IInkDisp* This,
+    IInkRectangle *Rectangle,
+    InkClipboardFormats ClipboardFormats,
+    InkClipboardModes ClipboardModes,
+    IDataObject **DataObject);
+void __RPC_STUB IInkDisp_ClipboardCopyWithRectangle_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDisp_ClipboardCopy_Proxy(
+    IInkDisp* This,
+    IInkStrokes *strokes,
+    InkClipboardFormats ClipboardFormats,
+    InkClipboardModes ClipboardModes,
+    IDataObject **DataObject);
+void __RPC_STUB IInkDisp_ClipboardCopy_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDisp_CanPaste_Proxy(
+    IInkDisp* This,
+    IDataObject *DataObject,
+    VARIANT_BOOL *CanPaste);
+void __RPC_STUB IInkDisp_CanPaste_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkDisp_ClipboardPaste_Proxy(
+    IInkDisp* This,
+    LONG x,
+    LONG y,
+    IDataObject *DataObject,
+    IInkStrokes **Strokes);
+void __RPC_STUB IInkDisp_ClipboardPaste_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInkDisp_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInkStrokes interface
+ */
+#ifndef __IInkStrokes_INTERFACE_DEFINED__
+#define __IInkStrokes_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInkStrokes, 0xf1f4c9d8, 0x590a, 0x4963, 0xb3,0xae, 0x19,0x35,0x67,0x1b,0xb6,0xf3);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("f1f4c9d8-590a-4963-b3ae-1935671bb6f3")
+IInkStrokes : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Count(
+        LONG *Count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
+        IUnknown **_NewEnum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Ink(
+        IInkDisp **Ink) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_RecognitionResult(
+        IInkRecognitionResult **RecognitionResult) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ToString(
+        BSTR *ToString) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Item(
+        LONG Index,
+        IInkStrokeDisp **Stroke) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Add(
+        IInkStrokeDisp *InkStroke) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddStrokes(
+        IInkStrokes *InkStrokes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Remove(
+        IInkStrokeDisp *InkStroke) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveStrokes(
+        IInkStrokes *InkStrokes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ModifyDrawingAttributes(
+        IInkDrawingAttributes *DrawAttrs) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBoundingBox(
+        InkBoundingBoxMode BoundingBoxMode,
+        IInkRectangle **BoundingBox) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Transform(
+        IInkTransform *Transform,
+        VARIANT_BOOL ApplyOnPenWidth = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ScaleToRectangle(
+        IInkRectangle *Rectangle) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Move(
+        float HorizontalComponent,
+        float VerticalComponent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Rotate(
+        float Degrees,
+        float x = 0,
+        float y = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Shear(
+        float HorizontalMultiplier,
+        float VerticalMultiplier) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ScaleTransform(
+        float HorizontalMultiplier,
+        float VerticalMultiplier) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clip(
+        IInkRectangle *Rectangle) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveRecognitionResult(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IInkStrokes, 0xf1f4c9d8, 0x590a, 0x4963, 0xb3,0xae, 0x19,0x35,0x67,0x1b,0xb6,0xf3)
+#endif
+#else
+typedef struct IInkStrokesVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInkStrokes* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInkStrokes* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInkStrokes* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IInkStrokes* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IInkStrokes* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IInkStrokes* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IInkStrokes* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IInkStrokes methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Count)(
+        IInkStrokes* This,
+        LONG *Count);
+
+    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
+        IInkStrokes* This,
+        IUnknown **_NewEnum);
+
+    HRESULT (STDMETHODCALLTYPE *get_Ink)(
+        IInkStrokes* This,
+        IInkDisp **Ink);
+
+    HRESULT (STDMETHODCALLTYPE *get_RecognitionResult)(
+        IInkStrokes* This,
+        IInkRecognitionResult **RecognitionResult);
+
+    HRESULT (STDMETHODCALLTYPE *ToString)(
+        IInkStrokes* This,
+        BSTR *ToString);
+
+    HRESULT (STDMETHODCALLTYPE *Item)(
+        IInkStrokes* This,
+        LONG Index,
+        IInkStrokeDisp **Stroke);
+
+    HRESULT (STDMETHODCALLTYPE *Add)(
+        IInkStrokes* This,
+        IInkStrokeDisp *InkStroke);
+
+    HRESULT (STDMETHODCALLTYPE *AddStrokes)(
+        IInkStrokes* This,
+        IInkStrokes *InkStrokes);
+
+    HRESULT (STDMETHODCALLTYPE *Remove)(
+        IInkStrokes* This,
+        IInkStrokeDisp *InkStroke);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveStrokes)(
+        IInkStrokes* This,
+        IInkStrokes *InkStrokes);
+
+    HRESULT (STDMETHODCALLTYPE *ModifyDrawingAttributes)(
+        IInkStrokes* This,
+        IInkDrawingAttributes *DrawAttrs);
+
+    HRESULT (STDMETHODCALLTYPE *GetBoundingBox)(
+        IInkStrokes* This,
+        InkBoundingBoxMode BoundingBoxMode,
+        IInkRectangle **BoundingBox);
+
+    HRESULT (STDMETHODCALLTYPE *Transform)(
+        IInkStrokes* This,
+        IInkTransform *Transform,
+        VARIANT_BOOL ApplyOnPenWidth);
+
+    HRESULT (STDMETHODCALLTYPE *ScaleToRectangle)(
+        IInkStrokes* This,
+        IInkRectangle *Rectangle);
+
+    HRESULT (STDMETHODCALLTYPE *Move)(
+        IInkStrokes* This,
+        float HorizontalComponent,
+        float VerticalComponent);
+
+    HRESULT (STDMETHODCALLTYPE *Rotate)(
+        IInkStrokes* This,
+        float Degrees,
+        float x,
+        float y);
+
+    HRESULT (STDMETHODCALLTYPE *Shear)(
+        IInkStrokes* This,
+        float HorizontalMultiplier,
+        float VerticalMultiplier);
+
+    HRESULT (STDMETHODCALLTYPE *ScaleTransform)(
+        IInkStrokes* This,
+        float HorizontalMultiplier,
+        float VerticalMultiplier);
+
+    HRESULT (STDMETHODCALLTYPE *Clip)(
+        IInkStrokes* This,
+        IInkRectangle *Rectangle);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveRecognitionResult)(
+        IInkStrokes* This);
+
+    END_INTERFACE
+} IInkStrokesVtbl;
+interface IInkStrokes {
+    CONST_VTBL IInkStrokesVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IInkStrokes_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInkStrokes_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInkStrokes_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IInkStrokes_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IInkStrokes_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IInkStrokes_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IInkStrokes_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IInkStrokes methods ***/
+#define IInkStrokes_get_Count(This,Count) (This)->lpVtbl->get_Count(This,Count)
+#define IInkStrokes_get__NewEnum(This,_NewEnum) (This)->lpVtbl->get__NewEnum(This,_NewEnum)
+#define IInkStrokes_get_Ink(This,Ink) (This)->lpVtbl->get_Ink(This,Ink)
+#define IInkStrokes_get_RecognitionResult(This,RecognitionResult) (This)->lpVtbl->get_RecognitionResult(This,RecognitionResult)
+#define IInkStrokes_ToString(This,ToString) (This)->lpVtbl->ToString(This,ToString)
+#define IInkStrokes_Item(This,Index,Stroke) (This)->lpVtbl->Item(This,Index,Stroke)
+#define IInkStrokes_Add(This,InkStroke) (This)->lpVtbl->Add(This,InkStroke)
+#define IInkStrokes_AddStrokes(This,InkStrokes) (This)->lpVtbl->AddStrokes(This,InkStrokes)
+#define IInkStrokes_Remove(This,InkStroke) (This)->lpVtbl->Remove(This,InkStroke)
+#define IInkStrokes_RemoveStrokes(This,InkStrokes) (This)->lpVtbl->RemoveStrokes(This,InkStrokes)
+#define IInkStrokes_ModifyDrawingAttributes(This,DrawAttrs) (This)->lpVtbl->ModifyDrawingAttributes(This,DrawAttrs)
+#define IInkStrokes_GetBoundingBox(This,BoundingBoxMode,BoundingBox) (This)->lpVtbl->GetBoundingBox(This,BoundingBoxMode,BoundingBox)
+#define IInkStrokes_Transform(This,Transform,ApplyOnPenWidth) (This)->lpVtbl->Transform(This,Transform,ApplyOnPenWidth)
+#define IInkStrokes_ScaleToRectangle(This,Rectangle) (This)->lpVtbl->ScaleToRectangle(This,Rectangle)
+#define IInkStrokes_Move(This,HorizontalComponent,VerticalComponent) (This)->lpVtbl->Move(This,HorizontalComponent,VerticalComponent)
+#define IInkStrokes_Rotate(This,Degrees,x,y) (This)->lpVtbl->Rotate(This,Degrees,x,y)
+#define IInkStrokes_Shear(This,HorizontalMultiplier,VerticalMultiplier) (This)->lpVtbl->Shear(This,HorizontalMultiplier,VerticalMultiplier)
+#define IInkStrokes_ScaleTransform(This,HorizontalMultiplier,VerticalMultiplier) (This)->lpVtbl->ScaleTransform(This,HorizontalMultiplier,VerticalMultiplier)
+#define IInkStrokes_Clip(This,Rectangle) (This)->lpVtbl->Clip(This,Rectangle)
+#define IInkStrokes_RemoveRecognitionResult(This) (This)->lpVtbl->RemoveRecognitionResult(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IInkStrokes_QueryInterface(IInkStrokes* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IInkStrokes_AddRef(IInkStrokes* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IInkStrokes_Release(IInkStrokes* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IInkStrokes_GetTypeInfoCount(IInkStrokes* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IInkStrokes_GetTypeInfo(IInkStrokes* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IInkStrokes_GetIDsOfNames(IInkStrokes* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IInkStrokes_Invoke(IInkStrokes* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IInkStrokes methods ***/
+static FORCEINLINE HRESULT IInkStrokes_get_Count(IInkStrokes* This,LONG *Count) {
+    return This->lpVtbl->get_Count(This,Count);
+}
+static FORCEINLINE HRESULT IInkStrokes_get__NewEnum(IInkStrokes* This,IUnknown **_NewEnum) {
+    return This->lpVtbl->get__NewEnum(This,_NewEnum);
+}
+static FORCEINLINE HRESULT IInkStrokes_get_Ink(IInkStrokes* This,IInkDisp **Ink) {
+    return This->lpVtbl->get_Ink(This,Ink);
+}
+static FORCEINLINE HRESULT IInkStrokes_get_RecognitionResult(IInkStrokes* This,IInkRecognitionResult **RecognitionResult) {
+    return This->lpVtbl->get_RecognitionResult(This,RecognitionResult);
+}
+static FORCEINLINE HRESULT IInkStrokes_ToString(IInkStrokes* This,BSTR *ToString) {
+    return This->lpVtbl->ToString(This,ToString);
+}
+static FORCEINLINE HRESULT IInkStrokes_Item(IInkStrokes* This,LONG Index,IInkStrokeDisp **Stroke) {
+    return This->lpVtbl->Item(This,Index,Stroke);
+}
+static FORCEINLINE HRESULT IInkStrokes_Add(IInkStrokes* This,IInkStrokeDisp *InkStroke) {
+    return This->lpVtbl->Add(This,InkStroke);
+}
+static FORCEINLINE HRESULT IInkStrokes_AddStrokes(IInkStrokes* This,IInkStrokes *InkStrokes) {
+    return This->lpVtbl->AddStrokes(This,InkStrokes);
+}
+static FORCEINLINE HRESULT IInkStrokes_Remove(IInkStrokes* This,IInkStrokeDisp *InkStroke) {
+    return This->lpVtbl->Remove(This,InkStroke);
+}
+static FORCEINLINE HRESULT IInkStrokes_RemoveStrokes(IInkStrokes* This,IInkStrokes *InkStrokes) {
+    return This->lpVtbl->RemoveStrokes(This,InkStrokes);
+}
+static FORCEINLINE HRESULT IInkStrokes_ModifyDrawingAttributes(IInkStrokes* This,IInkDrawingAttributes *DrawAttrs) {
+    return This->lpVtbl->ModifyDrawingAttributes(This,DrawAttrs);
+}
+static FORCEINLINE HRESULT IInkStrokes_GetBoundingBox(IInkStrokes* This,InkBoundingBoxMode BoundingBoxMode,IInkRectangle **BoundingBox) {
+    return This->lpVtbl->GetBoundingBox(This,BoundingBoxMode,BoundingBox);
+}
+static FORCEINLINE HRESULT IInkStrokes_Transform(IInkStrokes* This,IInkTransform *Transform,VARIANT_BOOL ApplyOnPenWidth) {
+    return This->lpVtbl->Transform(This,Transform,ApplyOnPenWidth);
+}
+static FORCEINLINE HRESULT IInkStrokes_ScaleToRectangle(IInkStrokes* This,IInkRectangle *Rectangle) {
+    return This->lpVtbl->ScaleToRectangle(This,Rectangle);
+}
+static FORCEINLINE HRESULT IInkStrokes_Move(IInkStrokes* This,float HorizontalComponent,float VerticalComponent) {
+    return This->lpVtbl->Move(This,HorizontalComponent,VerticalComponent);
+}
+static FORCEINLINE HRESULT IInkStrokes_Rotate(IInkStrokes* This,float Degrees,float x,float y) {
+    return This->lpVtbl->Rotate(This,Degrees,x,y);
+}
+static FORCEINLINE HRESULT IInkStrokes_Shear(IInkStrokes* This,float HorizontalMultiplier,float VerticalMultiplier) {
+    return This->lpVtbl->Shear(This,HorizontalMultiplier,VerticalMultiplier);
+}
+static FORCEINLINE HRESULT IInkStrokes_ScaleTransform(IInkStrokes* This,float HorizontalMultiplier,float VerticalMultiplier) {
+    return This->lpVtbl->ScaleTransform(This,HorizontalMultiplier,VerticalMultiplier);
+}
+static FORCEINLINE HRESULT IInkStrokes_Clip(IInkStrokes* This,IInkRectangle *Rectangle) {
+    return This->lpVtbl->Clip(This,Rectangle);
+}
+static FORCEINLINE HRESULT IInkStrokes_RemoveRecognitionResult(IInkStrokes* This) {
+    return This->lpVtbl->RemoveRecognitionResult(This);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInkStrokes_get_Count_Proxy(
+    IInkStrokes* This,
+    LONG *Count);
+void __RPC_STUB IInkStrokes_get_Count_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokes_get__NewEnum_Proxy(
+    IInkStrokes* This,
+    IUnknown **_NewEnum);
+void __RPC_STUB IInkStrokes_get__NewEnum_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokes_get_Ink_Proxy(
+    IInkStrokes* This,
+    IInkDisp **Ink);
+void __RPC_STUB IInkStrokes_get_Ink_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokes_get_RecognitionResult_Proxy(
+    IInkStrokes* This,
+    IInkRecognitionResult **RecognitionResult);
+void __RPC_STUB IInkStrokes_get_RecognitionResult_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokes_ToString_Proxy(
+    IInkStrokes* This,
+    BSTR *ToString);
+void __RPC_STUB IInkStrokes_ToString_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokes_Item_Proxy(
+    IInkStrokes* This,
+    LONG Index,
+    IInkStrokeDisp **Stroke);
+void __RPC_STUB IInkStrokes_Item_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokes_Add_Proxy(
+    IInkStrokes* This,
+    IInkStrokeDisp *InkStroke);
+void __RPC_STUB IInkStrokes_Add_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokes_AddStrokes_Proxy(
+    IInkStrokes* This,
+    IInkStrokes *InkStrokes);
+void __RPC_STUB IInkStrokes_AddStrokes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokes_Remove_Proxy(
+    IInkStrokes* This,
+    IInkStrokeDisp *InkStroke);
+void __RPC_STUB IInkStrokes_Remove_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokes_RemoveStrokes_Proxy(
+    IInkStrokes* This,
+    IInkStrokes *InkStrokes);
+void __RPC_STUB IInkStrokes_RemoveStrokes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokes_ModifyDrawingAttributes_Proxy(
+    IInkStrokes* This,
+    IInkDrawingAttributes *DrawAttrs);
+void __RPC_STUB IInkStrokes_ModifyDrawingAttributes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokes_GetBoundingBox_Proxy(
+    IInkStrokes* This,
+    InkBoundingBoxMode BoundingBoxMode,
+    IInkRectangle **BoundingBox);
+void __RPC_STUB IInkStrokes_GetBoundingBox_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokes_Transform_Proxy(
+    IInkStrokes* This,
+    IInkTransform *Transform,
+    VARIANT_BOOL ApplyOnPenWidth);
+void __RPC_STUB IInkStrokes_Transform_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokes_ScaleToRectangle_Proxy(
+    IInkStrokes* This,
+    IInkRectangle *Rectangle);
+void __RPC_STUB IInkStrokes_ScaleToRectangle_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokes_Move_Proxy(
+    IInkStrokes* This,
+    float HorizontalComponent,
+    float VerticalComponent);
+void __RPC_STUB IInkStrokes_Move_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokes_Rotate_Proxy(
+    IInkStrokes* This,
+    float Degrees,
+    float x,
+    float y);
+void __RPC_STUB IInkStrokes_Rotate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokes_Shear_Proxy(
+    IInkStrokes* This,
+    float HorizontalMultiplier,
+    float VerticalMultiplier);
+void __RPC_STUB IInkStrokes_Shear_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokes_ScaleTransform_Proxy(
+    IInkStrokes* This,
+    float HorizontalMultiplier,
+    float VerticalMultiplier);
+void __RPC_STUB IInkStrokes_ScaleTransform_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokes_Clip_Proxy(
+    IInkStrokes* This,
+    IInkRectangle *Rectangle);
+void __RPC_STUB IInkStrokes_Clip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkStrokes_RemoveRecognitionResult_Proxy(
+    IInkStrokes* This);
+void __RPC_STUB IInkStrokes_RemoveRecognitionResult_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInkStrokes_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInkRenderer interface
+ */
+#ifndef __IInkRenderer_INTERFACE_DEFINED__
+#define __IInkRenderer_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInkRenderer, 0xe6257a9c, 0xb511, 0x4f4c, 0xa8,0xb0, 0xa7,0xdb,0xc9,0x50,0x6b,0x83);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("e6257a9c-b511-4f4c-a8b0-a7dbc9506b83")
+IInkRenderer : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE GetViewTransform(
+        IInkTransform *ViewTransform) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetViewTransform(
+        IInkTransform *ViewTransform) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetObjectTransform(
+        IInkTransform *ObjectTransform) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetObjectTransform(
+        IInkTransform *ObjectTransform) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Draw(
+        LONG_PTR hDC,
+        IInkStrokes *Strokes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawStroke(
+        LONG_PTR hDC,
+        IInkStrokeDisp *Stroke,
+        IInkDrawingAttributes *DrawingAttributes = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PixelToInkSpace(
+        LONG_PTR hDC,
+        LONG *x,
+        LONG *y) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE InkSpaceToPixel(
+        LONG_PTR hdcDisplay,
+        LONG *x,
+        LONG *y) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PixelToInkSpaceFromPoints(
+        LONG_PTR hDC,
+        VARIANT *Points) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE InkSpaceToPixelFromPoints(
+        LONG_PTR hDC,
+        VARIANT *Points) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Measure(
+        IInkStrokes *Strokes,
+        IInkRectangle **Rectangle) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE MeasureStroke(
+        IInkStrokeDisp *Stroke,
+        IInkDrawingAttributes *DrawingAttributes,
+        IInkRectangle **Rectangle) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Move(
+        float HorizontalComponent,
+        float VerticalComponent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Rotate(
+        float Degrees,
+        float x = 0,
+        float y = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ScaleTransform(
+        float HorizontalMultiplier,
+        float VerticalMultiplier,
+        VARIANT_BOOL ApplyOnPenWidth = -1) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IInkRenderer, 0xe6257a9c, 0xb511, 0x4f4c, 0xa8,0xb0, 0xa7,0xdb,0xc9,0x50,0x6b,0x83)
+#endif
+#else
+typedef struct IInkRendererVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInkRenderer* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInkRenderer* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInkRenderer* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IInkRenderer* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IInkRenderer* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IInkRenderer* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IInkRenderer* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IInkRenderer methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetViewTransform)(
+        IInkRenderer* This,
+        IInkTransform *ViewTransform);
+
+    HRESULT (STDMETHODCALLTYPE *SetViewTransform)(
+        IInkRenderer* This,
+        IInkTransform *ViewTransform);
+
+    HRESULT (STDMETHODCALLTYPE *GetObjectTransform)(
+        IInkRenderer* This,
+        IInkTransform *ObjectTransform);
+
+    HRESULT (STDMETHODCALLTYPE *SetObjectTransform)(
+        IInkRenderer* This,
+        IInkTransform *ObjectTransform);
+
+    HRESULT (STDMETHODCALLTYPE *Draw)(
+        IInkRenderer* This,
+        LONG_PTR hDC,
+        IInkStrokes *Strokes);
+
+    HRESULT (STDMETHODCALLTYPE *DrawStroke)(
+        IInkRenderer* This,
+        LONG_PTR hDC,
+        IInkStrokeDisp *Stroke,
+        IInkDrawingAttributes *DrawingAttributes);
+
+    HRESULT (STDMETHODCALLTYPE *PixelToInkSpace)(
+        IInkRenderer* This,
+        LONG_PTR hDC,
+        LONG *x,
+        LONG *y);
+
+    HRESULT (STDMETHODCALLTYPE *InkSpaceToPixel)(
+        IInkRenderer* This,
+        LONG_PTR hdcDisplay,
+        LONG *x,
+        LONG *y);
+
+    HRESULT (STDMETHODCALLTYPE *PixelToInkSpaceFromPoints)(
+        IInkRenderer* This,
+        LONG_PTR hDC,
+        VARIANT *Points);
+
+    HRESULT (STDMETHODCALLTYPE *InkSpaceToPixelFromPoints)(
+        IInkRenderer* This,
+        LONG_PTR hDC,
+        VARIANT *Points);
+
+    HRESULT (STDMETHODCALLTYPE *Measure)(
+        IInkRenderer* This,
+        IInkStrokes *Strokes,
+        IInkRectangle **Rectangle);
+
+    HRESULT (STDMETHODCALLTYPE *MeasureStroke)(
+        IInkRenderer* This,
+        IInkStrokeDisp *Stroke,
+        IInkDrawingAttributes *DrawingAttributes,
+        IInkRectangle **Rectangle);
+
+    HRESULT (STDMETHODCALLTYPE *Move)(
+        IInkRenderer* This,
+        float HorizontalComponent,
+        float VerticalComponent);
+
+    HRESULT (STDMETHODCALLTYPE *Rotate)(
+        IInkRenderer* This,
+        float Degrees,
+        float x,
+        float y);
+
+    HRESULT (STDMETHODCALLTYPE *ScaleTransform)(
+        IInkRenderer* This,
+        float HorizontalMultiplier,
+        float VerticalMultiplier,
+        VARIANT_BOOL ApplyOnPenWidth);
+
+    END_INTERFACE
+} IInkRendererVtbl;
+interface IInkRenderer {
+    CONST_VTBL IInkRendererVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IInkRenderer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInkRenderer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInkRenderer_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IInkRenderer_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IInkRenderer_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IInkRenderer_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IInkRenderer_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IInkRenderer methods ***/
+#define IInkRenderer_GetViewTransform(This,ViewTransform) (This)->lpVtbl->GetViewTransform(This,ViewTransform)
+#define IInkRenderer_SetViewTransform(This,ViewTransform) (This)->lpVtbl->SetViewTransform(This,ViewTransform)
+#define IInkRenderer_GetObjectTransform(This,ObjectTransform) (This)->lpVtbl->GetObjectTransform(This,ObjectTransform)
+#define IInkRenderer_SetObjectTransform(This,ObjectTransform) (This)->lpVtbl->SetObjectTransform(This,ObjectTransform)
+#define IInkRenderer_Draw(This,hDC,Strokes) (This)->lpVtbl->Draw(This,hDC,Strokes)
+#define IInkRenderer_DrawStroke(This,hDC,Stroke,DrawingAttributes) (This)->lpVtbl->DrawStroke(This,hDC,Stroke,DrawingAttributes)
+#define IInkRenderer_PixelToInkSpace(This,hDC,x,y) (This)->lpVtbl->PixelToInkSpace(This,hDC,x,y)
+#define IInkRenderer_InkSpaceToPixel(This,hdcDisplay,x,y) (This)->lpVtbl->InkSpaceToPixel(This,hdcDisplay,x,y)
+#define IInkRenderer_PixelToInkSpaceFromPoints(This,hDC,Points) (This)->lpVtbl->PixelToInkSpaceFromPoints(This,hDC,Points)
+#define IInkRenderer_InkSpaceToPixelFromPoints(This,hDC,Points) (This)->lpVtbl->InkSpaceToPixelFromPoints(This,hDC,Points)
+#define IInkRenderer_Measure(This,Strokes,Rectangle) (This)->lpVtbl->Measure(This,Strokes,Rectangle)
+#define IInkRenderer_MeasureStroke(This,Stroke,DrawingAttributes,Rectangle) (This)->lpVtbl->MeasureStroke(This,Stroke,DrawingAttributes,Rectangle)
+#define IInkRenderer_Move(This,HorizontalComponent,VerticalComponent) (This)->lpVtbl->Move(This,HorizontalComponent,VerticalComponent)
+#define IInkRenderer_Rotate(This,Degrees,x,y) (This)->lpVtbl->Rotate(This,Degrees,x,y)
+#define IInkRenderer_ScaleTransform(This,HorizontalMultiplier,VerticalMultiplier,ApplyOnPenWidth) (This)->lpVtbl->ScaleTransform(This,HorizontalMultiplier,VerticalMultiplier,ApplyOnPenWidth)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IInkRenderer_QueryInterface(IInkRenderer* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IInkRenderer_AddRef(IInkRenderer* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IInkRenderer_Release(IInkRenderer* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IInkRenderer_GetTypeInfoCount(IInkRenderer* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IInkRenderer_GetTypeInfo(IInkRenderer* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IInkRenderer_GetIDsOfNames(IInkRenderer* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IInkRenderer_Invoke(IInkRenderer* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IInkRenderer methods ***/
+static FORCEINLINE HRESULT IInkRenderer_GetViewTransform(IInkRenderer* This,IInkTransform *ViewTransform) {
+    return This->lpVtbl->GetViewTransform(This,ViewTransform);
+}
+static FORCEINLINE HRESULT IInkRenderer_SetViewTransform(IInkRenderer* This,IInkTransform *ViewTransform) {
+    return This->lpVtbl->SetViewTransform(This,ViewTransform);
+}
+static FORCEINLINE HRESULT IInkRenderer_GetObjectTransform(IInkRenderer* This,IInkTransform *ObjectTransform) {
+    return This->lpVtbl->GetObjectTransform(This,ObjectTransform);
+}
+static FORCEINLINE HRESULT IInkRenderer_SetObjectTransform(IInkRenderer* This,IInkTransform *ObjectTransform) {
+    return This->lpVtbl->SetObjectTransform(This,ObjectTransform);
+}
+static FORCEINLINE HRESULT IInkRenderer_Draw(IInkRenderer* This,LONG_PTR hDC,IInkStrokes *Strokes) {
+    return This->lpVtbl->Draw(This,hDC,Strokes);
+}
+static FORCEINLINE HRESULT IInkRenderer_DrawStroke(IInkRenderer* This,LONG_PTR hDC,IInkStrokeDisp *Stroke,IInkDrawingAttributes *DrawingAttributes) {
+    return This->lpVtbl->DrawStroke(This,hDC,Stroke,DrawingAttributes);
+}
+static FORCEINLINE HRESULT IInkRenderer_PixelToInkSpace(IInkRenderer* This,LONG_PTR hDC,LONG *x,LONG *y) {
+    return This->lpVtbl->PixelToInkSpace(This,hDC,x,y);
+}
+static FORCEINLINE HRESULT IInkRenderer_InkSpaceToPixel(IInkRenderer* This,LONG_PTR hdcDisplay,LONG *x,LONG *y) {
+    return This->lpVtbl->InkSpaceToPixel(This,hdcDisplay,x,y);
+}
+static FORCEINLINE HRESULT IInkRenderer_PixelToInkSpaceFromPoints(IInkRenderer* This,LONG_PTR hDC,VARIANT *Points) {
+    return This->lpVtbl->PixelToInkSpaceFromPoints(This,hDC,Points);
+}
+static FORCEINLINE HRESULT IInkRenderer_InkSpaceToPixelFromPoints(IInkRenderer* This,LONG_PTR hDC,VARIANT *Points) {
+    return This->lpVtbl->InkSpaceToPixelFromPoints(This,hDC,Points);
+}
+static FORCEINLINE HRESULT IInkRenderer_Measure(IInkRenderer* This,IInkStrokes *Strokes,IInkRectangle **Rectangle) {
+    return This->lpVtbl->Measure(This,Strokes,Rectangle);
+}
+static FORCEINLINE HRESULT IInkRenderer_MeasureStroke(IInkRenderer* This,IInkStrokeDisp *Stroke,IInkDrawingAttributes *DrawingAttributes,IInkRectangle **Rectangle) {
+    return This->lpVtbl->MeasureStroke(This,Stroke,DrawingAttributes,Rectangle);
+}
+static FORCEINLINE HRESULT IInkRenderer_Move(IInkRenderer* This,float HorizontalComponent,float VerticalComponent) {
+    return This->lpVtbl->Move(This,HorizontalComponent,VerticalComponent);
+}
+static FORCEINLINE HRESULT IInkRenderer_Rotate(IInkRenderer* This,float Degrees,float x,float y) {
+    return This->lpVtbl->Rotate(This,Degrees,x,y);
+}
+static FORCEINLINE HRESULT IInkRenderer_ScaleTransform(IInkRenderer* This,float HorizontalMultiplier,float VerticalMultiplier,VARIANT_BOOL ApplyOnPenWidth) {
+    return This->lpVtbl->ScaleTransform(This,HorizontalMultiplier,VerticalMultiplier,ApplyOnPenWidth);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInkRenderer_GetViewTransform_Proxy(
+    IInkRenderer* This,
+    IInkTransform *ViewTransform);
+void __RPC_STUB IInkRenderer_GetViewTransform_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRenderer_SetViewTransform_Proxy(
+    IInkRenderer* This,
+    IInkTransform *ViewTransform);
+void __RPC_STUB IInkRenderer_SetViewTransform_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRenderer_GetObjectTransform_Proxy(
+    IInkRenderer* This,
+    IInkTransform *ObjectTransform);
+void __RPC_STUB IInkRenderer_GetObjectTransform_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRenderer_SetObjectTransform_Proxy(
+    IInkRenderer* This,
+    IInkTransform *ObjectTransform);
+void __RPC_STUB IInkRenderer_SetObjectTransform_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRenderer_Draw_Proxy(
+    IInkRenderer* This,
+    LONG_PTR hDC,
+    IInkStrokes *Strokes);
+void __RPC_STUB IInkRenderer_Draw_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRenderer_DrawStroke_Proxy(
+    IInkRenderer* This,
+    LONG_PTR hDC,
+    IInkStrokeDisp *Stroke,
+    IInkDrawingAttributes *DrawingAttributes);
+void __RPC_STUB IInkRenderer_DrawStroke_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRenderer_PixelToInkSpace_Proxy(
+    IInkRenderer* This,
+    LONG_PTR hDC,
+    LONG *x,
+    LONG *y);
+void __RPC_STUB IInkRenderer_PixelToInkSpace_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRenderer_InkSpaceToPixel_Proxy(
+    IInkRenderer* This,
+    LONG_PTR hdcDisplay,
+    LONG *x,
+    LONG *y);
+void __RPC_STUB IInkRenderer_InkSpaceToPixel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRenderer_PixelToInkSpaceFromPoints_Proxy(
+    IInkRenderer* This,
+    LONG_PTR hDC,
+    VARIANT *Points);
+void __RPC_STUB IInkRenderer_PixelToInkSpaceFromPoints_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRenderer_InkSpaceToPixelFromPoints_Proxy(
+    IInkRenderer* This,
+    LONG_PTR hDC,
+    VARIANT *Points);
+void __RPC_STUB IInkRenderer_InkSpaceToPixelFromPoints_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRenderer_Measure_Proxy(
+    IInkRenderer* This,
+    IInkStrokes *Strokes,
+    IInkRectangle **Rectangle);
+void __RPC_STUB IInkRenderer_Measure_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRenderer_MeasureStroke_Proxy(
+    IInkRenderer* This,
+    IInkStrokeDisp *Stroke,
+    IInkDrawingAttributes *DrawingAttributes,
+    IInkRectangle **Rectangle);
+void __RPC_STUB IInkRenderer_MeasureStroke_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRenderer_Move_Proxy(
+    IInkRenderer* This,
+    float HorizontalComponent,
+    float VerticalComponent);
+void __RPC_STUB IInkRenderer_Move_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRenderer_Rotate_Proxy(
+    IInkRenderer* This,
+    float Degrees,
+    float x,
+    float y);
+void __RPC_STUB IInkRenderer_Rotate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkRenderer_ScaleTransform_Proxy(
+    IInkRenderer* This,
+    float HorizontalMultiplier,
+    float VerticalMultiplier,
+    VARIANT_BOOL ApplyOnPenWidth);
+void __RPC_STUB IInkRenderer_ScaleTransform_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInkRenderer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInkCursors interface
+ */
+#ifndef __IInkCursors_INTERFACE_DEFINED__
+#define __IInkCursors_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInkCursors, 0xa248c1ac, 0xc698, 0x4e06, 0x9e,0x5c, 0xd5,0x7f,0x77,0xc7,0xe6,0x47);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("a248c1ac-c698-4e06-9e5c-d57f77c7e647")
+IInkCursors : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Count(
+        LONG *Count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
+        IUnknown **_NewEnum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Item(
+        LONG Index,
+        IInkCursor **Cursor) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IInkCursors, 0xa248c1ac, 0xc698, 0x4e06, 0x9e,0x5c, 0xd5,0x7f,0x77,0xc7,0xe6,0x47)
+#endif
+#else
+typedef struct IInkCursorsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInkCursors* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInkCursors* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInkCursors* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IInkCursors* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IInkCursors* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IInkCursors* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IInkCursors* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IInkCursors methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Count)(
+        IInkCursors* This,
+        LONG *Count);
+
+    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
+        IInkCursors* This,
+        IUnknown **_NewEnum);
+
+    HRESULT (STDMETHODCALLTYPE *Item)(
+        IInkCursors* This,
+        LONG Index,
+        IInkCursor **Cursor);
+
+    END_INTERFACE
+} IInkCursorsVtbl;
+interface IInkCursors {
+    CONST_VTBL IInkCursorsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IInkCursors_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInkCursors_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInkCursors_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IInkCursors_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IInkCursors_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IInkCursors_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IInkCursors_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IInkCursors methods ***/
+#define IInkCursors_get_Count(This,Count) (This)->lpVtbl->get_Count(This,Count)
+#define IInkCursors_get__NewEnum(This,_NewEnum) (This)->lpVtbl->get__NewEnum(This,_NewEnum)
+#define IInkCursors_Item(This,Index,Cursor) (This)->lpVtbl->Item(This,Index,Cursor)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IInkCursors_QueryInterface(IInkCursors* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IInkCursors_AddRef(IInkCursors* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IInkCursors_Release(IInkCursors* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IInkCursors_GetTypeInfoCount(IInkCursors* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IInkCursors_GetTypeInfo(IInkCursors* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IInkCursors_GetIDsOfNames(IInkCursors* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IInkCursors_Invoke(IInkCursors* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IInkCursors methods ***/
+static FORCEINLINE HRESULT IInkCursors_get_Count(IInkCursors* This,LONG *Count) {
+    return This->lpVtbl->get_Count(This,Count);
+}
+static FORCEINLINE HRESULT IInkCursors_get__NewEnum(IInkCursors* This,IUnknown **_NewEnum) {
+    return This->lpVtbl->get__NewEnum(This,_NewEnum);
+}
+static FORCEINLINE HRESULT IInkCursors_Item(IInkCursors* This,LONG Index,IInkCursor **Cursor) {
+    return This->lpVtbl->Item(This,Index,Cursor);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInkCursors_get_Count_Proxy(
+    IInkCursors* This,
+    LONG *Count);
+void __RPC_STUB IInkCursors_get_Count_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCursors_get__NewEnum_Proxy(
+    IInkCursors* This,
+    IUnknown **_NewEnum);
+void __RPC_STUB IInkCursors_get__NewEnum_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCursors_Item_Proxy(
+    IInkCursors* This,
+    LONG Index,
+    IInkCursor **Cursor);
+void __RPC_STUB IInkCursors_Item_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInkCursors_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInkCollector interface
+ */
+#ifndef __IInkCollector_INTERFACE_DEFINED__
+#define __IInkCollector_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInkCollector, 0xf0f060b5, 0x8b1f, 0x4a7c, 0x89,0xec, 0x88,0x06,0x92,0x58,0x8a,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("f0f060b5-8b1f-4a7c-89ec-880692588a4f")
+IInkCollector : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_hWnd(
+        LONG_PTR *CurrentWindow) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_hWnd(
+        LONG_PTR NewWindow) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Enabled(
+        VARIANT_BOOL *Collecting) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Enabled(
+        VARIANT_BOOL Collecting) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_DefaultDrawingAttributes(
+        IInkDrawingAttributes **CurrentAttributes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE putref_DefaultDrawingAttributes(
+        IInkDrawingAttributes *NewAttributes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Renderer(
+        IInkRenderer **CurrentInkRenderer) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE putref_Renderer(
+        IInkRenderer *NewInkRenderer) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Ink(
+        IInkDisp **Ink) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE putref_Ink(
+        IInkDisp *NewInk) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_AutoRedraw(
+        VARIANT_BOOL *AutoRedraw) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_AutoRedraw(
+        VARIANT_BOOL AutoRedraw) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_CollectingInk(
+        VARIANT_BOOL *Collecting) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_CollectionMode(
+        InkCollectionMode *Mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_CollectionMode(
+        InkCollectionMode Mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_DynamicRendering(
+        VARIANT_BOOL *Enabled) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_DynamicRendering(
+        VARIANT_BOOL Enabled) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_DesiredPacketDescription(
+        VARIANT *PacketGuids) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_DesiredPacketDescription(
+        VARIANT PacketGuids) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_MouseIcon(
+        IPictureDisp **MouseIcon) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_MouseIcon(
+        IPictureDisp *MouseIcon) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE putref_MouseIcon(
+        IPictureDisp *MouseIcon) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_MousePointer(
+        InkMousePointer *MousePointer) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_MousePointer(
+        InkMousePointer MousePointer) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Cursors(
+        IInkCursors **Cursors) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_MarginX(
+        LONG *MarginX) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_MarginX(
+        LONG MarginX) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_MarginY(
+        LONG *MarginY) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_MarginY(
+        LONG MarginY) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Tablet(
+        IInkTablet **SingleTablet) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SupportHighContrastInk(
+        VARIANT_BOOL *Support) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_SupportHighContrastInk(
+        VARIANT_BOOL Support) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetGestureStatus(
+        InkApplicationGesture Gesture,
+        VARIANT_BOOL Listen) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetGestureStatus(
+        InkApplicationGesture Gesture,
+        VARIANT_BOOL *Listening) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetWindowInputRectangle(
+        IInkRectangle **WindowInputRectangle) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetWindowInputRectangle(
+        IInkRectangle *WindowInputRectangle) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetAllTabletsMode(
+        VARIANT_BOOL UseMouseForInput = -1) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetSingleTabletIntegratedMode(
+        IInkTablet *Tablet) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetEventInterest(
+        InkCollectorEventInterest EventId,
+        VARIANT_BOOL *Listen) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetEventInterest(
+        InkCollectorEventInterest EventId,
+        VARIANT_BOOL Listen) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IInkCollector, 0xf0f060b5, 0x8b1f, 0x4a7c, 0x89,0xec, 0x88,0x06,0x92,0x58,0x8a,0x4f)
+#endif
+#else
+typedef struct IInkCollectorVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInkCollector* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInkCollector* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInkCollector* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IInkCollector* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IInkCollector* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IInkCollector* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IInkCollector* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IInkCollector methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_hWnd)(
+        IInkCollector* This,
+        LONG_PTR *CurrentWindow);
+
+    HRESULT (STDMETHODCALLTYPE *put_hWnd)(
+        IInkCollector* This,
+        LONG_PTR NewWindow);
+
+    HRESULT (STDMETHODCALLTYPE *get_Enabled)(
+        IInkCollector* This,
+        VARIANT_BOOL *Collecting);
+
+    HRESULT (STDMETHODCALLTYPE *put_Enabled)(
+        IInkCollector* This,
+        VARIANT_BOOL Collecting);
+
+    HRESULT (STDMETHODCALLTYPE *get_DefaultDrawingAttributes)(
+        IInkCollector* This,
+        IInkDrawingAttributes **CurrentAttributes);
+
+    HRESULT (STDMETHODCALLTYPE *putref_DefaultDrawingAttributes)(
+        IInkCollector* This,
+        IInkDrawingAttributes *NewAttributes);
+
+    HRESULT (STDMETHODCALLTYPE *get_Renderer)(
+        IInkCollector* This,
+        IInkRenderer **CurrentInkRenderer);
+
+    HRESULT (STDMETHODCALLTYPE *putref_Renderer)(
+        IInkCollector* This,
+        IInkRenderer *NewInkRenderer);
+
+    HRESULT (STDMETHODCALLTYPE *get_Ink)(
+        IInkCollector* This,
+        IInkDisp **Ink);
+
+    HRESULT (STDMETHODCALLTYPE *putref_Ink)(
+        IInkCollector* This,
+        IInkDisp *NewInk);
+
+    HRESULT (STDMETHODCALLTYPE *get_AutoRedraw)(
+        IInkCollector* This,
+        VARIANT_BOOL *AutoRedraw);
+
+    HRESULT (STDMETHODCALLTYPE *put_AutoRedraw)(
+        IInkCollector* This,
+        VARIANT_BOOL AutoRedraw);
+
+    HRESULT (STDMETHODCALLTYPE *get_CollectingInk)(
+        IInkCollector* This,
+        VARIANT_BOOL *Collecting);
+
+    HRESULT (STDMETHODCALLTYPE *get_CollectionMode)(
+        IInkCollector* This,
+        InkCollectionMode *Mode);
+
+    HRESULT (STDMETHODCALLTYPE *put_CollectionMode)(
+        IInkCollector* This,
+        InkCollectionMode Mode);
+
+    HRESULT (STDMETHODCALLTYPE *get_DynamicRendering)(
+        IInkCollector* This,
+        VARIANT_BOOL *Enabled);
+
+    HRESULT (STDMETHODCALLTYPE *put_DynamicRendering)(
+        IInkCollector* This,
+        VARIANT_BOOL Enabled);
+
+    HRESULT (STDMETHODCALLTYPE *get_DesiredPacketDescription)(
+        IInkCollector* This,
+        VARIANT *PacketGuids);
+
+    HRESULT (STDMETHODCALLTYPE *put_DesiredPacketDescription)(
+        IInkCollector* This,
+        VARIANT PacketGuids);
+
+    HRESULT (STDMETHODCALLTYPE *get_MouseIcon)(
+        IInkCollector* This,
+        IPictureDisp **MouseIcon);
+
+    HRESULT (STDMETHODCALLTYPE *put_MouseIcon)(
+        IInkCollector* This,
+        IPictureDisp *MouseIcon);
+
+    HRESULT (STDMETHODCALLTYPE *putref_MouseIcon)(
+        IInkCollector* This,
+        IPictureDisp *MouseIcon);
+
+    HRESULT (STDMETHODCALLTYPE *get_MousePointer)(
+        IInkCollector* This,
+        InkMousePointer *MousePointer);
+
+    HRESULT (STDMETHODCALLTYPE *put_MousePointer)(
+        IInkCollector* This,
+        InkMousePointer MousePointer);
+
+    HRESULT (STDMETHODCALLTYPE *get_Cursors)(
+        IInkCollector* This,
+        IInkCursors **Cursors);
+
+    HRESULT (STDMETHODCALLTYPE *get_MarginX)(
+        IInkCollector* This,
+        LONG *MarginX);
+
+    HRESULT (STDMETHODCALLTYPE *put_MarginX)(
+        IInkCollector* This,
+        LONG MarginX);
+
+    HRESULT (STDMETHODCALLTYPE *get_MarginY)(
+        IInkCollector* This,
+        LONG *MarginY);
+
+    HRESULT (STDMETHODCALLTYPE *put_MarginY)(
+        IInkCollector* This,
+        LONG MarginY);
+
+    HRESULT (STDMETHODCALLTYPE *get_Tablet)(
+        IInkCollector* This,
+        IInkTablet **SingleTablet);
+
+    HRESULT (STDMETHODCALLTYPE *get_SupportHighContrastInk)(
+        IInkCollector* This,
+        VARIANT_BOOL *Support);
+
+    HRESULT (STDMETHODCALLTYPE *put_SupportHighContrastInk)(
+        IInkCollector* This,
+        VARIANT_BOOL Support);
+
+    HRESULT (STDMETHODCALLTYPE *SetGestureStatus)(
+        IInkCollector* This,
+        InkApplicationGesture Gesture,
+        VARIANT_BOOL Listen);
+
+    HRESULT (STDMETHODCALLTYPE *GetGestureStatus)(
+        IInkCollector* This,
+        InkApplicationGesture Gesture,
+        VARIANT_BOOL *Listening);
+
+    HRESULT (STDMETHODCALLTYPE *GetWindowInputRectangle)(
+        IInkCollector* This,
+        IInkRectangle **WindowInputRectangle);
+
+    HRESULT (STDMETHODCALLTYPE *SetWindowInputRectangle)(
+        IInkCollector* This,
+        IInkRectangle *WindowInputRectangle);
+
+    HRESULT (STDMETHODCALLTYPE *SetAllTabletsMode)(
+        IInkCollector* This,
+        VARIANT_BOOL UseMouseForInput);
+
+    HRESULT (STDMETHODCALLTYPE *SetSingleTabletIntegratedMode)(
+        IInkCollector* This,
+        IInkTablet *Tablet);
+
+    HRESULT (STDMETHODCALLTYPE *GetEventInterest)(
+        IInkCollector* This,
+        InkCollectorEventInterest EventId,
+        VARIANT_BOOL *Listen);
+
+    HRESULT (STDMETHODCALLTYPE *SetEventInterest)(
+        IInkCollector* This,
+        InkCollectorEventInterest EventId,
+        VARIANT_BOOL Listen);
+
+    END_INTERFACE
+} IInkCollectorVtbl;
+interface IInkCollector {
+    CONST_VTBL IInkCollectorVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IInkCollector_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInkCollector_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInkCollector_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IInkCollector_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IInkCollector_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IInkCollector_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IInkCollector_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IInkCollector methods ***/
+#define IInkCollector_get_hWnd(This,CurrentWindow) (This)->lpVtbl->get_hWnd(This,CurrentWindow)
+#define IInkCollector_put_hWnd(This,NewWindow) (This)->lpVtbl->put_hWnd(This,NewWindow)
+#define IInkCollector_get_Enabled(This,Collecting) (This)->lpVtbl->get_Enabled(This,Collecting)
+#define IInkCollector_put_Enabled(This,Collecting) (This)->lpVtbl->put_Enabled(This,Collecting)
+#define IInkCollector_get_DefaultDrawingAttributes(This,CurrentAttributes) (This)->lpVtbl->get_DefaultDrawingAttributes(This,CurrentAttributes)
+#define IInkCollector_putref_DefaultDrawingAttributes(This,NewAttributes) (This)->lpVtbl->putref_DefaultDrawingAttributes(This,NewAttributes)
+#define IInkCollector_get_Renderer(This,CurrentInkRenderer) (This)->lpVtbl->get_Renderer(This,CurrentInkRenderer)
+#define IInkCollector_putref_Renderer(This,NewInkRenderer) (This)->lpVtbl->putref_Renderer(This,NewInkRenderer)
+#define IInkCollector_get_Ink(This,Ink) (This)->lpVtbl->get_Ink(This,Ink)
+#define IInkCollector_putref_Ink(This,NewInk) (This)->lpVtbl->putref_Ink(This,NewInk)
+#define IInkCollector_get_AutoRedraw(This,AutoRedraw) (This)->lpVtbl->get_AutoRedraw(This,AutoRedraw)
+#define IInkCollector_put_AutoRedraw(This,AutoRedraw) (This)->lpVtbl->put_AutoRedraw(This,AutoRedraw)
+#define IInkCollector_get_CollectingInk(This,Collecting) (This)->lpVtbl->get_CollectingInk(This,Collecting)
+#define IInkCollector_get_CollectionMode(This,Mode) (This)->lpVtbl->get_CollectionMode(This,Mode)
+#define IInkCollector_put_CollectionMode(This,Mode) (This)->lpVtbl->put_CollectionMode(This,Mode)
+#define IInkCollector_get_DynamicRendering(This,Enabled) (This)->lpVtbl->get_DynamicRendering(This,Enabled)
+#define IInkCollector_put_DynamicRendering(This,Enabled) (This)->lpVtbl->put_DynamicRendering(This,Enabled)
+#define IInkCollector_get_DesiredPacketDescription(This,PacketGuids) (This)->lpVtbl->get_DesiredPacketDescription(This,PacketGuids)
+#define IInkCollector_put_DesiredPacketDescription(This,PacketGuids) (This)->lpVtbl->put_DesiredPacketDescription(This,PacketGuids)
+#define IInkCollector_get_MouseIcon(This,MouseIcon) (This)->lpVtbl->get_MouseIcon(This,MouseIcon)
+#define IInkCollector_put_MouseIcon(This,MouseIcon) (This)->lpVtbl->put_MouseIcon(This,MouseIcon)
+#define IInkCollector_putref_MouseIcon(This,MouseIcon) (This)->lpVtbl->putref_MouseIcon(This,MouseIcon)
+#define IInkCollector_get_MousePointer(This,MousePointer) (This)->lpVtbl->get_MousePointer(This,MousePointer)
+#define IInkCollector_put_MousePointer(This,MousePointer) (This)->lpVtbl->put_MousePointer(This,MousePointer)
+#define IInkCollector_get_Cursors(This,Cursors) (This)->lpVtbl->get_Cursors(This,Cursors)
+#define IInkCollector_get_MarginX(This,MarginX) (This)->lpVtbl->get_MarginX(This,MarginX)
+#define IInkCollector_put_MarginX(This,MarginX) (This)->lpVtbl->put_MarginX(This,MarginX)
+#define IInkCollector_get_MarginY(This,MarginY) (This)->lpVtbl->get_MarginY(This,MarginY)
+#define IInkCollector_put_MarginY(This,MarginY) (This)->lpVtbl->put_MarginY(This,MarginY)
+#define IInkCollector_get_Tablet(This,SingleTablet) (This)->lpVtbl->get_Tablet(This,SingleTablet)
+#define IInkCollector_get_SupportHighContrastInk(This,Support) (This)->lpVtbl->get_SupportHighContrastInk(This,Support)
+#define IInkCollector_put_SupportHighContrastInk(This,Support) (This)->lpVtbl->put_SupportHighContrastInk(This,Support)
+#define IInkCollector_SetGestureStatus(This,Gesture,Listen) (This)->lpVtbl->SetGestureStatus(This,Gesture,Listen)
+#define IInkCollector_GetGestureStatus(This,Gesture,Listening) (This)->lpVtbl->GetGestureStatus(This,Gesture,Listening)
+#define IInkCollector_GetWindowInputRectangle(This,WindowInputRectangle) (This)->lpVtbl->GetWindowInputRectangle(This,WindowInputRectangle)
+#define IInkCollector_SetWindowInputRectangle(This,WindowInputRectangle) (This)->lpVtbl->SetWindowInputRectangle(This,WindowInputRectangle)
+#define IInkCollector_SetAllTabletsMode(This,UseMouseForInput) (This)->lpVtbl->SetAllTabletsMode(This,UseMouseForInput)
+#define IInkCollector_SetSingleTabletIntegratedMode(This,Tablet) (This)->lpVtbl->SetSingleTabletIntegratedMode(This,Tablet)
+#define IInkCollector_GetEventInterest(This,EventId,Listen) (This)->lpVtbl->GetEventInterest(This,EventId,Listen)
+#define IInkCollector_SetEventInterest(This,EventId,Listen) (This)->lpVtbl->SetEventInterest(This,EventId,Listen)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IInkCollector_QueryInterface(IInkCollector* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IInkCollector_AddRef(IInkCollector* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IInkCollector_Release(IInkCollector* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IInkCollector_GetTypeInfoCount(IInkCollector* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IInkCollector_GetTypeInfo(IInkCollector* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IInkCollector_GetIDsOfNames(IInkCollector* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IInkCollector_Invoke(IInkCollector* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IInkCollector methods ***/
+static FORCEINLINE HRESULT IInkCollector_get_hWnd(IInkCollector* This,LONG_PTR *CurrentWindow) {
+    return This->lpVtbl->get_hWnd(This,CurrentWindow);
+}
+static FORCEINLINE HRESULT IInkCollector_put_hWnd(IInkCollector* This,LONG_PTR NewWindow) {
+    return This->lpVtbl->put_hWnd(This,NewWindow);
+}
+static FORCEINLINE HRESULT IInkCollector_get_Enabled(IInkCollector* This,VARIANT_BOOL *Collecting) {
+    return This->lpVtbl->get_Enabled(This,Collecting);
+}
+static FORCEINLINE HRESULT IInkCollector_put_Enabled(IInkCollector* This,VARIANT_BOOL Collecting) {
+    return This->lpVtbl->put_Enabled(This,Collecting);
+}
+static FORCEINLINE HRESULT IInkCollector_get_DefaultDrawingAttributes(IInkCollector* This,IInkDrawingAttributes **CurrentAttributes) {
+    return This->lpVtbl->get_DefaultDrawingAttributes(This,CurrentAttributes);
+}
+static FORCEINLINE HRESULT IInkCollector_putref_DefaultDrawingAttributes(IInkCollector* This,IInkDrawingAttributes *NewAttributes) {
+    return This->lpVtbl->putref_DefaultDrawingAttributes(This,NewAttributes);
+}
+static FORCEINLINE HRESULT IInkCollector_get_Renderer(IInkCollector* This,IInkRenderer **CurrentInkRenderer) {
+    return This->lpVtbl->get_Renderer(This,CurrentInkRenderer);
+}
+static FORCEINLINE HRESULT IInkCollector_putref_Renderer(IInkCollector* This,IInkRenderer *NewInkRenderer) {
+    return This->lpVtbl->putref_Renderer(This,NewInkRenderer);
+}
+static FORCEINLINE HRESULT IInkCollector_get_Ink(IInkCollector* This,IInkDisp **Ink) {
+    return This->lpVtbl->get_Ink(This,Ink);
+}
+static FORCEINLINE HRESULT IInkCollector_putref_Ink(IInkCollector* This,IInkDisp *NewInk) {
+    return This->lpVtbl->putref_Ink(This,NewInk);
+}
+static FORCEINLINE HRESULT IInkCollector_get_AutoRedraw(IInkCollector* This,VARIANT_BOOL *AutoRedraw) {
+    return This->lpVtbl->get_AutoRedraw(This,AutoRedraw);
+}
+static FORCEINLINE HRESULT IInkCollector_put_AutoRedraw(IInkCollector* This,VARIANT_BOOL AutoRedraw) {
+    return This->lpVtbl->put_AutoRedraw(This,AutoRedraw);
+}
+static FORCEINLINE HRESULT IInkCollector_get_CollectingInk(IInkCollector* This,VARIANT_BOOL *Collecting) {
+    return This->lpVtbl->get_CollectingInk(This,Collecting);
+}
+static FORCEINLINE HRESULT IInkCollector_get_CollectionMode(IInkCollector* This,InkCollectionMode *Mode) {
+    return This->lpVtbl->get_CollectionMode(This,Mode);
+}
+static FORCEINLINE HRESULT IInkCollector_put_CollectionMode(IInkCollector* This,InkCollectionMode Mode) {
+    return This->lpVtbl->put_CollectionMode(This,Mode);
+}
+static FORCEINLINE HRESULT IInkCollector_get_DynamicRendering(IInkCollector* This,VARIANT_BOOL *Enabled) {
+    return This->lpVtbl->get_DynamicRendering(This,Enabled);
+}
+static FORCEINLINE HRESULT IInkCollector_put_DynamicRendering(IInkCollector* This,VARIANT_BOOL Enabled) {
+    return This->lpVtbl->put_DynamicRendering(This,Enabled);
+}
+static FORCEINLINE HRESULT IInkCollector_get_DesiredPacketDescription(IInkCollector* This,VARIANT *PacketGuids) {
+    return This->lpVtbl->get_DesiredPacketDescription(This,PacketGuids);
+}
+static FORCEINLINE HRESULT IInkCollector_put_DesiredPacketDescription(IInkCollector* This,VARIANT PacketGuids) {
+    return This->lpVtbl->put_DesiredPacketDescription(This,PacketGuids);
+}
+static FORCEINLINE HRESULT IInkCollector_get_MouseIcon(IInkCollector* This,IPictureDisp **MouseIcon) {
+    return This->lpVtbl->get_MouseIcon(This,MouseIcon);
+}
+static FORCEINLINE HRESULT IInkCollector_put_MouseIcon(IInkCollector* This,IPictureDisp *MouseIcon) {
+    return This->lpVtbl->put_MouseIcon(This,MouseIcon);
+}
+static FORCEINLINE HRESULT IInkCollector_putref_MouseIcon(IInkCollector* This,IPictureDisp *MouseIcon) {
+    return This->lpVtbl->putref_MouseIcon(This,MouseIcon);
+}
+static FORCEINLINE HRESULT IInkCollector_get_MousePointer(IInkCollector* This,InkMousePointer *MousePointer) {
+    return This->lpVtbl->get_MousePointer(This,MousePointer);
+}
+static FORCEINLINE HRESULT IInkCollector_put_MousePointer(IInkCollector* This,InkMousePointer MousePointer) {
+    return This->lpVtbl->put_MousePointer(This,MousePointer);
+}
+static FORCEINLINE HRESULT IInkCollector_get_Cursors(IInkCollector* This,IInkCursors **Cursors) {
+    return This->lpVtbl->get_Cursors(This,Cursors);
+}
+static FORCEINLINE HRESULT IInkCollector_get_MarginX(IInkCollector* This,LONG *MarginX) {
+    return This->lpVtbl->get_MarginX(This,MarginX);
+}
+static FORCEINLINE HRESULT IInkCollector_put_MarginX(IInkCollector* This,LONG MarginX) {
+    return This->lpVtbl->put_MarginX(This,MarginX);
+}
+static FORCEINLINE HRESULT IInkCollector_get_MarginY(IInkCollector* This,LONG *MarginY) {
+    return This->lpVtbl->get_MarginY(This,MarginY);
+}
+static FORCEINLINE HRESULT IInkCollector_put_MarginY(IInkCollector* This,LONG MarginY) {
+    return This->lpVtbl->put_MarginY(This,MarginY);
+}
+static FORCEINLINE HRESULT IInkCollector_get_Tablet(IInkCollector* This,IInkTablet **SingleTablet) {
+    return This->lpVtbl->get_Tablet(This,SingleTablet);
+}
+static FORCEINLINE HRESULT IInkCollector_get_SupportHighContrastInk(IInkCollector* This,VARIANT_BOOL *Support) {
+    return This->lpVtbl->get_SupportHighContrastInk(This,Support);
+}
+static FORCEINLINE HRESULT IInkCollector_put_SupportHighContrastInk(IInkCollector* This,VARIANT_BOOL Support) {
+    return This->lpVtbl->put_SupportHighContrastInk(This,Support);
+}
+static FORCEINLINE HRESULT IInkCollector_SetGestureStatus(IInkCollector* This,InkApplicationGesture Gesture,VARIANT_BOOL Listen) {
+    return This->lpVtbl->SetGestureStatus(This,Gesture,Listen);
+}
+static FORCEINLINE HRESULT IInkCollector_GetGestureStatus(IInkCollector* This,InkApplicationGesture Gesture,VARIANT_BOOL *Listening) {
+    return This->lpVtbl->GetGestureStatus(This,Gesture,Listening);
+}
+static FORCEINLINE HRESULT IInkCollector_GetWindowInputRectangle(IInkCollector* This,IInkRectangle **WindowInputRectangle) {
+    return This->lpVtbl->GetWindowInputRectangle(This,WindowInputRectangle);
+}
+static FORCEINLINE HRESULT IInkCollector_SetWindowInputRectangle(IInkCollector* This,IInkRectangle *WindowInputRectangle) {
+    return This->lpVtbl->SetWindowInputRectangle(This,WindowInputRectangle);
+}
+static FORCEINLINE HRESULT IInkCollector_SetAllTabletsMode(IInkCollector* This,VARIANT_BOOL UseMouseForInput) {
+    return This->lpVtbl->SetAllTabletsMode(This,UseMouseForInput);
+}
+static FORCEINLINE HRESULT IInkCollector_SetSingleTabletIntegratedMode(IInkCollector* This,IInkTablet *Tablet) {
+    return This->lpVtbl->SetSingleTabletIntegratedMode(This,Tablet);
+}
+static FORCEINLINE HRESULT IInkCollector_GetEventInterest(IInkCollector* This,InkCollectorEventInterest EventId,VARIANT_BOOL *Listen) {
+    return This->lpVtbl->GetEventInterest(This,EventId,Listen);
+}
+static FORCEINLINE HRESULT IInkCollector_SetEventInterest(IInkCollector* This,InkCollectorEventInterest EventId,VARIANT_BOOL Listen) {
+    return This->lpVtbl->SetEventInterest(This,EventId,Listen);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInkCollector_get_hWnd_Proxy(
+    IInkCollector* This,
+    LONG_PTR *CurrentWindow);
+void __RPC_STUB IInkCollector_get_hWnd_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_put_hWnd_Proxy(
+    IInkCollector* This,
+    LONG_PTR NewWindow);
+void __RPC_STUB IInkCollector_put_hWnd_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_get_Enabled_Proxy(
+    IInkCollector* This,
+    VARIANT_BOOL *Collecting);
+void __RPC_STUB IInkCollector_get_Enabled_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_put_Enabled_Proxy(
+    IInkCollector* This,
+    VARIANT_BOOL Collecting);
+void __RPC_STUB IInkCollector_put_Enabled_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_get_DefaultDrawingAttributes_Proxy(
+    IInkCollector* This,
+    IInkDrawingAttributes **CurrentAttributes);
+void __RPC_STUB IInkCollector_get_DefaultDrawingAttributes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_putref_DefaultDrawingAttributes_Proxy(
+    IInkCollector* This,
+    IInkDrawingAttributes *NewAttributes);
+void __RPC_STUB IInkCollector_putref_DefaultDrawingAttributes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_get_Renderer_Proxy(
+    IInkCollector* This,
+    IInkRenderer **CurrentInkRenderer);
+void __RPC_STUB IInkCollector_get_Renderer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_putref_Renderer_Proxy(
+    IInkCollector* This,
+    IInkRenderer *NewInkRenderer);
+void __RPC_STUB IInkCollector_putref_Renderer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_get_Ink_Proxy(
+    IInkCollector* This,
+    IInkDisp **Ink);
+void __RPC_STUB IInkCollector_get_Ink_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_putref_Ink_Proxy(
+    IInkCollector* This,
+    IInkDisp *NewInk);
+void __RPC_STUB IInkCollector_putref_Ink_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_get_AutoRedraw_Proxy(
+    IInkCollector* This,
+    VARIANT_BOOL *AutoRedraw);
+void __RPC_STUB IInkCollector_get_AutoRedraw_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_put_AutoRedraw_Proxy(
+    IInkCollector* This,
+    VARIANT_BOOL AutoRedraw);
+void __RPC_STUB IInkCollector_put_AutoRedraw_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_get_CollectingInk_Proxy(
+    IInkCollector* This,
+    VARIANT_BOOL *Collecting);
+void __RPC_STUB IInkCollector_get_CollectingInk_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_get_CollectionMode_Proxy(
+    IInkCollector* This,
+    InkCollectionMode *Mode);
+void __RPC_STUB IInkCollector_get_CollectionMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_put_CollectionMode_Proxy(
+    IInkCollector* This,
+    InkCollectionMode Mode);
+void __RPC_STUB IInkCollector_put_CollectionMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_get_DynamicRendering_Proxy(
+    IInkCollector* This,
+    VARIANT_BOOL *Enabled);
+void __RPC_STUB IInkCollector_get_DynamicRendering_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_put_DynamicRendering_Proxy(
+    IInkCollector* This,
+    VARIANT_BOOL Enabled);
+void __RPC_STUB IInkCollector_put_DynamicRendering_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_get_DesiredPacketDescription_Proxy(
+    IInkCollector* This,
+    VARIANT *PacketGuids);
+void __RPC_STUB IInkCollector_get_DesiredPacketDescription_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_put_DesiredPacketDescription_Proxy(
+    IInkCollector* This,
+    VARIANT PacketGuids);
+void __RPC_STUB IInkCollector_put_DesiredPacketDescription_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_get_MouseIcon_Proxy(
+    IInkCollector* This,
+    IPictureDisp **MouseIcon);
+void __RPC_STUB IInkCollector_get_MouseIcon_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_put_MouseIcon_Proxy(
+    IInkCollector* This,
+    IPictureDisp *MouseIcon);
+void __RPC_STUB IInkCollector_put_MouseIcon_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_putref_MouseIcon_Proxy(
+    IInkCollector* This,
+    IPictureDisp *MouseIcon);
+void __RPC_STUB IInkCollector_putref_MouseIcon_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_get_MousePointer_Proxy(
+    IInkCollector* This,
+    InkMousePointer *MousePointer);
+void __RPC_STUB IInkCollector_get_MousePointer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_put_MousePointer_Proxy(
+    IInkCollector* This,
+    InkMousePointer MousePointer);
+void __RPC_STUB IInkCollector_put_MousePointer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_get_Cursors_Proxy(
+    IInkCollector* This,
+    IInkCursors **Cursors);
+void __RPC_STUB IInkCollector_get_Cursors_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_get_MarginX_Proxy(
+    IInkCollector* This,
+    LONG *MarginX);
+void __RPC_STUB IInkCollector_get_MarginX_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_put_MarginX_Proxy(
+    IInkCollector* This,
+    LONG MarginX);
+void __RPC_STUB IInkCollector_put_MarginX_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_get_MarginY_Proxy(
+    IInkCollector* This,
+    LONG *MarginY);
+void __RPC_STUB IInkCollector_get_MarginY_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_put_MarginY_Proxy(
+    IInkCollector* This,
+    LONG MarginY);
+void __RPC_STUB IInkCollector_put_MarginY_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_get_Tablet_Proxy(
+    IInkCollector* This,
+    IInkTablet **SingleTablet);
+void __RPC_STUB IInkCollector_get_Tablet_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_get_SupportHighContrastInk_Proxy(
+    IInkCollector* This,
+    VARIANT_BOOL *Support);
+void __RPC_STUB IInkCollector_get_SupportHighContrastInk_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_put_SupportHighContrastInk_Proxy(
+    IInkCollector* This,
+    VARIANT_BOOL Support);
+void __RPC_STUB IInkCollector_put_SupportHighContrastInk_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_SetGestureStatus_Proxy(
+    IInkCollector* This,
+    InkApplicationGesture Gesture,
+    VARIANT_BOOL Listen);
+void __RPC_STUB IInkCollector_SetGestureStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_GetGestureStatus_Proxy(
+    IInkCollector* This,
+    InkApplicationGesture Gesture,
+    VARIANT_BOOL *Listening);
+void __RPC_STUB IInkCollector_GetGestureStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_GetWindowInputRectangle_Proxy(
+    IInkCollector* This,
+    IInkRectangle **WindowInputRectangle);
+void __RPC_STUB IInkCollector_GetWindowInputRectangle_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_SetWindowInputRectangle_Proxy(
+    IInkCollector* This,
+    IInkRectangle *WindowInputRectangle);
+void __RPC_STUB IInkCollector_SetWindowInputRectangle_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_SetAllTabletsMode_Proxy(
+    IInkCollector* This,
+    VARIANT_BOOL UseMouseForInput);
+void __RPC_STUB IInkCollector_SetAllTabletsMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_SetSingleTabletIntegratedMode_Proxy(
+    IInkCollector* This,
+    IInkTablet *Tablet);
+void __RPC_STUB IInkCollector_SetSingleTabletIntegratedMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_GetEventInterest_Proxy(
+    IInkCollector* This,
+    InkCollectorEventInterest EventId,
+    VARIANT_BOOL *Listen);
+void __RPC_STUB IInkCollector_GetEventInterest_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInkCollector_SetEventInterest_Proxy(
+    IInkCollector* This,
+    InkCollectorEventInterest EventId,
+    VARIANT_BOOL Listen);
+void __RPC_STUB IInkCollector_SetEventInterest_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInkCollector_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * _IInkCollectorEvents dispinterface
+ */
+#ifndef ___IInkCollectorEvents_DISPINTERFACE_DEFINED__
+#define ___IInkCollectorEvents_DISPINTERFACE_DEFINED__
+
+DEFINE_GUID(DIID__IInkCollectorEvents, 0x11a583f2, 0x712d, 0x4fea, 0xab,0xcf, 0xab,0x4a,0xf3,0x8e,0xa0,0x6b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("11a583f2-712d-4fea-abcf-ab4af38ea06b")
+_IInkCollectorEvents : public IDispatch
+{
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(_IInkCollectorEvents, 0x11a583f2, 0x712d, 0x4fea, 0xab,0xcf, 0xab,0x4a,0xf3,0x8e,0xa0,0x6b)
+#endif
+#else
+typedef struct _IInkCollectorEventsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        _IInkCollectorEvents* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        _IInkCollectorEvents* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        _IInkCollectorEvents* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        _IInkCollectorEvents* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        _IInkCollectorEvents* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        _IInkCollectorEvents* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        _IInkCollectorEvents* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    END_INTERFACE
+} _IInkCollectorEventsVtbl;
+interface _IInkCollectorEvents {
+    CONST_VTBL _IInkCollectorEventsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define _IInkCollectorEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define _IInkCollectorEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define _IInkCollectorEvents_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define _IInkCollectorEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define _IInkCollectorEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define _IInkCollectorEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define _IInkCollectorEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT _IInkCollectorEvents_QueryInterface(_IInkCollectorEvents* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG _IInkCollectorEvents_AddRef(_IInkCollectorEvents* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG _IInkCollectorEvents_Release(_IInkCollectorEvents* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT _IInkCollectorEvents_GetTypeInfoCount(_IInkCollectorEvents* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT _IInkCollectorEvents_GetTypeInfo(_IInkCollectorEvents* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT _IInkCollectorEvents_GetIDsOfNames(_IInkCollectorEvents* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT _IInkCollectorEvents_Invoke(_IInkCollectorEvents* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+#endif
+#endif
+
+#endif
+
+#endif  /* ___IInkCollectorEvents_DISPINTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * InkCollector coclass
+ */
+
+DEFINE_GUID(CLSID_InkCollector, 0x43fb1553, 0xad74, 0x4ee8, 0x88,0xe4, 0x3e,0x6d,0xaa,0xc9,0x15,0xdb);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("43fb1553-ad74-4ee8-88e4-3e6daac915db") InkCollector;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(InkCollector, 0x43fb1553, 0xad74, 0x4ee8, 0x88,0xe4, 0x3e,0x6d,0xaa,0xc9,0x15,0xdb)
+#endif
+#endif
+
+/* Begin additional prototypes for all interfaces */
+
+ULONG           __RPC_USER BSTR_UserSize     (ULONG *, ULONG, BSTR *);
+unsigned char * __RPC_USER BSTR_UserMarshal  (ULONG *, unsigned char *, BSTR *);
+unsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *);
+void            __RPC_USER BSTR_UserFree     (ULONG *, BSTR *);
+ULONG           __RPC_USER VARIANT_UserSize     (ULONG *, ULONG, VARIANT *);
+unsigned char * __RPC_USER VARIANT_UserMarshal  (ULONG *, unsigned char *, VARIANT *);
+unsigned char * __RPC_USER VARIANT_UserUnmarshal(ULONG *, unsigned char *, VARIANT *);
+void            __RPC_USER VARIANT_UserFree     (ULONG *, VARIANT *);
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __msinkaut_h__ */
diff --git a/x86_64-w64-mingw32/include/msinkaut_i.c b/x86_64-w64-mingw32/include/msinkaut_i.c
new file mode 100644
index 0000000..1edf4f7
--- /dev/null
+++ b/x86_64-w64-mingw32/include/msinkaut_i.c
@@ -0,0 +1,56 @@
+/*** Autogenerated by WIDL 1.6 from include/msinkaut.idl - Do not edit ***/
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifdef _MIDL_USE_GUIDDEF_
+
+#ifndef INITGUID
+#define INITGUID
+#include <guiddef.h>
+#undef INITGUID
+#else
+#include <guiddef.h>
+#endif
+
+#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
+    DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
+
+#else
+
+#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
+    const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
+
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+MIDL_DEFINE_GUID(IID, IID_IInkExtendedProperty, 0xdb489209, 0xb7c3, 0x411d, 0x90,0xf6, 0x15,0x48,0xcf,0xff,0x27,0x1e);
+MIDL_DEFINE_GUID(IID, IID_IInkExtendedProperties, 0x89f2a8be, 0x95a9, 0x4530, 0x8b,0x8f, 0x88,0xe9,0x71,0xe3,0xe2,0x5f);
+MIDL_DEFINE_GUID(IID, IID_IInkDrawingAttributes, 0xbf519b75, 0x0a15, 0x4623, 0xad,0xc9, 0xc0,0x0d,0x43,0x6a,0x80,0x92);
+MIDL_DEFINE_GUID(IID, IID_IInkRectangle, 0x9794ff82, 0x6071, 0x4717, 0x8a,0x8b, 0x6a,0xc7,0xc6,0x4a,0x68,0x6e);
+MIDL_DEFINE_GUID(IID, IID_IInkTablet, 0x2de25eaa, 0x6ef8, 0x42d5, 0xae,0xe9, 0x18,0x5b,0xc8,0x1b,0x91,0x2d);
+MIDL_DEFINE_GUID(IID, IID_IInkCursorButton, 0x85ef9417, 0x1d59, 0x49b2, 0xa1,0x3c, 0x70,0x2c,0x85,0x43,0x08,0x94);
+MIDL_DEFINE_GUID(IID, IID_IInkCursorButtons, 0x3671cc40, 0xb624, 0x4671, 0x9f,0xa0, 0xdb,0x11,0x9d,0x95,0x2d,0x54);
+MIDL_DEFINE_GUID(IID, IID_IInkCursor, 0xad30c630, 0x40c5, 0x4350, 0x84,0x05, 0x9c,0x71,0x01,0x2f,0xc5,0x58);
+MIDL_DEFINE_GUID(IID, IID_IInkTransform, 0x615f1d43, 0x8703, 0x4565, 0x88,0xe2, 0x82,0x01,0xd2,0xec,0xd7,0xb7);
+MIDL_DEFINE_GUID(IID, IID_IInkRecognitionAlternates, 0x286a167f, 0x9f19, 0x4c61, 0x9d,0x53, 0x4f,0x07,0xbe,0x62,0x2b,0x84);
+MIDL_DEFINE_GUID(IID, IID_IInkRecognitionAlternate, 0xb7e660ad, 0x77e4, 0x429b, 0xad,0xda, 0x87,0x37,0x80,0xd1,0xfc,0x4a);
+MIDL_DEFINE_GUID(IID, IID_IInkRecognitionResult, 0x3bc129a8, 0x86cd, 0x45ad, 0xbd,0xe8, 0xe0,0xd3,0x2d,0x61,0xc1,0x6d);
+MIDL_DEFINE_GUID(IID, IID_IInkStrokeDisp, 0x43242fea, 0x91d1, 0x4a72, 0x96,0x3e, 0xfb,0xb9,0x18,0x29,0xcf,0xa2);
+MIDL_DEFINE_GUID(IID, IID_IInkCustomStrokes, 0x7e23a88f, 0xc30e, 0x420f, 0x9b,0xdb, 0x28,0x90,0x25,0x43,0xf0,0xc1);
+MIDL_DEFINE_GUID(IID, IID_IInkDisp, 0x9d398fa0, 0xc4e2, 0x4fcd, 0x99,0x73, 0x97,0x5c,0xaa,0xf4,0x7e,0xa6);
+MIDL_DEFINE_GUID(IID, IID_IInkStrokes, 0xf1f4c9d8, 0x590a, 0x4963, 0xb3,0xae, 0x19,0x35,0x67,0x1b,0xb6,0xf3);
+MIDL_DEFINE_GUID(IID, IID_IInkRenderer, 0xe6257a9c, 0xb511, 0x4f4c, 0xa8,0xb0, 0xa7,0xdb,0xc9,0x50,0x6b,0x83);
+MIDL_DEFINE_GUID(IID, IID_IInkCursors, 0xa248c1ac, 0xc698, 0x4e06, 0x9e,0x5c, 0xd5,0x7f,0x77,0xc7,0xe6,0x47);
+MIDL_DEFINE_GUID(IID, IID_IInkCollector, 0xf0f060b5, 0x8b1f, 0x4a7c, 0x89,0xec, 0x88,0x06,0x92,0x58,0x8a,0x4f);
+MIDL_DEFINE_GUID(IID, DIID__IInkCollectorEvents, 0x11a583f2, 0x712d, 0x4fea, 0xab,0xcf, 0xab,0x4a,0xf3,0x8e,0xa0,0x6b);
+MIDL_DEFINE_GUID(CLSID, CLSID_InkCollector, 0x43fb1553, 0xad74, 0x4ee8, 0x88,0xe4, 0x3e,0x6d,0xaa,0xc9,0x15,0xdb);
+
+#ifdef __cplusplus
+}
+#endif
+
+#undef MIDL_DEFINE_GUID
diff --git a/x86_64-w64-mingw32/include/propsys.h b/x86_64-w64-mingw32/include/propsys.h
index a0099a4..088e998 100644
--- a/x86_64-w64-mingw32/include/propsys.h
+++ b/x86_64-w64-mingw32/include/propsys.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 1.6 from /usr/local/google/buildbot/src/android/mingw/toolchain/mingw/mingw-w64-v4.0.4/mingw-w64-headers/include/propsys.idl - Do not edit ***/
+/*** Autogenerated by WIDL 1.6 from include/propsys.idl - Do not edit ***/
 
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
 #define __REQUIRED_RPCNDR_H_VERSION__ 475
diff --git a/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h b/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h
index ce2b15c..7da3238 100644
--- a/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h
+++ b/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h
@@ -66,6 +66,26 @@
 #ifndef _INTRIN_MAC_
 #define _INTRIN_MAC_
 
+/* GCC v6 added support for outputting flags.  This allows better code to be
+   produced for a number of intrinsics. */
+#ifndef __GCC_ASM_FLAG_OUTPUTS__
+#define __FLAGCONSTRAINT "=qm"
+#define __FLAGSET "\n\tsetc %[old]"
+#define __FLAGCLOBBER1 , "cc"
+#define __FLAGCLOBBER2 "cc"
+#else
+#define __FLAGCONSTRAINT "=@ccc"
+#define __FLAGSET
+#define __FLAGCLOBBER1
+#define __FLAGCLOBBER2
+#endif
+
+/* Clang has support for MSVC builtins, GCC doesn't */
+#pragma push_macro("__has_builtin")
+#ifndef __has_builtin
+  #define __has_builtin(x) 0
+#endif
+
 /* This macro is used by __stosb, __stosw, __stosd, __stosq */
 
 /* Parameters: (FunctionName, DataType, Operator)
@@ -109,9 +129,9 @@
 { \
    unsigned char old; \
    __asm__ __volatile__ (z \
-      : [old] "=qm" (old), [Base] "+m" (*Base) \
+      : [old] __FLAGCONSTRAINT (old), [Base] "+m" (*Base) \
       : [Offset] a "r" (Offset) \
-      : "memory", "cc"); \
+      : "memory" __FLAGCLOBBER1); \
    return old; \
 }
 #elif defined(__arm__) || defined(_ARM_)
@@ -193,6 +213,9 @@
    DataType: unsigned __LONG32 or unsigned __int64
    Statement: BSF or BSR */
 
+/* GCC v6 added support for outputting flags.  This allows better code to be
+   produced for a number of intrinsics. */
+#ifndef __GCC_ASM_FLAG_OUTPUTS__
 #define __buildbitscan(x, y, z) unsigned char x(unsigned __LONG32 *Index, y Mask) \
 { \
    y n; \
@@ -203,6 +226,18 @@
    *Index = n; \
    return Mask!=0; \
 }
+#else
+#define __buildbitscan(x, y, z) unsigned char x(unsigned __LONG32 *Index, y Mask) \
+{ \
+   y n; \
+   unsigned char old; \
+   __asm__ (z \
+      : "=@ccnz" (old), [Index] "=r" (n) \
+      : [Mask] "r" (Mask)); \
+   *Index = n; \
+   return old; \
+}
+#endif
 
 /* This macro is used by _bittest & _bittest64
 
@@ -216,10 +251,10 @@
 #define __buildbittest(x, y, z, a) unsigned char x(const y *Base, y Offset) \
 { \
    unsigned char old; \
-   __asm__ ("bt{" z " %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]" \
-      : [old] "=rm" (old) \
+   __asm__ ("bt{" z " %[Offset],%[Base] | %[Base],%[Offset]}" __FLAGSET \
+      : [old] __FLAGCONSTRAINT (old) \
       : [Offset] a "r" (Offset), [Base] "rm" (*Base) \
-      : "cc"); \
+      : __FLAGCLOBBER2); \
    return old; \
 }
 
@@ -236,10 +271,10 @@
 #define __buildbittestand(x, y, z, a, b) unsigned char x(y *Base, y Offset) \
 { \
    unsigned char old; \
-   __asm__ (z "{" b " %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]" \
-      : [old] "=r" (old), [Base] "+rm" (*Base) \
+   __asm__ (z "{" b " %[Offset],%[Base] | %[Base],%[Offset]}" __FLAGSET \
+      : [old] __FLAGCONSTRAINT (old), [Base] "+rm" (*Base) \
       : [Offset] a "r" (Offset) \
-      : "cc"); \
+      : __FLAGCLOBBER2); \
    return old; \
 }
 
@@ -430,11 +465,13 @@
 #define __INTRINSIC_SPECIAL__InterlockedCompareExchange16
 #define __INTRINSIC_SPECIAL__InterlockedIncrement
 #define __INTRINSIC_SPECIAL__InterlockedDecrement
+#define __INTRINSIC_SPECIAL__InterlockedAdd
 #define __INTRINSIC_SPECIAL__InterlockedExchange
 #define __INTRINSIC_SPECIAL__InterlockedExchangeAdd
 #define __INTRINSIC_SPECIAL__InterlockedCompareExchange
 #define __INTRINSIC_SPECIAL__InterlockedIncrement64
 #define __INTRINSIC_SPECIAL__InterlockedDecrement64
+#define __INTRINSIC_SPECIAL__InterlockedAdd64
 #define __INTRINSIC_SPECIAL__InterlockedExchangeAdd64
 #define __INTRINSIC_SPECIAL__InterlockedExchange64
 #define __INTRINSIC_SPECIAL__InterlockedCompareExchange64
@@ -481,6 +518,7 @@
 
 #define __INTRINSIC_SPECIAL__InterlockedIncrement
 #define __INTRINSIC_SPECIAL__InterlockedDecrement
+#define __INTRINSIC_SPECIAL__InterlockedAdd
 #define __INTRINSIC_SPECIAL__InterlockedExchange
 #define __INTRINSIC_SPECIAL__InterlockedExchangeAdd
 #define __INTRINSIC_SPECIAL__InterlockedCompareExchange
@@ -491,6 +529,7 @@
 #define __INTRINSIC_SPECIAL__InterlockedXor64
 #define __INTRINSIC_SPECIAL__InterlockedIncrement64
 #define __INTRINSIC_SPECIAL__InterlockedDecrement64
+#define __INTRINSIC_SPECIAL__InterlockedAdd64
 #define __INTRINSIC_SPECIAL__InterlockedExchange64
 #define __INTRINSIC_SPECIAL__InterlockedExchangeAdd64
 #define __INTRINSIC_SPECIAL__InterlockedCompareExchange64
@@ -552,42 +591,42 @@
 #if __INTRINSIC_PROLOG(_interlockedbittestandset64)
 __MINGW_EXTENSION unsigned char _interlockedbittestandset64(__int64 *a, __int64 b);
 __INTRINSICS_USEINLINE 
-__buildbittesti(_interlockedbittestandset64, __int64, "lock bts{q %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]", "J", __int64)
+__buildbittesti(_interlockedbittestandset64, __int64, "lock bts{q %[Offset],%[Base] | %[Base],%[Offset]}" __FLAGSET, "J", __int64)
 #define __INTRINSIC_DEFINED__interlockedbittestandset64
 #endif /* __INTRINSIC_PROLOG */
 
 #if __INTRINSIC_PROLOG(_interlockedbittestandreset64)
 __MINGW_EXTENSION unsigned char _interlockedbittestandreset64(__int64 *a, __int64 b);
 __INTRINSICS_USEINLINE 
-__buildbittesti(_interlockedbittestandreset64, __int64, "lock btr{q %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]", "J", __int64)
+__buildbittesti(_interlockedbittestandreset64, __int64, "lock btr{q %[Offset],%[Base] | %[Base],%[Offset]}" __FLAGSET, "J", __int64)
 #define __INTRINSIC_DEFINED__interlockedbittestandreset64
 #endif /* __INTRINSIC_PROLOG */
 
 #if __INTRINSIC_PROLOG(_interlockedbittestandcomplement64)
 __MINGW_EXTENSION unsigned char _interlockedbittestandcomplement64(__int64 *a, __int64 b);
 __INTRINSICS_USEINLINE 
-__buildbittesti(_interlockedbittestandcomplement64, __int64, "lock btc{q %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]", "J", __int64)
+__buildbittesti(_interlockedbittestandcomplement64, __int64, "lock btc{q %[Offset],%[Base] | %[Base],%[Offset]}" __FLAGSET, "J", __int64)
 #define __INTRINSIC_DEFINED__interlockedbittestandcomplement64
 #endif /* __INTRINSIC_PROLOG */
 
 #if __INTRINSIC_PROLOG(InterlockedBitTestAndSet64)
 __MINGW_EXTENSION unsigned char InterlockedBitTestAndSet64(volatile __int64 *a, __int64 b);
 __INTRINSICS_USEINLINE 
-__buildbittesti(InterlockedBitTestAndSet64, volatile __int64, "lock bts{q %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]", "J", __int64)
+__buildbittesti(InterlockedBitTestAndSet64, volatile __int64, "lock bts{q %[Offset],%[Base] | %[Base],%[Offset]}" __FLAGSET, "J", __int64)
 #define __INTRINSIC_DEFINED_InterlockedBitTestAndSet64
 #endif /* __INTRINSIC_PROLOG */
 
 #if __INTRINSIC_PROLOG(InterlockedBitTestAndReset64)
 __MINGW_EXTENSION unsigned char InterlockedBitTestAndReset64(volatile __int64 *a, __int64 b);
 __INTRINSICS_USEINLINE 
-__buildbittesti(InterlockedBitTestAndReset64, volatile __int64, "lock btr{q %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]", "J", __int64)
+__buildbittesti(InterlockedBitTestAndReset64, volatile __int64, "lock btr{q %[Offset],%[Base] | %[Base],%[Offset]}" __FLAGSET, "J", __int64)
 #define __INTRINSIC_DEFINED_InterlockedBitTestAndReset64
 #endif /* __INTRINSIC_PROLOG */
 
 #if __INTRINSIC_PROLOG(InterlockedBitTestAndComplement64)
 __MINGW_EXTENSION unsigned char InterlockedBitTestAndComplement64(volatile __int64 *a, __int64 b);
 __INTRINSICS_USEINLINE 
-__buildbittesti(InterlockedBitTestAndComplement64, volatile __int64, "lock btc{q %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]", "J", __int64)
+__buildbittesti(InterlockedBitTestAndComplement64, volatile __int64, "lock btc{q %[Offset],%[Base] | %[Base],%[Offset]}" __FLAGSET, "J", __int64)
 #define __INTRINSIC_DEFINED_InterlockedBitTestAndComplement64
 #endif /* __INTRINSIC_PROLOG */
 
@@ -982,46 +1021,74 @@
 
 #if __INTRINSIC_PROLOG(_InterlockedExchangeAdd)
 __LONG32 _InterlockedExchangeAdd(__LONG32 volatile *Addend, __LONG32 Value);
+#if !__has_builtin(_InterlockedExchangeAdd)
 __INTRINSICS_USEINLINE 
 __LONG32 _InterlockedExchangeAdd(__LONG32 volatile *Addend, __LONG32 Value) {
     return __sync_fetch_and_add(Addend, Value);
 }
+#endif
 #define __INTRINSIC_DEFINED__InterlockedExchangeAdd
 #endif /* __INTRINSIC_PROLOG */
 
 #if __INTRINSIC_PROLOG(_InterlockedCompareExchange)
 __LONG32 _InterlockedCompareExchange(__LONG32 volatile *Destination, __LONG32 ExChange, __LONG32 Comperand);
+#if !__has_builtin(_InterlockedCompareExchange)
 __INTRINSICS_USEINLINE 
 __LONG32 _InterlockedCompareExchange(__LONG32 volatile *Destination, __LONG32 ExChange, __LONG32 Comperand) {
     return __sync_val_compare_and_swap(Destination, Comperand, ExChange);
 }
+#endif
 #define __INTRINSIC_DEFINED__InterlockedCompareExchange
 #endif /* __INTRINSIC_PROLOG */
 
 #if __INTRINSIC_PROLOG(_InterlockedIncrement)
 __LONG32 _InterlockedIncrement(__LONG32 volatile *Addend);
+#if !__has_builtin(_InterlockedIncrement)
 __INTRINSICS_USEINLINE 
 __LONG32 _InterlockedIncrement(__LONG32 volatile *Addend) {
    return __sync_add_and_fetch(Addend, 1);
 }
+#endif
 #define __INTRINSIC_DEFINED__InterlockedIncrement
 #endif /* __INTRINSIC_PROLOG */
 
 #if __INTRINSIC_PROLOG(_InterlockedDecrement)
 __LONG32 _InterlockedDecrement(__LONG32 volatile *Addend);
+#if !__has_builtin(_InterlockedDecrement)
 __INTRINSICS_USEINLINE 
 __LONG32 _InterlockedDecrement(__LONG32 volatile *Addend) {
    return __sync_sub_and_fetch(Addend, 1);
 }
+#endif
 #define __INTRINSIC_DEFINED__InterlockedDecrement
 #endif /* __INTRINSIC_PROLOG */
 
+#if __INTRINSIC_PROLOG(_InterlockedAdd)
+__LONG32 _InterlockedAdd(__LONG32 volatile *Addend, __LONG32 Value);
+__INTRINSICS_USEINLINE
+__LONG32 _InterlockedAdd(__LONG32 volatile *Addend, __LONG32 Value) {
+    return __sync_add_and_fetch(Addend, Value);
+}
+#define __INTRINSIC_DEFINED__InterlockedAdd
+#endif /* __INTRINSIC_PROLOG */
+
+#if __INTRINSIC_PROLOG(_InterlockedAdd64)
+__MINGW_EXTENSION __int64 _InterlockedAdd64(__int64 volatile *Addend, __int64 Value);
+__MINGW_EXTENSION __INTRINSICS_USEINLINE
+__int64 _InterlockedAdd64(__int64 volatile *Addend, __int64 Value) {
+    return __sync_add_and_fetch(Addend, Value);
+}
+#define __INTRINSIC_DEFINED__InterlockedAdd64
+#endif /* __INTRINSIC_PROLOG */
+
 #if __INTRINSIC_PROLOG(_InterlockedExchange)
 __LONG32 _InterlockedExchange(__LONG32 volatile *Target, __LONG32 Value);
+#if !__has_builtin(_InterlockedExchange)
 __INTRINSICS_USEINLINE 
 __LONG32 _InterlockedExchange(__LONG32 volatile *Target, __LONG32 Value) {
     return __sync_lock_test_and_set(Target, Value);
 }
+#endif
 #define __INTRINSIC_DEFINED__InterlockedExchange
 #endif /* __INTRINSIC_PROLOG */
 
@@ -1036,19 +1103,23 @@
 
 #if __INTRINSIC_PROLOG(_InterlockedCompareExchangePointer)
 void *_InterlockedCompareExchangePointer(void * volatile *Destination, void *ExChange, void *Comperand);
+#if !__has_builtin(_InterlockedCompareExchangePointer)
 __INTRINSICS_USEINLINE 
 void *_InterlockedCompareExchangePointer(void *volatile *Destination, void *ExChange, void *Comperand) {
     return __sync_val_compare_and_swap(Destination, Comperand, ExChange);
 }
+#endif
 #define __INTRINSIC_DEFINED__InterlockedCompareExchangePointer
 #endif /* __INTRINSIC_PROLOG */
 
 #if __INTRINSIC_PROLOG(_InterlockedExchangePointer)
 void *_InterlockedExchangePointer(void *volatile *Target,void *Value);
+#if !__has_builtin(_InterlockedExchangePointer)
 __INTRINSICS_USEINLINE 
 void *_InterlockedExchangePointer(void *volatile *Target,void *Value) {
     return __sync_lock_test_and_set(Target, Value);
 }
+#endif
 #define __INTRINSIC_DEFINED__InterlockedExchangePointer
 #endif /* __INTRINSIC_PROLOG */
 
@@ -1089,42 +1160,42 @@
 #if __INTRINSIC_PROLOG(_interlockedbittestandset)
 unsigned char _interlockedbittestandset(__LONG32 *a, __LONG32 b);
 __INTRINSICS_USEINLINE
-__buildbittesti(_interlockedbittestandset, __LONG32, "lock bts{l %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]", "I", __LONG32)
+__buildbittesti(_interlockedbittestandset, __LONG32, "lock bts{l %[Offset],%[Base] | %[Base],%[Offset]}" __FLAGSET, "I", __LONG32)
 #define __INTRINSIC_DEFINED__interlockedbittestandset
 #endif /* __INTRINSIC_PROLOG */
 
 #if __INTRINSIC_PROLOG(_interlockedbittestandreset)
 unsigned char _interlockedbittestandreset(__LONG32 *a, __LONG32 b);
 __INTRINSICS_USEINLINE
-__buildbittesti(_interlockedbittestandreset, __LONG32, "lock btr{l %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]", "I", __LONG32)
+__buildbittesti(_interlockedbittestandreset, __LONG32, "lock btr{l %[Offset],%[Base] | %[Base],%[Offset]}" __FLAGSET, "I", __LONG32)
 #define __INTRINSIC_DEFINED__interlockedbittestandreset
 #endif /* __INTRINSIC_PROLOG */
 
 #if __INTRINSIC_PROLOG(_interlockedbittestandcomplement)
 unsigned char _interlockedbittestandcomplement(__LONG32 *a, __LONG32 b);
 __INTRINSICS_USEINLINE
-__buildbittesti(_interlockedbittestandcomplement, __LONG32, "lock btc{l %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]", "I", __LONG32)
+__buildbittesti(_interlockedbittestandcomplement, __LONG32, "lock btc{l %[Offset],%[Base] | %[Base],%[Offset]}" __FLAGSET, "I", __LONG32)
 #define __INTRINSIC_DEFINED__interlockedbittestandcomplement
 #endif /* __INTRINSIC_PROLOG */
 
 #if __INTRINSIC_PROLOG(InterlockedBitTestAndSet)
 unsigned char InterlockedBitTestAndSet(volatile __LONG32 *a, __LONG32 b);
 __INTRINSICS_USEINLINE
-__buildbittesti(InterlockedBitTestAndSet, volatile __LONG32, "lock bts{l %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]", "I", __LONG32)
+__buildbittesti(InterlockedBitTestAndSet, volatile __LONG32, "lock bts{l %[Offset],%[Base] | %[Base],%[Offset]}" __FLAGSET, "I", __LONG32)
 #define __INTRINSIC_DEFINED_InterlockedBitTestAndSet
 #endif /* __INTRINSIC_PROLOG */
 
 #if __INTRINSIC_PROLOG(InterlockedBitTestAndReset)
 unsigned char InterlockedBitTestAndReset(volatile __LONG32 *a, __LONG32 b);
 __INTRINSICS_USEINLINE
-__buildbittesti(InterlockedBitTestAndReset, volatile __LONG32, "lock btr{l %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]", "I", __LONG32)
+__buildbittesti(InterlockedBitTestAndReset, volatile __LONG32, "lock btr{l %[Offset],%[Base] | %[Base],%[Offset]}" __FLAGSET, "I", __LONG32)
 #define __INTRINSIC_DEFINED_InterlockedBitTestAndReset
 #endif /* __INTRINSIC_PROLOG */
 
 #if __INTRINSIC_PROLOG(InterlockedBitTestAndComplement)
 unsigned char InterlockedBitTestAndComplement(volatile __LONG32 *a, __LONG32 b);
 __INTRINSICS_USEINLINE
-__buildbittesti(InterlockedBitTestAndComplement, volatile __LONG32, "lock btc{l %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]", "I", __LONG32)
+__buildbittesti(InterlockedBitTestAndComplement, volatile __LONG32, "lock btc{l %[Offset],%[Base] | %[Base],%[Offset]}" __FLAGSET, "I", __LONG32)
 #define __INTRINSIC_DEFINED_InterlockedBitTestAndComplement
 #endif /* __INTRINSIC_PROLOG */
 
@@ -1266,6 +1337,18 @@
 #define __INTRINSIC_DEFINED___cpuid
 #endif /* __INTRINSIC_PROLOG */
 
+#if __INTRINSIC_PROLOG(__cpuidex)
+void __cpuidex(int CPUInfo[4], int, int);
+__INTRINSICS_USEINLINE
+void __cpuidex(int CPUInfo[4], int function_id, int subfunction_id) {
+   __asm__ __volatile__ (
+      "cpuid"
+      : "=a" (CPUInfo [0]), "=b" (CPUInfo [1]), "=c" (CPUInfo [2]), "=d" (CPUInfo [3])
+      : "a" (function_id), "c" (subfunction_id));
+}
+#define __INTRINSIC_DEFINED___cpuidex
+#endif /* __INTRINSIC_PROLOG */
+
 #if __INTRINSIC_PROLOG(__readmsr)
 __MINGW_EXTENSION unsigned __int64 __readmsr(unsigned __LONG32);
 __INTRINSICS_USEINLINE
@@ -1322,6 +1405,28 @@
 #define __INTRINSIC_DEFINED___movsd
 #endif /* __INTRINSIC_PROLOG */
 
+/* NOTE: This should be in immintrin.h */
+#if __INTRINSIC_PROLOG(_xgetbv)
+unsigned __int64 _xgetbv(unsigned int);
+__INTRINSICS_USEINLINE
+unsigned __int64 _xgetbv(unsigned int index)
+{
+#if defined(__x86_64__) || defined(_AMD64_)
+   unsigned __int64 val1, val2;
+#else
+   unsigned __LONG32 val1, val2;
+#endif /* defined(__x86_64__) || defined(_AMD64_) */
+
+   __asm__ __volatile__(
+      "xgetbv"
+      : "=a" (val1), "=d" (val2)
+      : "c" (index));
+
+   return (((unsigned __int64)val2) << 32) | val1;
+}
+#define __INTRINSIC_DEFINED__xgetbv
+#endif /* __INTRINSIC_PROLOG */
+
 #endif /* defined(__x86_64__) || defined(_AMD64_) || defined(__i386__) || defined(_X86_) */
 
 /* ***************************************************** */
@@ -1344,9 +1449,11 @@
 
 #if __INTRINSIC_PROLOG(__readfsdword)
 unsigned __LONG32 __readfsdword(unsigned __LONG32 Offset);
+#if !__has_builtin(__readfsdword)
 __INTRINSICS_USEINLINE
 __buildreadseg(__readfsdword, unsigned __LONG32, "fs", "l")
 #define __INTRINSIC_DEFINED___readfsdword
+#endif
 #endif /* __INTRINSIC_PROLOG */
 
 #if __INTRINSIC_PROLOG(__writefsbyte)
@@ -1443,5 +1550,11 @@
 #undef __INTRINSIC_PROLOG
 #undef __INTRINSIC_EPILOG
 #undef __INTRINSICS_USEINLINE
+#undef __FLAGCONSTRAINT
+#undef __FLAGSET
+#undef __FLAGCLOBBER1
+#undef __FLAGCLOBBER2
+
+#pragma pop_macro("__has_builtin")
 
 #endif /* __MINGW_INTRIN_INLINE */
diff --git a/x86_64-w64-mingw32/include/pthread.h b/x86_64-w64-mingw32/include/pthread.h
index f63d328..66810db 100644
--- a/x86_64-w64-mingw32/include/pthread.h
+++ b/x86_64-w64-mingw32/include/pthread.h
@@ -212,7 +212,7 @@
 
 /* Note that if async cancelling is used, then there is a race here */
 #define pthread_cleanup_pop(E)\
-    (*pthread_getclean() = _pthread_cup.next, (E?_pthread_cup.func((pthread_once_t *)_pthread_cup.arg):0));}
+    (*pthread_getclean() = _pthread_cup.next, ((E) ? (_pthread_cup.func((pthread_once_t *)_pthread_cup.arg)) : (void)0));}
 
 /* Windows doesn't have this, so declare it ourselves. */
 #ifndef _TIMESPEC_DEFINED
@@ -314,6 +314,9 @@
 int       WINPTHREAD_API pthread_create(pthread_t *th, const pthread_attr_t *attr, void *(* func)(void *), void *arg);
 int       WINPTHREAD_API pthread_join(pthread_t t, void **res);
 int       WINPTHREAD_API pthread_detach(pthread_t t);
+int       WINPTHREAD_API pthread_setname_np(pthread_t thread, const char *name);
+int       WINPTHREAD_API pthread_getname_np(pthread_t thread, char *name, size_t len);
+
 
 int WINPTHREAD_API pthread_rwlock_init(pthread_rwlock_t *rwlock_, const pthread_rwlockattr_t *attr);
 int WINPTHREAD_API pthread_rwlock_wrlock(pthread_rwlock_t *l);
diff --git a/x86_64-w64-mingw32/include/rasshost.h b/x86_64-w64-mingw32/include/rasshost.h
index 3cd3c3c..ea88a7b 100644
--- a/x86_64-w64-mingw32/include/rasshost.h
+++ b/x86_64-w64-mingw32/include/rasshost.h
@@ -5,8 +5,8 @@
 #ifndef _RASSHOST_
 #define _RASSHOST_
 
-#include <winapifamily.h>
-
+#include <winapifamily.h>
+
 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
 
 #include <mprapi.h>
diff --git a/x86_64-w64-mingw32/include/regbag.h b/x86_64-w64-mingw32/include/regbag.h
new file mode 100644
index 0000000..de32006
--- /dev/null
+++ b/x86_64-w64-mingw32/include/regbag.h
@@ -0,0 +1,147 @@
+/*** Autogenerated by WIDL 1.6 from include/regbag.idl - Do not edit ***/
+
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
+
+#ifndef __regbag_h__
+#define __regbag_h__
+
+/* Forward declarations */
+
+#ifndef __ICreatePropBagOnRegKey_FWD_DEFINED__
+#define __ICreatePropBagOnRegKey_FWD_DEFINED__
+typedef interface ICreatePropBagOnRegKey ICreatePropBagOnRegKey;
+#endif
+
+/* Headers for imported files */
+
+#include <objidl.h>
+#include <oaidl.h>
+#include <ocidl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <winapifamily.h>
+
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+/*****************************************************************************
+ * ICreatePropBagOnRegKey interface
+ */
+#ifndef __ICreatePropBagOnRegKey_INTERFACE_DEFINED__
+#define __ICreatePropBagOnRegKey_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ICreatePropBagOnRegKey, 0x8a674b48, 0x1f63, 0x11d3, 0xb6,0x4c, 0x00,0xc0,0x4f,0x79,0x49,0x8e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("8a674b48-1f63-11d3-b64c-00c04f79498e")
+ICreatePropBagOnRegKey : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Create(
+        HKEY hkey,
+        LPCOLESTR subkey,
+        DWORD ulOptions,
+        DWORD samDesired,
+        REFIID iid,
+        LPVOID *ppBag) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ICreatePropBagOnRegKey, 0x8a674b48, 0x1f63, 0x11d3, 0xb6,0x4c, 0x00,0xc0,0x4f,0x79,0x49,0x8e)
+#endif
+#else
+typedef struct ICreatePropBagOnRegKeyVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ICreatePropBagOnRegKey* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ICreatePropBagOnRegKey* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ICreatePropBagOnRegKey* This);
+
+    /*** ICreatePropBagOnRegKey methods ***/
+    HRESULT (STDMETHODCALLTYPE *Create)(
+        ICreatePropBagOnRegKey* This,
+        HKEY hkey,
+        LPCOLESTR subkey,
+        DWORD ulOptions,
+        DWORD samDesired,
+        REFIID iid,
+        LPVOID *ppBag);
+
+    END_INTERFACE
+} ICreatePropBagOnRegKeyVtbl;
+interface ICreatePropBagOnRegKey {
+    CONST_VTBL ICreatePropBagOnRegKeyVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ICreatePropBagOnRegKey_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ICreatePropBagOnRegKey_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ICreatePropBagOnRegKey_Release(This) (This)->lpVtbl->Release(This)
+/*** ICreatePropBagOnRegKey methods ***/
+#define ICreatePropBagOnRegKey_Create(This,hkey,subkey,ulOptions,samDesired,iid,ppBag) (This)->lpVtbl->Create(This,hkey,subkey,ulOptions,samDesired,iid,ppBag)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ICreatePropBagOnRegKey_QueryInterface(ICreatePropBagOnRegKey* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ICreatePropBagOnRegKey_AddRef(ICreatePropBagOnRegKey* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ICreatePropBagOnRegKey_Release(ICreatePropBagOnRegKey* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ICreatePropBagOnRegKey methods ***/
+static FORCEINLINE HRESULT ICreatePropBagOnRegKey_Create(ICreatePropBagOnRegKey* This,HKEY hkey,LPCOLESTR subkey,DWORD ulOptions,DWORD samDesired,REFIID iid,LPVOID *ppBag) {
+    return This->lpVtbl->Create(This,hkey,subkey,ulOptions,samDesired,iid,ppBag);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ICreatePropBagOnRegKey_Create_Proxy(
+    ICreatePropBagOnRegKey* This,
+    HKEY hkey,
+    LPCOLESTR subkey,
+    DWORD ulOptions,
+    DWORD samDesired,
+    REFIID iid,
+    LPVOID *ppBag);
+void __RPC_STUB ICreatePropBagOnRegKey_Create_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ICreatePropBagOnRegKey_INTERFACE_DEFINED__ */
+
+#endif
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __regbag_h__ */
diff --git a/x86_64-w64-mingw32/include/roapi.h b/x86_64-w64-mingw32/include/roapi.h
index d4146ba..14d94c3 100644
--- a/x86_64-w64-mingw32/include/roapi.h
+++ b/x86_64-w64-mingw32/include/roapi.h
@@ -13,8 +13,6 @@
 #include <inspectable.h>
 #include <activation.h>
 
-#if _WIN32_WINNT >= _WIN32_WINNT_WIN8
-
 typedef enum RO_INIT_TYPE {
 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
   RO_INIT_SINGLETHREADED = 0,
@@ -26,7 +24,9 @@
 
 typedef HRESULT (WINAPI *PFNGETACTIVATIONFACTORY)(HSTRING, IActivationFactory **);
 
-/* */
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 HRESULT WINAPI RoActivateInstance(HSTRING activatableClassId, IInspectable **instance);
 
@@ -51,20 +51,22 @@
 
 HRESULT WINAPI RoGetApartmentIdentifier (UINT64 *apartmentId);
 
-#endif
-
 #ifdef __cplusplus
+} /* extern "C" */
 
 namespace Windows {
   namespace Foundation {
-    __inline HRESULT Initalize (RO_INIT_TYPE it
+    __inline HRESULT Initialize (RO_INIT_TYPE it
 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
-	 = 0
+	 = RO_INIT_SINGLETHREADED
 #endif
     ) { return RoInitialize (it); }
     __inline void Uninitialize ()
     { RoUninitialize (); }
 
+    template<class T> __inline HRESULT GetActivationFactory(HSTRING classid, T **factory) {
+      return RoGetActivationFactory(classid, IID_INS_ARGS(factory));
+    }
   }
 }
 
@@ -73,12 +75,16 @@
     namespace Foundation {
       __inline HRESULT Initialze (RO_INIT_TYPE it
 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
-	= 0
+	= RO_INIT_SINGLETHREADED
 #endif
       ) { return RoInitialize (it); }
       __inline void Uninitialize ()
       { RoUninitialize (); }
     }
+
+    template<class T> __inline HRESULT GetActivationFactory(HSTRING classid, T **factory) {
+      return RoGetActivationFactory(classid, IID_INS_ARGS(factory));
+    }
   }
 }
 
diff --git a/x86_64-w64-mingw32/include/sal.h b/x86_64-w64-mingw32/include/sal.h
index 9987119..5c200d4 100644
--- a/x86_64-w64-mingw32/include/sal.h
+++ b/x86_64-w64-mingw32/include/sal.h
@@ -17,11 +17,195 @@
 
 #define __checkReturn __inner_checkReturn
 
+/* Pointer parameters */
 #define _In_
-#define _In_opt_
 #define _Out_
+#define _Inout_
+#define _In_z_
+#define _Inout_z_
+#define _In_reads_(s)
+#define _In_reads_bytes_(s)
+#define _In_reads_z_(s)
+#define _In_reads_or_z_(s)
+#define _Out_writes_(s)
+#define _Out_writes_bytes_(s)
+#define _Out_writes_z_(s)
+#define _Inout_updates_(s)
+#define _Inout_updates_bytes_(s)
+#define _Inout_updates_z_(s)
+#define _Out_writes_to_(s,c)
+#define _Out_writes_bytes_to_(s, c)
+#define _Out_writes_all_(s)
+#define _Out_writes_bytes_all_(s)
+#define _Inout_updates_to_(s, c)
+#define _Inout_updates_bytes_to_(s, c)
+#define _Inout_updates_all_(s)
+#define _Inout_updates_bytes_all_(s)
+#define _In_reads_to_ptr_(p)
+#define _In_reads_to_ptr_z_(p)
+#define _Out_writes_to_ptr_(p)
+#define _Out_writes_to_ptr_z(p)
 
+/* Optional pointer parameters */
+#define _In_opt_
+#define _Out_opt_
+#define _Inout_opt_
+#define _In_opt_z_
+#define _Inout_opt_z_
+#define _In_reads_opt_(s)
+#define _In_reads_bytes_opt_(s)
+#define _In_reads_opt_z_(s)
+
+#define _Out_writes_opt_(s)
+#define _Out_writes_opt_z_(s)
+#define _Inout_updates_opt_(s)
+#define _Inout_updates_bytes_opt_(s)
+#define _Inout_updates_opt_z_(s)
+#define _Out_writes_to_opt_(s, c)
+#define _Out_writes_bytes_to_opt_(s, c)
+#define _Out_writes_all_opt_(s)
+#define _Out_writes_bytes_all_opt_(s)
+
+#define _Inout_updates_to_opt_(s, c)
+#define _Inout_updates_bytes_to_opt_(s, c)
+#define _Inout_updates_all_opt_(s)
+#define _Inout_updates_bytes_all_opt_(s)
+#define _In_reads_to_ptr_opt_(p)
+#define _In_reads_to_ptr_opt_z_(p)
+#define _Out_writes_to_ptr_opt_(p)
+#define _Out_writes_to_ptr_opt_z_(p)
+
+/* Output pointer parameters */
+#define _Outptr_
+#define _Outptr_opt_
+#define _Outptr_result_maybenull_
+#define _Outptr_opt_result_maybenull_
+#define _Outptr_result_z_
+#define _Outptr_opt_result_z_
+#define _Outptr_result_maybenull_z_
+#define _Outptr_opt_result_maybenull_z_
+#define _COM_Outptr_
+#define _COM_Outptr_opt_
+#define _COM_Outptr_result_maybenull_
+#define _COM_Outptr_opt_result_maybenull_
+#define _Outptr_result_buffer_(s)
+#define _Outptr_result_bytebuffer_(s)
+#define _Outptr_opt_result_buffer_(s)
+#define _Outptr_opt_result_bytebuffer_(s)
+#define _Outptr_result_buffer_to_(s, c)
+#define _Outptr_result_bytebuffer_to_(s, c)
+#define _Outptr_result_bytebuffer_maybenull_(s)
+#define _Outptr_opt_result_buffer_to_(s, c)
+#define _Outptr_opt_result_bytebuffer_to_(s, c)
+#define _Result_nullonfailure_
+#define _Result_zeroonfailure_
+#define _Outptr_result_nullonfailure_
+#define _Outptr_opt_result_nullonfailure_
+#define _Outref_result_nullonfailure_
+
+/* Output reference parameters */
+#define _Outref_
+#define _Outref_result_maybenull_
+#define _Outref_result_buffer_(s)
+#define _Outref_result_bytebuffer_(s)
+#define _Outref_result_buffer_to_(s, c)
+#define _Outref_result_bytebuffer_to_(s, c)
+#define _Outref_result_buffer_all_(s)
+#define _Outref_result_bytebuffer_all_(s)
+#define _Outref_result_buffer_maybenull_(s)
+#define _Outref_result_bytebuffer_maybenull_(s)
+#define _Outref_result_buffer_to_maybenull_(s, c)
+#define _Outref_result_bytebuffer_to_maybenull_(s, c)
+#define _Outref_result_buffer_all_maybenull_(s)
+#define _Outref_result_bytebuffer_all_maybenull_(s)
+
+/* Return values */
+#define _Ret_z_
+#define _Ret_writes_(s)
+#define _Ret_writes_bytes_(s)
+#define _Ret_writes_z_(s)
+#define _Ret_writes_bytes_to_(s, c)
+#define _Ret_writes_maybenull_(s)
+#define _Ret_writes_to_maybenull_(s, c)
+#define _Ret_writes_maybenull_z_(s)
+#define _Ret_maybenull_
+#define _Ret_maybenull_z_
+#define _Ret_null_
+#define _Ret_notnull_
+#define _Ret_writes_bytes_to_(s, c)
+#define _Ret_writes_bytes_maybenull_(s)
+#define _Ret_writes_bytes_to_maybenull_(s, c)
+
+/* Other common annotations */
+#define _In_range_(low, hi)
+#define _Out_range_(low, hi)
+#define _Ret_range_(low, hi)
+#define _Deref_in_range_(low, hi)
+#define _Deref_out_range_(low, hi)
+#define _Deref_inout_range_(low, hi)
+#define _Pre_equal_to_(expr)
+#define _Post_equal_to_(expr)
 #define _Struct_size_bytes_(size)
 
+/* Function annotations */
+#define _Called_from_function_class_(name)
+#define _Check_return_ __checkReturn
+#define _Function_class_(name)
+#define _Raises_SEH_exception_
+#define _Maybe_raises_SEH_exception_
+#define _Must_inspect_result_
+#define _Use_decl_annotations_
+
+/* Success/failure annotations */
+#define _Always_(anno_list)
+#define _On_failure_(anno_list)
+#define _Return_type_success_(expr)
+#define _Success_(expr)
+
+#define _Reserved_
+#define _Const_
+
+/* Buffer properties */
+#define _Readable_bytes_(s)
+#define _Readable_elements_(s)
+#define _Writable_bytes_(s)
+#define _Writable_elements_(s)
+#define _Null_terminated_
+#define _NullNull_terminated_
+#define _Pre_readable_size_(s)
+#define _Pre_writable_size_(s)
+#define _Pre_readable_byte_size_(s)
+#define _Pre_writable_byte_size_(s)
+#define _Post_readable_size_(s)
+#define _Post_writable_size_(s)
+#define _Post_readable_byte_size_(s)
+#define _Post_writable_byte_size_(s)
+
+/* Field properties */
+#define _Field_size_(s)
+#define _Field_size_full_(s)
+#define _Field_size_full_opt_(s)
+#define _Field_size_opt_(s)
+#define _Field_size_part_(s, c)
+#define _Field_size_part_opt_(s, c)
+#define _Field_size_bytes_(size)
+#define _Field_size_bytes_full_(size)
+#define _Field_size_bytes_full_opt_(s)
+#define _Field_size_bytes_opt_(s)
+#define _Field_size_bytes_part_(s, c)
+#define _Field_size_bytes_part_opt_(s, c)
+#define _Field_z_
+#define _Field_range_(min, max)
+
+/* Structural annotations */
+#define _At_(e, a)
+#define _At_buffer_(e, i, c, a)
+#define _Group_(a)
+#define _When_(e, a)
+
+/* Analysis */
+#define _Analysis_assume_(expr)
+#define _Analysis_assume_nullterminated_(expr)
+
 #endif
 
diff --git a/x86_64-w64-mingw32/include/sapi.h b/x86_64-w64-mingw32/include/sapi.h
index 56edb84..865035e 100644
--- a/x86_64-w64-mingw32/include/sapi.h
+++ b/x86_64-w64-mingw32/include/sapi.h
@@ -40,7 +40,7 @@
 #define SPCAT_RECOPROFILES L"HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Speech\\RecoProfiles"
 
 #define SPMMSYS_AUDIO_IN_TOKEN_ID L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\AudioInput\\TokenEnums\\MMAudioIn\\"
-#define SPMMSYS_AUDIO_OUT_TOKEN_ID L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\AudioOutput\\TokenEnums\\MMAudioOut\\\"
+#define SPMMSYS_AUDIO_OUT_TOKEN_ID L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\AudioOutput\\TokenEnums\\MMAudioOut\\"
 #define SPCURRENT_USER_LEXICON_TOKEN_ID L"HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Speech\\CurrentUserLexicon"
 
 #define SPTOKENVALUE_CLSID L"CLSID"
diff --git a/x86_64-w64-mingw32/include/sapi51.h b/x86_64-w64-mingw32/include/sapi51.h
index e55c2f5..e3ffbff 100644
--- a/x86_64-w64-mingw32/include/sapi51.h
+++ b/x86_64-w64-mingw32/include/sapi51.h
@@ -10115,7 +10115,7 @@
         ISpeechObjectTokenCategory **Category) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetDescription(
-        LONG Locale = 0,
+        LONG Locale,
         BSTR *Description) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE SetId(
@@ -10128,8 +10128,8 @@
         BSTR *AttributeValue) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE CreateInstance(
-        IUnknown *pUnkOuter = 0,
-        SpeechTokenContext ClsContext = STCAll,
+        IUnknown *pUnkOuter,
+        SpeechTokenContext ClsContext,
         IUnknown **Object) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Remove(
@@ -10149,8 +10149,8 @@
 
     virtual HRESULT STDMETHODCALLTYPE IsUISupported(
         const BSTR TypeOfUI,
-        const VARIANT *ExtraData = 0,
-        IUnknown *Object = 0,
+        const VARIANT *ExtraData,
+        IUnknown *Object,
         VARIANT_BOOL *Supported) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE DisplayUI(
@@ -10712,12 +10712,12 @@
         VARIANT_BOOL CreateIfNotExist = 0) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetDataKey(
-        SpeechDataKeyLocation Location = SDKLDefaultLocation,
+        SpeechDataKeyLocation Location,
         ISpeechDataKey **DataKey) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE EnumerateTokens(
-        BSTR RequiredAttributes = L"",
-        BSTR OptionalAttributes = L"",
+        BSTR RequiredAttributes,
+        BSTR OptionalAttributes,
         ISpeechObjectTokens **Tokens) = 0;
 
 };
@@ -11401,7 +11401,7 @@
 
     virtual HRESULT STDMETHODCALLTYPE Seek(
         VARIANT Position,
-        SpeechStreamSeekPositionType Origin = SSSPTRelativeToStart,
+        SpeechStreamSeekPositionType Origin,
         VARIANT *NewPosition) = 0;
 
 };
@@ -13750,12 +13750,12 @@
 
     virtual HRESULT STDMETHODCALLTYPE Speak(
         BSTR Text,
-        SpeechVoiceSpeakFlags Flags = SPF_DEFAULT,
+        SpeechVoiceSpeakFlags Flags,
         LONG *StreamNumber) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE SpeakStream(
         ISpeechBaseStream *Stream,
-        SpeechVoiceSpeakFlags Flags = SPF_DEFAULT,
+        SpeechVoiceSpeakFlags Flags,
         LONG *StreamNumber) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Pause(
@@ -13770,13 +13770,13 @@
         LONG *NumSkipped) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetVoices(
-        BSTR RequiredAttributes = L"",
-        BSTR OptionalAttributes = L"",
+        BSTR RequiredAttributes,
+        BSTR OptionalAttributes,
         ISpeechObjectTokens **ObjectTokens) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetAudioOutputs(
-        BSTR RequiredAttributes = L"",
-        BSTR OptionalAttributes = L"",
+        BSTR RequiredAttributes,
+        BSTR OptionalAttributes,
         ISpeechObjectTokens **ObjectTokens) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE WaitUntilDone(
@@ -13788,7 +13788,7 @@
 
     virtual HRESULT STDMETHODCALLTYPE IsUISupported(
         const BSTR TypeOfUI,
-        const VARIANT *ExtraData = 0,
+        const VARIANT *ExtraData,
         VARIANT_BOOL *Supported) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE DisplayUI(
@@ -15445,7 +15445,7 @@
 
     virtual HRESULT STDMETHODCALLTYPE IsUISupported(
         const BSTR TypeOfUI,
-        const VARIANT *ExtraData = 0,
+        const VARIANT *ExtraData,
         VARIANT_BOOL *Supported) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE DisplayUI(
@@ -15455,18 +15455,18 @@
         const VARIANT *ExtraData = 0) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetRecognizers(
-        BSTR RequiredAttributes = L"",
-        BSTR OptionalAttributes = L"",
+        BSTR RequiredAttributes,
+        BSTR OptionalAttributes,
         ISpeechObjectTokens **ObjectTokens) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetAudioInputs(
-        BSTR RequiredAttributes = L"",
-        BSTR OptionalAttributes = L"",
+        BSTR RequiredAttributes,
+        BSTR OptionalAttributes,
         ISpeechObjectTokens **ObjectTokens) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetProfiles(
-        BSTR RequiredAttributes = L"",
-        BSTR OptionalAttributes = L"",
+        BSTR RequiredAttributes,
+        BSTR OptionalAttributes,
         ISpeechObjectTokens **ObjectTokens) = 0;
 
 };
@@ -16333,7 +16333,7 @@
         ) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE CreateGrammar(
-        VARIANT GrammarId = 0,
+        VARIANT GrammarId,
         ISpeechRecoGrammar **Grammar) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE CreateResultFromMemory(
@@ -17764,7 +17764,7 @@
     virtual HRESULT STDMETHODCALLTYPE Add(
         BSTR RuleName,
         SpeechRuleAttributes Attributes,
-        LONG RuleId = 0,
+        LONG RuleId,
         ISpeechGrammarRule **Rule) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Commit(
@@ -19004,19 +19004,19 @@
 
     virtual HRESULT STDMETHODCALLTYPE Alternates(
         LONG RequestCount,
-        LONG StartElement = 0,
-        LONG Elements = SPPR_ALL_ELEMENTS,
+        LONG StartElement,
+        LONG Elements,
         ISpeechPhraseAlternates **Alternates) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Audio(
-        LONG StartElement = 0,
-        LONG Elements = SPPR_ALL_ELEMENTS,
+        LONG StartElement,
+        LONG Elements,
         ISpeechMemoryStream **Stream) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE SpeakAudio(
-        LONG StartElement = 0,
-        LONG Elements = SPPR_ALL_ELEMENTS,
-        SpeechVoiceSpeakFlags Flags = SPF_DEFAULT,
+        LONG StartElement,
+        LONG Elements,
+        SpeechVoiceSpeakFlags Flags,
         LONG *StreamNumber) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE SaveToMemory(
@@ -20060,15 +20060,15 @@
         VARIANT *PhraseBlock) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetText(
-        LONG StartElement = 0,
-        LONG Elements = SPPR_ALL_ELEMENTS,
-        VARIANT_BOOL UseReplacements = -1,
+        LONG StartElement,
+        LONG Elements,
+        VARIANT_BOOL UseReplacements,
         BSTR *Text) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetDisplayAttributes(
-        LONG StartElement = 0,
-        LONG Elements = SPPR_ALL_ELEMENTS,
-        VARIANT_BOOL UseReplacements = -1,
+        LONG StartElement,
+        LONG Elements,
+        VARIANT_BOOL UseReplacements,
         SpeechDisplayAttributes *DisplayAttributes) = 0;
 
 };
@@ -22419,8 +22419,8 @@
         LONG *GenerationId) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetWords(
-        SpeechLexiconType Flags = eLEXTYPE_USER | eLEXTYPE_APP,
-        LONG *GenerationID = 0,
+        SpeechLexiconType Flags,
+        LONG *GenerationID,
         ISpeechLexiconWords **Words) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE AddPronunciation(
@@ -22449,8 +22449,8 @@
 
     virtual HRESULT STDMETHODCALLTYPE GetPronunciations(
         BSTR bstrWord,
-        SpeechLanguageId LangId = 0,
-        SpeechLexiconType TypeFlags = eLEXTYPE_USER | eLEXTYPE_APP,
+        SpeechLanguageId LangId,
+        SpeechLexiconType TypeFlags,
         ISpeechLexiconPronunciations **ppPronunciations) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetGenerationChange(
diff --git a/x86_64-w64-mingw32/include/sapi53.h b/x86_64-w64-mingw32/include/sapi53.h
index 5c6f1c2..1abbd5a 100644
--- a/x86_64-w64-mingw32/include/sapi53.h
+++ b/x86_64-w64-mingw32/include/sapi53.h
@@ -12968,7 +12968,7 @@
         ISpeechObjectTokenCategory **Category) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetDescription(
-        LONG Locale = 0,
+        LONG Locale,
         BSTR *Description) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE SetId(
@@ -12981,8 +12981,8 @@
         BSTR *AttributeValue) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE CreateInstance(
-        IUnknown *pUnkOuter = 0,
-        SpeechTokenContext ClsContext = STCAll,
+        IUnknown *pUnkOuter,
+        SpeechTokenContext ClsContext,
         IUnknown **Object) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Remove(
@@ -13002,8 +13002,8 @@
 
     virtual HRESULT STDMETHODCALLTYPE IsUISupported(
         const BSTR TypeOfUI,
-        const VARIANT *ExtraData = 0,
-        IUnknown *Object = 0,
+        const VARIANT *ExtraData,
+        IUnknown *Object,
         VARIANT_BOOL *Supported) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE DisplayUI(
@@ -13565,12 +13565,12 @@
         VARIANT_BOOL CreateIfNotExist = 0) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetDataKey(
-        SpeechDataKeyLocation Location = SDKLDefaultLocation,
+        SpeechDataKeyLocation Location,
         ISpeechDataKey **DataKey) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE EnumerateTokens(
-        BSTR RequiredAttributes = L"",
-        BSTR OptionalAttributes = L"",
+        BSTR RequiredAttributes,
+        BSTR OptionalAttributes,
         ISpeechObjectTokens **Tokens) = 0;
 
 };
@@ -14258,7 +14258,7 @@
 
     virtual HRESULT STDMETHODCALLTYPE Seek(
         VARIANT Position,
-        SpeechStreamSeekPositionType Origin = SSSPTRelativeToStart,
+        SpeechStreamSeekPositionType Origin,
         VARIANT *NewPosition) = 0;
 
 };
@@ -16607,12 +16607,12 @@
 
     virtual HRESULT STDMETHODCALLTYPE Speak(
         BSTR Text,
-        SpeechVoiceSpeakFlags Flags = SPF_DEFAULT,
+        SpeechVoiceSpeakFlags Flags,
         LONG *StreamNumber) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE SpeakStream(
         ISpeechBaseStream *Stream,
-        SpeechVoiceSpeakFlags Flags = SPF_DEFAULT,
+        SpeechVoiceSpeakFlags Flags,
         LONG *StreamNumber) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Pause(
@@ -16627,13 +16627,13 @@
         LONG *NumSkipped) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetVoices(
-        BSTR RequiredAttributes = L"",
-        BSTR OptionalAttributes = L"",
+        BSTR RequiredAttributes,
+        BSTR OptionalAttributes,
         ISpeechObjectTokens **ObjectTokens) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetAudioOutputs(
-        BSTR RequiredAttributes = L"",
-        BSTR OptionalAttributes = L"",
+        BSTR RequiredAttributes,
+        BSTR OptionalAttributes,
         ISpeechObjectTokens **ObjectTokens) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE WaitUntilDone(
@@ -16645,7 +16645,7 @@
 
     virtual HRESULT STDMETHODCALLTYPE IsUISupported(
         const BSTR TypeOfUI,
-        const VARIANT *ExtraData = 0,
+        const VARIANT *ExtraData,
         VARIANT_BOOL *Supported) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE DisplayUI(
@@ -18325,7 +18325,7 @@
 
     virtual HRESULT STDMETHODCALLTYPE IsUISupported(
         const BSTR TypeOfUI,
-        const VARIANT *ExtraData = 0,
+        const VARIANT *ExtraData,
         VARIANT_BOOL *Supported) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE DisplayUI(
@@ -18335,18 +18335,18 @@
         const VARIANT *ExtraData = 0) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetRecognizers(
-        BSTR RequiredAttributes = L"",
-        BSTR OptionalAttributes = L"",
+        BSTR RequiredAttributes,
+        BSTR OptionalAttributes,
         ISpeechObjectTokens **ObjectTokens) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetAudioInputs(
-        BSTR RequiredAttributes = L"",
-        BSTR OptionalAttributes = L"",
+        BSTR RequiredAttributes,
+        BSTR OptionalAttributes,
         ISpeechObjectTokens **ObjectTokens) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetProfiles(
-        BSTR RequiredAttributes = L"",
-        BSTR OptionalAttributes = L"",
+        BSTR RequiredAttributes,
+        BSTR OptionalAttributes,
         ISpeechObjectTokens **ObjectTokens) = 0;
 
 };
@@ -19213,7 +19213,7 @@
         ) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE CreateGrammar(
-        VARIANT GrammarId = 0,
+        VARIANT GrammarId,
         ISpeechRecoGrammar **Grammar) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE CreateResultFromMemory(
@@ -20644,7 +20644,7 @@
     virtual HRESULT STDMETHODCALLTYPE Add(
         BSTR RuleName,
         SpeechRuleAttributes Attributes,
-        LONG RuleId = 0,
+        LONG RuleId,
         ISpeechGrammarRule **Rule) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Commit(
@@ -21884,19 +21884,19 @@
 
     virtual HRESULT STDMETHODCALLTYPE Alternates(
         LONG RequestCount,
-        LONG StartElement = 0,
-        LONG Elements = SPPR_ALL_ELEMENTS,
+        LONG StartElement,
+        LONG Elements,
         ISpeechPhraseAlternates **Alternates) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Audio(
-        LONG StartElement = 0,
-        LONG Elements = SPPR_ALL_ELEMENTS,
+        LONG StartElement,
+        LONG Elements,
         ISpeechMemoryStream **Stream) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE SpeakAudio(
-        LONG StartElement = 0,
-        LONG Elements = SPPR_ALL_ELEMENTS,
-        SpeechVoiceSpeakFlags Flags = SPF_DEFAULT,
+        LONG StartElement,
+        LONG Elements,
+        SpeechVoiceSpeakFlags Flags,
         LONG *StreamNumber) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE SaveToMemory(
@@ -22697,19 +22697,19 @@
 
     virtual HRESULT STDMETHODCALLTYPE Alternates(
         LONG RequestCount,
-        LONG StartElement = 0,
-        LONG Elements = SPPR_ALL_ELEMENTS,
+        LONG StartElement,
+        LONG Elements,
         ISpeechPhraseAlternates **Alternates) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Audio(
-        LONG StartElement = 0,
-        LONG Elements = SPPR_ALL_ELEMENTS,
+        LONG StartElement,
+        LONG Elements,
         ISpeechMemoryStream **Stream) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE SpeakAudio(
-        LONG StartElement = 0,
-        LONG Elements = SPPR_ALL_ELEMENTS,
-        SpeechVoiceSpeakFlags Flags = SPF_DEFAULT,
+        LONG StartElement,
+        LONG Elements,
+        SpeechVoiceSpeakFlags Flags,
         LONG *StreamNumber) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE SaveToMemory(
@@ -23831,15 +23831,15 @@
         VARIANT *PhraseBlock) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetText(
-        LONG StartElement = 0,
-        LONG Elements = SPPR_ALL_ELEMENTS,
-        VARIANT_BOOL UseReplacements = -1,
+        LONG StartElement,
+        LONG Elements,
+        VARIANT_BOOL UseReplacements,
         BSTR *Text) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetDisplayAttributes(
-        LONG StartElement = 0,
-        LONG Elements = SPPR_ALL_ELEMENTS,
-        VARIANT_BOOL UseReplacements = -1,
+        LONG StartElement,
+        LONG Elements,
+        VARIANT_BOOL UseReplacements,
         SpeechDisplayAttributes *DisplayAttributes) = 0;
 
 };
@@ -26190,8 +26190,8 @@
         LONG *GenerationId) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetWords(
-        SpeechLexiconType Flags = eLEXTYPE_USER | eLEXTYPE_APP,
-        LONG *GenerationID = 0,
+        SpeechLexiconType Flags,
+        LONG *GenerationID,
         ISpeechLexiconWords **Words) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE AddPronunciation(
@@ -26220,8 +26220,8 @@
 
     virtual HRESULT STDMETHODCALLTYPE GetPronunciations(
         BSTR bstrWord,
-        SpeechLanguageId LangId = 0,
-        SpeechLexiconType TypeFlags = eLEXTYPE_USER | eLEXTYPE_APP,
+        SpeechLanguageId LangId,
+        SpeechLexiconType TypeFlags,
         ISpeechLexiconPronunciations **ppPronunciations) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetGenerationChange(
diff --git a/x86_64-w64-mingw32/include/sapi54.h b/x86_64-w64-mingw32/include/sapi54.h
index 75183b1..fa79ca6 100644
--- a/x86_64-w64-mingw32/include/sapi54.h
+++ b/x86_64-w64-mingw32/include/sapi54.h
@@ -13228,7 +13228,7 @@
         ISpeechObjectTokenCategory **Category) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetDescription(
-        LONG Locale = 0,
+        LONG Locale,
         BSTR *Description) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE SetId(
@@ -13241,8 +13241,8 @@
         BSTR *AttributeValue) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE CreateInstance(
-        IUnknown *pUnkOuter = 0,
-        SpeechTokenContext ClsContext = STCAll,
+        IUnknown *pUnkOuter,
+        SpeechTokenContext ClsContext,
         IUnknown **Object) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Remove(
@@ -13262,8 +13262,8 @@
 
     virtual HRESULT STDMETHODCALLTYPE IsUISupported(
         const BSTR TypeOfUI,
-        const VARIANT *ExtraData = 0,
-        IUnknown *Object = 0,
+        const VARIANT *ExtraData,
+        IUnknown *Object,
         VARIANT_BOOL *Supported) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE DisplayUI(
@@ -13825,12 +13825,12 @@
         VARIANT_BOOL CreateIfNotExist = 0) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetDataKey(
-        SpeechDataKeyLocation Location = SDKLDefaultLocation,
+        SpeechDataKeyLocation Location,
         ISpeechDataKey **DataKey) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE EnumerateTokens(
-        BSTR RequiredAttributes = L"",
-        BSTR OptionalAttributes = L"",
+        BSTR RequiredAttributes,
+        BSTR OptionalAttributes,
         ISpeechObjectTokens **Tokens) = 0;
 
 };
@@ -14518,7 +14518,7 @@
 
     virtual HRESULT STDMETHODCALLTYPE Seek(
         VARIANT Position,
-        SpeechStreamSeekPositionType Origin = SSSPTRelativeToStart,
+        SpeechStreamSeekPositionType Origin,
         VARIANT *NewPosition) = 0;
 
 };
@@ -16867,12 +16867,12 @@
 
     virtual HRESULT STDMETHODCALLTYPE Speak(
         BSTR Text,
-        SpeechVoiceSpeakFlags Flags = SPF_DEFAULT,
+        SpeechVoiceSpeakFlags Flags,
         LONG *StreamNumber) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE SpeakStream(
         ISpeechBaseStream *Stream,
-        SpeechVoiceSpeakFlags Flags = SPF_DEFAULT,
+        SpeechVoiceSpeakFlags Flags,
         LONG *StreamNumber) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Pause(
@@ -16887,13 +16887,13 @@
         LONG *NumSkipped) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetVoices(
-        BSTR RequiredAttributes = L"",
-        BSTR OptionalAttributes = L"",
+        BSTR RequiredAttributes,
+        BSTR OptionalAttributes,
         ISpeechObjectTokens **ObjectTokens) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetAudioOutputs(
-        BSTR RequiredAttributes = L"",
-        BSTR OptionalAttributes = L"",
+        BSTR RequiredAttributes,
+        BSTR OptionalAttributes,
         ISpeechObjectTokens **ObjectTokens) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE WaitUntilDone(
@@ -16905,7 +16905,7 @@
 
     virtual HRESULT STDMETHODCALLTYPE IsUISupported(
         const BSTR TypeOfUI,
-        const VARIANT *ExtraData = 0,
+        const VARIANT *ExtraData,
         VARIANT_BOOL *Supported) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE DisplayUI(
@@ -18585,7 +18585,7 @@
 
     virtual HRESULT STDMETHODCALLTYPE IsUISupported(
         const BSTR TypeOfUI,
-        const VARIANT *ExtraData = 0,
+        const VARIANT *ExtraData,
         VARIANT_BOOL *Supported) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE DisplayUI(
@@ -18595,18 +18595,18 @@
         const VARIANT *ExtraData = 0) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetRecognizers(
-        BSTR RequiredAttributes = L"",
-        BSTR OptionalAttributes = L"",
+        BSTR RequiredAttributes,
+        BSTR OptionalAttributes,
         ISpeechObjectTokens **ObjectTokens) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetAudioInputs(
-        BSTR RequiredAttributes = L"",
-        BSTR OptionalAttributes = L"",
+        BSTR RequiredAttributes,
+        BSTR OptionalAttributes,
         ISpeechObjectTokens **ObjectTokens) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetProfiles(
-        BSTR RequiredAttributes = L"",
-        BSTR OptionalAttributes = L"",
+        BSTR RequiredAttributes,
+        BSTR OptionalAttributes,
         ISpeechObjectTokens **ObjectTokens) = 0;
 
 };
@@ -19473,7 +19473,7 @@
         ) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE CreateGrammar(
-        VARIANT GrammarId = 0,
+        VARIANT GrammarId,
         ISpeechRecoGrammar **Grammar) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE CreateResultFromMemory(
@@ -20904,7 +20904,7 @@
     virtual HRESULT STDMETHODCALLTYPE Add(
         BSTR RuleName,
         SpeechRuleAttributes Attributes,
-        LONG RuleId = 0,
+        LONG RuleId,
         ISpeechGrammarRule **Rule) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Commit(
@@ -22144,19 +22144,19 @@
 
     virtual HRESULT STDMETHODCALLTYPE Alternates(
         LONG RequestCount,
-        LONG StartElement = 0,
-        LONG Elements = SPPR_ALL_ELEMENTS,
+        LONG StartElement,
+        LONG Elements,
         ISpeechPhraseAlternates **Alternates) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Audio(
-        LONG StartElement = 0,
-        LONG Elements = SPPR_ALL_ELEMENTS,
+        LONG StartElement,
+        LONG Elements,
         ISpeechMemoryStream **Stream) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE SpeakAudio(
-        LONG StartElement = 0,
-        LONG Elements = SPPR_ALL_ELEMENTS,
-        SpeechVoiceSpeakFlags Flags = SPF_DEFAULT,
+        LONG StartElement,
+        LONG Elements,
+        SpeechVoiceSpeakFlags Flags,
         LONG *StreamNumber) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE SaveToMemory(
@@ -22957,19 +22957,19 @@
 
     virtual HRESULT STDMETHODCALLTYPE Alternates(
         LONG RequestCount,
-        LONG StartElement = 0,
-        LONG Elements = SPPR_ALL_ELEMENTS,
+        LONG StartElement,
+        LONG Elements,
         ISpeechPhraseAlternates **Alternates) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Audio(
-        LONG StartElement = 0,
-        LONG Elements = SPPR_ALL_ELEMENTS,
+        LONG StartElement,
+        LONG Elements,
         ISpeechMemoryStream **Stream) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE SpeakAudio(
-        LONG StartElement = 0,
-        LONG Elements = SPPR_ALL_ELEMENTS,
-        SpeechVoiceSpeakFlags Flags = SPF_DEFAULT,
+        LONG StartElement,
+        LONG Elements,
+        SpeechVoiceSpeakFlags Flags,
         LONG *StreamNumber) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE SaveToMemory(
@@ -24091,15 +24091,15 @@
         VARIANT *PhraseBlock) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetText(
-        LONG StartElement = 0,
-        LONG Elements = SPPR_ALL_ELEMENTS,
-        VARIANT_BOOL UseReplacements = -1,
+        LONG StartElement,
+        LONG Elements,
+        VARIANT_BOOL UseReplacements,
         BSTR *Text) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetDisplayAttributes(
-        LONG StartElement = 0,
-        LONG Elements = SPPR_ALL_ELEMENTS,
-        VARIANT_BOOL UseReplacements = -1,
+        LONG StartElement,
+        LONG Elements,
+        VARIANT_BOOL UseReplacements,
         SpeechDisplayAttributes *DisplayAttributes) = 0;
 
 };
@@ -26450,8 +26450,8 @@
         LONG *GenerationId) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetWords(
-        SpeechLexiconType Flags = eLEXTYPE_USER | eLEXTYPE_APP,
-        LONG *GenerationID = 0,
+        SpeechLexiconType Flags,
+        LONG *GenerationID,
         ISpeechLexiconWords **Words) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE AddPronunciation(
@@ -26480,8 +26480,8 @@
 
     virtual HRESULT STDMETHODCALLTYPE GetPronunciations(
         BSTR bstrWord,
-        SpeechLanguageId LangId = 0,
-        SpeechLexiconType TypeFlags = eLEXTYPE_USER | eLEXTYPE_APP,
+        SpeechLanguageId LangId,
+        SpeechLexiconType TypeFlags,
         ISpeechLexiconPronunciations **ppPronunciations) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetGenerationChange(
diff --git a/x86_64-w64-mingw32/include/sdkddkver.h b/x86_64-w64-mingw32/include/sdkddkver.h
index 0433811..1b965ae 100644
--- a/x86_64-w64-mingw32/include/sdkddkver.h
+++ b/x86_64-w64-mingw32/include/sdkddkver.h
@@ -21,6 +21,7 @@
 #define _WIN32_WINNT_LONGHORN		0x0600
 #define _WIN32_WINNT_WIN7		0x0601
 #define _WIN32_WINNT_WIN8		0x0602
+#define _WIN32_WINNT_WINBLUE            0x0603
 
 /* _WIN32_IE */
 #define _WIN32_IE_IE20			0x0200
@@ -64,6 +65,7 @@
 #define _WIN32_IE_LONGHORN		_WIN32_IE_IE70
 #define _WIN32_IE_WIN7			_WIN32_IE_IE80
 #define _WIN32_IE_WIN8                  _WIN32_IE_IE100
+#define _WIN32_IE_WINBLUE               _WIN32_IE_IE100
 
 /* NTDDI_VERSION */
 #ifndef NTDDI_WIN2K
@@ -124,6 +126,7 @@
 
 #define NTDDI_WIN7			0x06010000
 #define NTDDI_WIN8                      0x06020000
+#define NTDDI_WINBLUE                   0x06030000
 
 /* Version Fields in NTDDI_VERSION */
 #define OSVERSION_MASK			0xFFFF0000U
diff --git a/x86_64-w64-mingw32/include/sec_api/conio_s.h b/x86_64-w64-mingw32/include/sec_api/conio_s.h
index 996d53a..95703eb 100644
--- a/x86_64-w64-mingw32/include/sec_api/conio_s.h
+++ b/x86_64-w64-mingw32/include/sec_api/conio_s.h
@@ -25,8 +25,8 @@
   _CRTIMP int __cdecl _cprintf_s_l (const char *_Format,_locale_t _Locale,...);
   _CRTIMP int __cdecl _vcprintf_s_l (const char *_Format,_locale_t _Locale,va_list _ArgList);
 
-#ifndef _WCONIO_DEFINED_S
-#define _WCONIO_DEFINED_S
+#ifndef _WCONIO_S_DEFINED
+#define _WCONIO_S_DEFINED
   _CRTIMP errno_t __cdecl _cgetws_s (wchar_t *_Buffer,size_t _SizeInWords,size_t *_SizeRead);
   __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1(errno_t, _cgetws_s, wchar_t, _Buffer, size_t*, _SizeRead)
 
diff --git a/x86_64-w64-mingw32/include/sec_api/stdio_s.h b/x86_64-w64-mingw32/include/sec_api/stdio_s.h
index 8da6ddf..aa51af7 100644
--- a/x86_64-w64-mingw32/include/sec_api/stdio_s.h
+++ b/x86_64-w64-mingw32/include/sec_api/stdio_s.h
@@ -29,6 +29,7 @@
   _CRTIMP int __cdecl _fscanf_l(FILE *_File,const char *_Format,_locale_t _Locale,...);
   _CRTIMP int __cdecl _sscanf_l(const char *_Src,const char *_Format,_locale_t _Locale,...);
   _CRTIMP int __cdecl _sscanf_s_l(const char *_Src,const char *_Format,_locale_t _Locale,...);
+  _CRTIMP int __cdecl sscanf_s(const char *_Src,const char *_Format,...);
   _CRTIMP int __cdecl _snscanf_s(const char *_Src,size_t _MaxCount,const char *_Format,...);
   _CRTIMP int __cdecl _snscanf_l(const char *_Src,size_t _MaxCount,const char *_Format,_locale_t _Locale,...);
   _CRTIMP int __cdecl _snscanf_s_l(const char *_Src,size_t _MaxCount,const char *_Format,_locale_t _Locale,...);
@@ -87,6 +88,7 @@
   _CRTIMP int __cdecl _vsnprintf_l(char *_DstBuf,size_t _MaxCount,const char *_Format,_locale_t _Locale,va_list _ArgList);
   _CRTIMP int __cdecl _vsnprintf_c_l(char *_DstBuf,size_t _MaxCount,const char *,_locale_t _Locale,va_list _ArgList);
   _CRTIMP errno_t __cdecl fopen_s(FILE **_File,const char *_Filename,const char *_Mode);
+  _CRTIMP errno_t __cdecl freopen_s(FILE** _File, const char *_Filename, const char *_Mode, FILE *_Stream);
 
   _CRTIMP char* __cdecl gets_s(char*,rsize_t);
   __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0(char*,get_s,char,_DstBuf)
@@ -115,7 +117,7 @@
   __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3(int,_vsnwprintf_s,wchar_t,_DstBuf,size_t,_MaxCount,const wchar_t*,_Format,va_list,_ArgList)
 
   _CRTIMP int __cdecl _snwprintf_s(wchar_t *_DstBuf,size_t _DstSizeInWords,size_t _MaxCount,const wchar_t *_Format,...);
-  __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2_ARGLIST(int,_snwprintf_s,_vsnwprintf_s,wchar_t,_DstBuf,size_t,_MaxCount,const char*,_Format)
+  __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2_ARGLIST(int,_snwprintf_s,_vsnwprintf_s,wchar_t,_DstBuf,size_t,_MaxCount,const wchar_t*,_Format)
 
 
   _CRTIMP int __cdecl _wprintf_s_l(const wchar_t *_Format,_locale_t _Locale,...);
@@ -128,6 +130,7 @@
   _CRTIMP int __cdecl _vsnwprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
   _CRTIMP int __cdecl _fwscanf_s_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
   _CRTIMP int __cdecl _swscanf_s_l(const wchar_t *_Src,const wchar_t *_Format,_locale_t _Locale,...);
+  _CRTIMP int __cdecl swscanf_s(const wchar_t *_Src,const wchar_t *_Format,...);
   _CRTIMP int __cdecl _snwscanf_s(const wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,...);
   _CRTIMP int __cdecl _snwscanf_s_l(const wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
   _CRTIMP int __cdecl _wscanf_s_l(const wchar_t *_Format,_locale_t _Locale,...);
diff --git a/x86_64-w64-mingw32/include/sec_api/string_s.h b/x86_64-w64-mingw32/include/sec_api/string_s.h
index 1eac92e..7d36d91 100644
--- a/x86_64-w64-mingw32/include/sec_api/string_s.h
+++ b/x86_64-w64-mingw32/include/sec_api/string_s.h
@@ -65,11 +65,6 @@
   }
 #endif
 
-#ifndef _MEMORY_S_DEFINED
-#define _MEMORY_S_DEFINED
-  _CRTIMP errno_t __cdecl memcpy_s (void *_dest,size_t _numberOfElements,const void *_src,size_t _count);
-#endif /*_MEMORY_S_DEFINED*/
-
 #ifdef __cplusplus
 }
 #endif
diff --git a/x86_64-w64-mingw32/include/sec_api/wchar_s.h b/x86_64-w64-mingw32/include/sec_api/wchar_s.h
index 42dd4ae..fe09632 100644
--- a/x86_64-w64-mingw32/include/sec_api/wchar_s.h
+++ b/x86_64-w64-mingw32/include/sec_api/wchar_s.h
@@ -49,7 +49,7 @@
   __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3(int,_vsnwprintf_s,wchar_t,_DstBuf,size_t,_MaxCount,const wchar_t*,_Format,va_list,_ArgList)
 
   _CRTIMP int __cdecl _snwprintf_s(wchar_t *_DstBuf,size_t _DstSizeInWords,size_t _MaxCount,const wchar_t *_Format,...);
-  __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2_ARGLIST(int,_snwprintf_s,_vsnwprintf_s,wchar_t,_DstBuf,size_t,_MaxCount,const char*,_Format)
+  __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2_ARGLIST(int,_snwprintf_s,_vsnwprintf_s,wchar_t,_DstBuf,size_t,_MaxCount,const wchar_t*,_Format)
 
   _CRTIMP int __cdecl _wprintf_s_l(const wchar_t *_Format,_locale_t _Locale,...);
   _CRTIMP int __cdecl _vwprintf_s_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
@@ -61,6 +61,7 @@
   _CRTIMP int __cdecl _vsnwprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
   _CRTIMP int __cdecl _fwscanf_s_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
   _CRTIMP int __cdecl _swscanf_s_l(const wchar_t *_Src,const wchar_t *_Format,_locale_t _Locale,...);
+  _CRTIMP int __cdecl swscanf_s(const wchar_t *_Src,const wchar_t *_Format,...);
   _CRTIMP int __cdecl _snwscanf_s(const wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,...);
   _CRTIMP int __cdecl _snwscanf_s_l(const wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
   _CRTIMP int __cdecl _wscanf_s_l(const wchar_t *_Format,_locale_t _Locale,...);
diff --git a/x86_64-w64-mingw32/include/shobjidl.h b/x86_64-w64-mingw32/include/shobjidl.h
index b6f19e7..b0ea2e9 100644
--- a/x86_64-w64-mingw32/include/shobjidl.h
+++ b/x86_64-w64-mingw32/include/shobjidl.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 1.6 from /usr/local/google/buildbot/src/android/mingw/toolchain/mingw/mingw-w64-v4.0.4/mingw-w64-headers/include/shobjidl.idl - Do not edit ***/
+/*** Autogenerated by WIDL 1.6 from include/shobjidl.idl - Do not edit ***/
 
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
 #define __REQUIRED_RPCNDR_H_VERSION__ 475
diff --git a/x86_64-w64-mingw32/include/specstrings.h b/x86_64-w64-mingw32/include/specstrings.h
index ed0275f..485b433 100644
--- a/x86_64-w64-mingw32/include/specstrings.h
+++ b/x86_64-w64-mingw32/include/specstrings.h
@@ -279,6 +279,8 @@
 #define SAL__control_entrypoint(category)
 #define SAL__data_entrypoint(category)
 
+#define __encoded_pointer
+
 #ifndef __fallthrough
 #define __fallthrough
 #endif
diff --git a/x86_64-w64-mingw32/include/sperror.h b/x86_64-w64-mingw32/include/sperror.h
new file mode 100644
index 0000000..6376a60
--- /dev/null
+++ b/x86_64-w64-mingw32/include/sperror.h
@@ -0,0 +1,26 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef SPError_h
+#define SPError_h
+
+#include <winapifamily.h>
+
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+
+#include <winerror.h>
+
+#define FACILITY_SAPI FACILITY_ITF
+#define SAPI_ERROR_BASE 0x5000
+
+#define MAKE_SAPI_HRESULT(sev, err) MAKE_HRESULT(sev, FACILITY_SAPI, err)
+#define MAKE_SAPI_ERROR(err)        MAKE_SAPI_HRESULT(SEVERITY_ERROR, err+SAPI_ERROR_BASE)
+#define MAKE_SAPI_SCODE(scode)      MAKE_SAPI_HRESULT(SEVERITY_SUCCESS, scode+SAPI_ERROR_BASE)
+
+#define SPERR_NOT_FOUND MAKE_SAPI_ERROR(0x003a)
+
+#endif
+#endif
diff --git a/x86_64-w64-mingw32/include/sphelper.h b/x86_64-w64-mingw32/include/sphelper.h
new file mode 100644
index 0000000..83248d9
--- /dev/null
+++ b/x86_64-w64-mingw32/include/sphelper.h
@@ -0,0 +1,78 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef SPHelper_h
+#define SPHelper_h
+
+#include <winapifamily.h>
+
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+
+#include <malloc.h>
+#include <sapi.h>
+/* #include <sapiddk.h> */
+#include <sperror.h>
+#include <limits.h>
+#include <mmsystem.h>
+#include <comcat.h>
+#include <mmreg.h>
+/* #include <atlbase.h> */
+#include <wchar.h>
+#include <tchar.h>
+#include <strsafe.h>
+#include <intsafe.h>
+
+inline HRESULT SpGetCategoryFromId(const WCHAR *category_id, ISpObjectTokenCategory **ret, BOOL fCreateIfNotExist = FALSE) {
+    ISpObjectTokenCategory *obj_token_cat;
+    HRESULT hres;
+
+    hres = ::CoCreateInstance(CLSID_SpObjectTokenCategory, NULL, CLSCTX_ALL, __uuidof(ISpObjectTokenCategory),
+            (void**)&obj_token_cat);
+    if(FAILED(hres))
+        return hres;
+
+    hres = obj_token_cat->SetId(category_id, fCreateIfNotExist);
+    if(FAILED(hres)) {
+        obj_token_cat->Release();
+        return hres;
+    }
+
+    *ret = obj_token_cat;
+    return S_OK;
+}
+
+inline HRESULT SpEnumTokens(const WCHAR *category_id, const WCHAR *req_attrs, const WCHAR *opt_attrs, IEnumSpObjectTokens **ret) {
+    ISpObjectTokenCategory *category;
+    HRESULT hres;
+
+    hres = SpGetCategoryFromId(category_id, &category);
+    if(SUCCEEDED(hres)) {
+        hres = category->EnumTokens(req_attrs, opt_attrs, ret);
+        category->Release();
+    }
+
+    return hres;
+}
+
+/* str must be at least 9 chars (8 for 32-bit integer in hex + one for '\0').  */
+inline void SpHexFromUlong(WCHAR *str, ULONG ul) {
+    ::_ultow(ul, str, 16);
+}
+
+inline HRESULT SpGetDescription(ISpObjectToken *obj_token, WCHAR **description, LANGID language = GetUserDefaultUILanguage()) {
+    WCHAR lang_id[9];
+    HRESULT hres;
+
+    SpHexFromUlong(lang_id, language);
+    hres = obj_token->GetStringValue(lang_id, description);
+    if(hres == SPERR_NOT_FOUND)
+        hres = obj_token->GetStringValue(NULL, description);
+
+    return hres;
+}
+
+#endif
+#endif
diff --git a/x86_64-w64-mingw32/include/stdio.h b/x86_64-w64-mingw32/include/stdio.h
index 3b49ddd..9f1cfff 100644
--- a/x86_64-w64-mingw32/include/stdio.h
+++ b/x86_64-w64-mingw32/include/stdio.h
@@ -374,41 +374,53 @@
 /*
  * Default configuration: simply direct all calls to MSVCRT...
  */
+  __attribute__((__format__ (ms_printf, 2, 3))) __MINGW_ATTRIB_NONNULL(2)
   int __cdecl fprintf(FILE * __restrict__ _File,const char * __restrict__ _Format,...);
+  __attribute__((__format__ (ms_printf, 1, 2))) __MINGW_ATTRIB_NONNULL(1)
   int __cdecl printf(const char * __restrict__ _Format,...);
+  __attribute__((__format__ (ms_printf, 2, 3))) __MINGW_ATTRIB_NONNULL(2)
   int __cdecl sprintf(char * __restrict__ _Dest,const char * __restrict__ _Format,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
 
+  __attribute__((__format__ (ms_printf, 2, 0))) __MINGW_ATTRIB_NONNULL(2)
   int __cdecl vfprintf(FILE * __restrict__ _File,const char * __restrict__ _Format,va_list _ArgList);
+  __attribute__((__format__ (ms_printf, 1, 0))) __MINGW_ATTRIB_NONNULL(1)
   int __cdecl vprintf(const char * __restrict__ _Format,va_list _ArgList);
+  __attribute__((__format__ (ms_printf, 2, 0))) __MINGW_ATTRIB_NONNULL(2)
   int __cdecl vsprintf(char * __restrict__ _Dest,const char * __restrict__ _Format,va_list _Args) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
 
+  __attribute__((__format__ (ms_scanf, 2, 3))) __MINGW_ATTRIB_NONNULL(2)
   int __cdecl fscanf(FILE * __restrict__ _File,const char * __restrict__ _Format,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
+  __attribute__((__format__ (ms_scanf, 1, 2))) __MINGW_ATTRIB_NONNULL(1)
   int __cdecl scanf(const char * __restrict__ _Format,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
+  __attribute__((__format__ (ms_scanf, 2, 3))) __MINGW_ATTRIB_NONNULL(2)
   int __cdecl sscanf(const char * __restrict__ _Src,const char * __restrict__ _Format,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
 #ifdef _GNU_SOURCE
   int __cdecl vasprintf(char ** __restrict__ ret,const char * __restrict__ format,va_list ap)  __attribute__ ((format (__MINGW_PRINTF_FORMAT, 2, 0)));;
   int __cdecl asprintf(char ** __restrict__ ret,const char * __restrict__ format,...) __attribute__ ((format (__MINGW_PRINTF_FORMAT, 2, 3)));
 #endif /*_GNU_SOURCE*/
 #ifndef __NO_ISOCEXT  /* externs in libmingwex.a */
+  __attribute__((__format__ (ms_scanf, 1, 0))) __MINGW_ATTRIB_NONNULL(1)
   int __cdecl __ms_vscanf(const char * __restrict__ Format, va_list argp);
+  __attribute__((__format__ (ms_scanf, 2, 0))) __MINGW_ATTRIB_NONNULL(2)
   int __cdecl __ms_vfscanf (FILE * __restrict__ fp, const char * __restrict__ Format,va_list argp);
+  __attribute__((__format__ (ms_scanf, 2, 0))) __MINGW_ATTRIB_NONNULL(2)
   int __cdecl __ms_vsscanf (const char * __restrict__ _Str,const char * __restrict__ Format,va_list argp);
 
   __mingw_ovr
-  __MINGW_ATTRIB_NONNULL(2)
+  __attribute__((__format__ (ms_scanf, 2, 0))) __MINGW_ATTRIB_NONNULL(2)
   int vfscanf (FILE *__stream,  const char *__format, __builtin_va_list __local_argv)
   {
     return __ms_vfscanf (__stream, __format, __local_argv);
   }
 
   __mingw_ovr
-  __MINGW_ATTRIB_NONNULL(2)
+  __attribute__((__format__ (ms_scanf, 2, 0))) __MINGW_ATTRIB_NONNULL(2)
   int vsscanf (const char * __restrict__ __source, const char * __restrict__ __format, __builtin_va_list __local_argv)
   {
     return __ms_vsscanf( __source, __format, __local_argv );
   }
   __mingw_ovr
-  __MINGW_ATTRIB_NONNULL(1)
+  __attribute__((__format__ (ms_scanf, 1, 0))) __MINGW_ATTRIB_NONNULL(1)
   int vscanf(const char *__format,  __builtin_va_list __local_argv)
   {
     return __ms_vscanf (__format, __local_argv);
@@ -525,7 +537,9 @@
   char *__cdecl tmpnam(char *_Buffer);
   int __cdecl ungetc(int _Ch,FILE *_File);
 
+  __attribute__((__format__ (ms_printf, 3, 4))) __MINGW_ATTRIB_NONNULL(3)
   _CRTIMP int __cdecl _snprintf(char * __restrict__ _Dest,size_t _Count,const char * __restrict__ _Format,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
+  __attribute__((__format__ (ms_printf, 3, 0))) __MINGW_ATTRIB_NONNULL(3)
   _CRTIMP int __cdecl _vsnprintf(char * __restrict__ _Dest,size_t _Count,const char * __restrict__ _Format,va_list _Args) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
 
 #if !defined (__USE_MINGW_ANSI_STDIO) || __USE_MINGW_ANSI_STDIO == 0
@@ -535,21 +549,23 @@
 #pragma push_macro("vsnprintf")
 # undef snprintf
 # undef vsnprintf
+  __attribute__((__format__ (ms_printf, 3, 0))) __MINGW_ATTRIB_NONNULL(3)
   int __cdecl __ms_vsnprintf(char * __restrict__ d,size_t n,const char * __restrict__ format,va_list arg)
     __MINGW_ATTRIB_DEPRECATED_MSVC2005 __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
 
   __mingw_ovr
-  __MINGW_ATTRIB_NONNULL(3)
+  __attribute__((__format__ (ms_printf, 3, 0))) __MINGW_ATTRIB_NONNULL(3)
   int vsnprintf (char * __restrict__ __stream, size_t __n, const char * __restrict__ __format, va_list __local_argv)
   {
     return __ms_vsnprintf (__stream, __n, __format, __local_argv);
   }
 
+  __attribute__((__format__ (ms_printf, 3, 4))) __MINGW_ATTRIB_NONNULL(3)
   int __cdecl __ms_snprintf(char * __restrict__ s, size_t n, const char * __restrict__  format, ...);
 
 #ifndef __NO_ISOCEXT
 __mingw_ovr
-__MINGW_ATTRIB_NONNULL(3)
+__attribute__((__format__ (ms_printf, 3, 4))) __MINGW_ATTRIB_NONNULL(3)
 int snprintf (char * __restrict__ __stream, size_t __n, const char * __restrict__ __format, ...)
 {
   register int __retval;
diff --git a/x86_64-w64-mingw32/include/string.h b/x86_64-w64-mingw32/include/string.h
index 16831e3..84c8d71 100644
--- a/x86_64-w64-mingw32/include/string.h
+++ b/x86_64-w64-mingw32/include/string.h
@@ -39,6 +39,7 @@
   _CRTIMP int __cdecl _memicmp_l(const void *_Buf1,const void *_Buf2,size_t _Size,_locale_t _Locale);
   int __cdecl memcmp(const void *_Buf1,const void *_Buf2,size_t _Size);
   void * __cdecl memcpy(void * __restrict__ _Dst,const void * __restrict__ _Src,size_t _Size) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
+  _CRTIMP errno_t __cdecl memcpy_s (void *_dest,size_t _numberOfElements,const void *_src,size_t _count);
   void * __cdecl mempcpy (void *_Dst, const void *_Src, size_t _Size);
   void * __cdecl memset(void *_Dst,int _Val,size_t _Size);
 #ifndef	NO_OLDNAMES
diff --git a/x86_64-w64-mingw32/include/strmif.h b/x86_64-w64-mingw32/include/strmif.h
index 9c3e7ed..716342b 100644
--- a/x86_64-w64-mingw32/include/strmif.h
+++ b/x86_64-w64-mingw32/include/strmif.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 1.6 from /usr/local/google/buildbot/src/android/mingw/toolchain/mingw/mingw-w64-v4.0.4/mingw-w64-headers/include/strmif.idl - Do not edit ***/
+/*** Autogenerated by WIDL 1.6 from include/strmif.idl - Do not edit ***/
 
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
 #define __REQUIRED_RPCNDR_H_VERSION__ 475
@@ -292,6 +292,11 @@
 typedef interface IAMGraphBuilderCallback IAMGraphBuilderCallback;
 #endif
 
+#ifndef __IAMVfwCaptureDialogs_FWD_DEFINED__
+#define __IAMVfwCaptureDialogs_FWD_DEFINED__
+typedef interface IAMVfwCaptureDialogs IAMVfwCaptureDialogs;
+#endif
+
 /* Headers for imported files */
 
 #include <unknwn.h>
@@ -4543,10 +4548,51 @@
 typedef interface ISeekingPassThru ISeekingPassThru;
 #endif
 
+typedef enum tagAnalogVideoStandard {
+    AnalogVideo_None = 0x0,
+    AnalogVideo_NTSC_M = 0x1,
+    AnalogVideo_NTSC_M_J = 0x2,
+    AnalogVideo_NTSC_433 = 0x4,
+    AnalogVideo_PAL_B = 0x10,
+    AnalogVideo_PAL_D = 0x20,
+    AnalogVideo_PAL_G = 0x40,
+    AnalogVideo_PAL_H = 0x80,
+    AnalogVideo_PAL_I = 0x100,
+    AnalogVideo_PAL_M = 0x200,
+    AnalogVideo_PAL_N = 0x400,
+    AnalogVideo_PAL_60 = 0x800,
+    AnalogVideo_SECAM_B = 0x1000,
+    AnalogVideo_SECAM_D = 0x2000,
+    AnalogVideo_SECAM_G = 0x4000,
+    AnalogVideo_SECAM_H = 0x8000,
+    AnalogVideo_SECAM_K = 0x10000,
+    AnalogVideo_SECAM_K1 = 0x20000,
+    AnalogVideo_SECAM_L = 0x40000,
+    AnalogVideo_SECAM_L1 = 0x80000,
+    AnalogVideo_PAL_N_COMBO = 0x100000,
+    AnalogVideoMask_MCE_NTSC = (((((AnalogVideo_NTSC_M | AnalogVideo_NTSC_M_J) | AnalogVideo_NTSC_433) | AnalogVideo_PAL_M) | AnalogVideo_PAL_N) | AnalogVideo_PAL_60) | AnalogVideo_PAL_N_COMBO,
+    AnalogVideoMask_MCE_PAL = (((AnalogVideo_PAL_B | AnalogVideo_PAL_D) | AnalogVideo_PAL_G) | AnalogVideo_PAL_H) | AnalogVideo_PAL_I,
+    AnalogVideoMask_MCE_SECAM = ((((((AnalogVideo_SECAM_B | AnalogVideo_SECAM_D) | AnalogVideo_SECAM_G) | AnalogVideo_SECAM_H) | AnalogVideo_SECAM_K) | AnalogVideo_SECAM_K1) | AnalogVideo_SECAM_L) | AnalogVideo_SECAM_L1
+} AnalogVideoStandard;
+typedef enum tagTunerInputType {
+    TunerInputCable = 0,
+    TunerInputAntenna = 1
+} TunerInputType;
 typedef struct __WIDL_strmif_generated_name_00000002 {
     CLSID Clsid;
     LPWSTR Name;
 } REGFILTER;
+typedef enum tagTVAudioMode {
+    AMTVAUDIO_MODE_MONO = 0x1,
+    AMTVAUDIO_MODE_STEREO = 0x2,
+    AMTVAUDIO_MODE_LANG_A = 0x10,
+    AMTVAUDIO_MODE_LANG_B = 0x20,
+    AMTVAUDIO_MODE_LANG_C = 0x40,
+    AMTVAUDIO_PRESET_STEREO = 0x200,
+    AMTVAUDIO_PRESET_LANG_A = 0x1000,
+    AMTVAUDIO_PRESET_LANG_B = 0x2000,
+    AMTVAUDIO_PRESET_LANG_C = 0x4000
+} TVAudioMode;
 /*****************************************************************************
  * IEnumRegFilters interface
  */
@@ -10335,6 +10381,140 @@
 
 #endif  /* __IAMGraphBuilderCallback_INTERFACE_DEFINED__ */
 
+/*****************************************************************************
+ * IAMVfwCaptureDialogs interface
+ */
+#ifndef __IAMVfwCaptureDialogs_INTERFACE_DEFINED__
+#define __IAMVfwCaptureDialogs_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IAMVfwCaptureDialogs, 0xd8d715a0, 0x6e5e, 0x11d0, 0xb3,0xf0, 0x00,0xaa,0x00,0x37,0x61,0xc5);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("d8d715a0-6e5e-11d0-b3f0-00aa003761c5")
+IAMVfwCaptureDialogs : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE HasDialog(
+        int dialog) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ShowDialog(
+        int dialog,
+        HWND hwnd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SendDriverMessage(
+        int dialog,
+        int msg,
+        LONG data1,
+        LONG data2) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IAMVfwCaptureDialogs, 0xd8d715a0, 0x6e5e, 0x11d0, 0xb3,0xf0, 0x00,0xaa,0x00,0x37,0x61,0xc5)
+#endif
+#else
+typedef struct IAMVfwCaptureDialogsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IAMVfwCaptureDialogs* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IAMVfwCaptureDialogs* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IAMVfwCaptureDialogs* This);
+
+    /*** IAMVfwCaptureDialogs methods ***/
+    HRESULT (STDMETHODCALLTYPE *HasDialog)(
+        IAMVfwCaptureDialogs* This,
+        int dialog);
+
+    HRESULT (STDMETHODCALLTYPE *ShowDialog)(
+        IAMVfwCaptureDialogs* This,
+        int dialog,
+        HWND hwnd);
+
+    HRESULT (STDMETHODCALLTYPE *SendDriverMessage)(
+        IAMVfwCaptureDialogs* This,
+        int dialog,
+        int msg,
+        LONG data1,
+        LONG data2);
+
+    END_INTERFACE
+} IAMVfwCaptureDialogsVtbl;
+interface IAMVfwCaptureDialogs {
+    CONST_VTBL IAMVfwCaptureDialogsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IAMVfwCaptureDialogs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAMVfwCaptureDialogs_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAMVfwCaptureDialogs_Release(This) (This)->lpVtbl->Release(This)
+/*** IAMVfwCaptureDialogs methods ***/
+#define IAMVfwCaptureDialogs_HasDialog(This,dialog) (This)->lpVtbl->HasDialog(This,dialog)
+#define IAMVfwCaptureDialogs_ShowDialog(This,dialog,hwnd) (This)->lpVtbl->ShowDialog(This,dialog,hwnd)
+#define IAMVfwCaptureDialogs_SendDriverMessage(This,dialog,msg,data1,data2) (This)->lpVtbl->SendDriverMessage(This,dialog,msg,data1,data2)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IAMVfwCaptureDialogs_QueryInterface(IAMVfwCaptureDialogs* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IAMVfwCaptureDialogs_AddRef(IAMVfwCaptureDialogs* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IAMVfwCaptureDialogs_Release(IAMVfwCaptureDialogs* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IAMVfwCaptureDialogs methods ***/
+static FORCEINLINE HRESULT IAMVfwCaptureDialogs_HasDialog(IAMVfwCaptureDialogs* This,int dialog) {
+    return This->lpVtbl->HasDialog(This,dialog);
+}
+static FORCEINLINE HRESULT IAMVfwCaptureDialogs_ShowDialog(IAMVfwCaptureDialogs* This,int dialog,HWND hwnd) {
+    return This->lpVtbl->ShowDialog(This,dialog,hwnd);
+}
+static FORCEINLINE HRESULT IAMVfwCaptureDialogs_SendDriverMessage(IAMVfwCaptureDialogs* This,int dialog,int msg,LONG data1,LONG data2) {
+    return This->lpVtbl->SendDriverMessage(This,dialog,msg,data1,data2);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IAMVfwCaptureDialogs_HasDialog_Proxy(
+    IAMVfwCaptureDialogs* This,
+    int dialog);
+void __RPC_STUB IAMVfwCaptureDialogs_HasDialog_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAMVfwCaptureDialogs_ShowDialog_Proxy(
+    IAMVfwCaptureDialogs* This,
+    int dialog,
+    HWND hwnd);
+void __RPC_STUB IAMVfwCaptureDialogs_ShowDialog_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAMVfwCaptureDialogs_SendDriverMessage_Proxy(
+    IAMVfwCaptureDialogs* This,
+    int dialog,
+    int msg,
+    LONG data1,
+    LONG data2);
+void __RPC_STUB IAMVfwCaptureDialogs_SendDriverMessage_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IAMVfwCaptureDialogs_INTERFACE_DEFINED__ */
+
 #ifndef __IReferenceClock2_FWD_DEFINED__
 #define __IReferenceClock2_FWD_DEFINED__
 typedef struct IReferenceClock2 IReferenceClock2;
@@ -10349,11 +10529,6 @@
 typedef struct IAMVideoCompression IAMVideoCompression;
 #endif
 
-#ifndef __IAMVfwCaptureDialogs_FWD_DEFINED__
-#define __IAMVfwCaptureDialogs_FWD_DEFINED__
-typedef struct IAMVfwCaptureDialogs IAMVfwCaptureDialogs;
-#endif
-
 #ifndef __IAMVfwCompressDialogs_FWD_DEFINED__
 #define __IAMVfwCompressDialogs_FWD_DEFINED__
 typedef struct IAMVfwCompressDialogs IAMVfwCompressDialogs;
@@ -10950,49 +11125,6 @@
     VfwCompressDialog_Config = 0x1,VfwCompressDialog_About = 0x2,VfwCompressDialog_QueryConfig = 0x4,VfwCompressDialog_QueryAbout = 0x8
   } VfwCompressDialogs;
 
-  extern RPC_IF_HANDLE __MIDL_itf_strmif_0168_v0_0_c_ifspec;
-  extern RPC_IF_HANDLE __MIDL_itf_strmif_0168_v0_0_s_ifspec;
-#ifndef __IAMVfwCaptureDialogs_INTERFACE_DEFINED__
-#define __IAMVfwCaptureDialogs_INTERFACE_DEFINED__
-  EXTERN_C const IID IID_IAMVfwCaptureDialogs;
-#if defined(__cplusplus) && !defined(CINTERFACE)
-  struct IAMVfwCaptureDialogs : public IUnknown {
-  public:
-    virtual HRESULT WINAPI HasDialog(int iDialog) = 0;
-    virtual HRESULT WINAPI ShowDialog(int iDialog,HWND hwnd) = 0;
-    virtual HRESULT WINAPI SendDriverMessage(int iDialog,int uMsg,LONG dw1,LONG dw2) = 0;
-  };
-#else
-  typedef struct IAMVfwCaptureDialogsVtbl {
-    BEGIN_INTERFACE
-      HRESULT (WINAPI *QueryInterface)(IAMVfwCaptureDialogs *This,REFIID riid,void **ppvObject);
-      ULONG (WINAPI *AddRef)(IAMVfwCaptureDialogs *This);
-      ULONG (WINAPI *Release)(IAMVfwCaptureDialogs *This);
-      HRESULT (WINAPI *HasDialog)(IAMVfwCaptureDialogs *This,int iDialog);
-      HRESULT (WINAPI *ShowDialog)(IAMVfwCaptureDialogs *This,int iDialog,HWND hwnd);
-      HRESULT (WINAPI *SendDriverMessage)(IAMVfwCaptureDialogs *This,int iDialog,int uMsg,LONG dw1,LONG dw2);
-    END_INTERFACE
-  } IAMVfwCaptureDialogsVtbl;
-  struct IAMVfwCaptureDialogs {
-    CONST_VTBL struct IAMVfwCaptureDialogsVtbl *lpVtbl;
-  };
-#ifdef COBJMACROS
-#define IAMVfwCaptureDialogs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IAMVfwCaptureDialogs_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IAMVfwCaptureDialogs_Release(This) (This)->lpVtbl->Release(This)
-#define IAMVfwCaptureDialogs_HasDialog(This,iDialog) (This)->lpVtbl->HasDialog(This,iDialog)
-#define IAMVfwCaptureDialogs_ShowDialog(This,iDialog,hwnd) (This)->lpVtbl->ShowDialog(This,iDialog,hwnd)
-#define IAMVfwCaptureDialogs_SendDriverMessage(This,iDialog,uMsg,dw1,dw2) (This)->lpVtbl->SendDriverMessage(This,iDialog,uMsg,dw1,dw2)
-#endif
-#endif
-  HRESULT WINAPI IAMVfwCaptureDialogs_HasDialog_Proxy(IAMVfwCaptureDialogs *This,int iDialog);
-  void __RPC_STUB IAMVfwCaptureDialogs_HasDialog_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IAMVfwCaptureDialogs_ShowDialog_Proxy(IAMVfwCaptureDialogs *This,int iDialog,HWND hwnd);
-  void __RPC_STUB IAMVfwCaptureDialogs_ShowDialog_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI IAMVfwCaptureDialogs_SendDriverMessage_Proxy(IAMVfwCaptureDialogs *This,int iDialog,int uMsg,LONG dw1,LONG dw2);
-  void __RPC_STUB IAMVfwCaptureDialogs_SendDriverMessage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-#endif
-
 #ifndef __IAMVfwCompressDialogs_INTERFACE_DEFINED__
 #define __IAMVfwCompressDialogs_INTERFACE_DEFINED__
   EXTERN_C const IID IID_IAMVfwCompressDialogs;
@@ -11231,18 +11363,6 @@
   void __RPC_STUB IAMBufferNegotiation_GetAllocatorProperties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
 #endif
 
-  typedef enum tagAnalogVideoStandard {
-    AnalogVideo_None = 0,AnalogVideo_NTSC_M = 0x1,AnalogVideo_NTSC_M_J = 0x2,AnalogVideo_NTSC_433 = 0x4,AnalogVideo_PAL_B = 0x10,
-    AnalogVideo_PAL_D = 0x20,AnalogVideo_PAL_G = 0x40,AnalogVideo_PAL_H = 0x80,AnalogVideo_PAL_I = 0x100,AnalogVideo_PAL_M = 0x200,
-    AnalogVideo_PAL_N = 0x400,AnalogVideo_PAL_60 = 0x800,AnalogVideo_SECAM_B = 0x1000,AnalogVideo_SECAM_D = 0x2000,AnalogVideo_SECAM_G = 0x4000,
-    AnalogVideo_SECAM_H = 0x8000,AnalogVideo_SECAM_K = 0x10000,AnalogVideo_SECAM_K1 = 0x20000,AnalogVideo_SECAM_L = 0x40000,AnalogVideo_SECAM_L1 = 0x80000,
-    AnalogVideo_PAL_N_COMBO = 0x100000,AnalogVideoMask_MCE_NTSC = AnalogVideo_NTSC_M | AnalogVideo_NTSC_M_J | AnalogVideo_NTSC_433 | AnalogVideo_PAL_M | AnalogVideo_PAL_N | AnalogVideo_PAL_60 | AnalogVideo_PAL_N_COMBO,AnalogVideoMask_MCE_PAL = AnalogVideo_PAL_B | AnalogVideo_PAL_D | AnalogVideo_PAL_G | AnalogVideo_PAL_H | AnalogVideo_PAL_I,AnalogVideoMask_MCE_SECAM = AnalogVideo_SECAM_B | AnalogVideo_SECAM_D | AnalogVideo_SECAM_G | AnalogVideo_SECAM_H | AnalogVideo_SECAM_K | AnalogVideo_SECAM_K1 | AnalogVideo_SECAM_L | AnalogVideo_SECAM_L1
-  } AnalogVideoStandard;
-
-  typedef enum tagTunerInputType {
-    TunerInputCable = 0,TunerInputAntenna = TunerInputCable + 1
-  } TunerInputType;
-
 #define AnalogVideo_NTSC_Mask 0x00000007
 #define AnalogVideo_PAL_Mask 0x00100FF0
 #define AnalogVideo_SECAM_Mask 0x000FF000
@@ -11838,10 +11958,6 @@
   void __RPC_STUB IBPCSatelliteTuner_IsTapingPermitted_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
 #endif
 
-  typedef enum tagTVAudioMode {
-    AMTVAUDIO_MODE_MONO = 0x1,AMTVAUDIO_MODE_STEREO = 0x2,AMTVAUDIO_MODE_LANG_A = 0x10,AMTVAUDIO_MODE_LANG_B = 0x20,AMTVAUDIO_MODE_LANG_C = 0x40
-  } TVAudioMode;
-
   typedef enum tagAMTVAudioEventType {
     AMTVAUDIO_EVENT_CHANGED = 0x1
   } AMTVAudioEventType;
diff --git a/x86_64-w64-mingw32/include/tabflicks.h b/x86_64-w64-mingw32/include/tabflicks.h
index f41b7f8..553228f 100644
--- a/x86_64-w64-mingw32/include/tabflicks.h
+++ b/x86_64-w64-mingw32/include/tabflicks.h
@@ -70,4 +70,4 @@
 }
 #endif
 #endif /*(_WIN32_WINNT >= 0x0600)*/
-#endif _INC_TABFLICKS
+#endif /* _INC_TABFLICKS */
diff --git a/x86_64-w64-mingw32/include/textstor.h b/x86_64-w64-mingw32/include/textstor.h
index 3aa5a7c..0e051d7 100644
--- a/x86_64-w64-mingw32/include/textstor.h
+++ b/x86_64-w64-mingw32/include/textstor.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 1.6 from /usr/local/google/buildbot/src/android/mingw/toolchain/mingw/mingw-w64-v4.0.4/mingw-w64-headers/include/textstor.idl - Do not edit ***/
+/*** Autogenerated by WIDL 1.6 from include/textstor.idl - Do not edit ***/
 
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
 #define __REQUIRED_RPCNDR_H_VERSION__ 475
@@ -91,6 +91,10 @@
 
 #define TS_ST_CORRECTION (0x1)
 
+#define GXFPF_ROUND_NEAREST (0x1)
+
+#define GXFPF_NEAREST (0x2)
+
 typedef enum __WIDL_textstor_generated_name_00000002 {
     TS_AE_NONE = 0,
     TS_AE_START = 1,
diff --git a/x86_64-w64-mingw32/include/tlbref.h b/x86_64-w64-mingw32/include/tlbref.h
index d2418c5..7ecc3cd 100644
--- a/x86_64-w64-mingw32/include/tlbref.h
+++ b/x86_64-w64-mingw32/include/tlbref.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 1.6 from tlbref.idl - Do not edit ***/
+/*** Autogenerated by WIDL 1.6 from include/tlbref.idl - Do not edit ***/
 
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
 #define __REQUIRED_RPCNDR_H_VERSION__ 475
diff --git a/x86_64-w64-mingw32/include/tom.h b/x86_64-w64-mingw32/include/tom.h
index c3bc7a3..1bb7545 100644
--- a/x86_64-w64-mingw32/include/tom.h
+++ b/x86_64-w64-mingw32/include/tom.h
@@ -121,31 +121,31 @@
 #ifndef __tom_LIBRARY_DEFINED__
 #define __tom_LIBRARY_DEFINED__
   typedef enum __MIDL___MIDL_itf_tom_0000_0001 {
-    tomFalse = 0,tomTrue = -1,tomUndefined = -9999999,tomToggle = -9999998,tomAutoColor = -9999997,tomDefault = -9999996,tomSuspend = -9999995,
-    tomResume = -9999994,tomApplyNow = 0,tomApplyLater = 1,tomTrackParms = 2,tomCacheParms = 3,tomBackward = 0xc0000001,tomForward = 0x3fffffff,
-    tomMove = 0,tomExtend = 1,tomNoSelection = 0,tomSelectionIP = 1,tomSelectionNormal = 2,tomSelectionFrame = 3,tomSelectionColumn = 4,
-    tomSelectionRow = 5,tomSelectionBlock = 6,tomSelectionInlineShape = 7,tomSelectionShape = 8,tomSelStartActive = 1,tomSelAtEOL = 2,
-    tomSelOvertype = 4,tomSelActive = 8,tomSelReplace = 16,tomEnd = 0,tomStart = 32,tomCollapseEnd = 0,tomCollapseStart = 1,tomClientCoord = 256,
-    tomNone = 0,tomSingle = 1,tomWords = 2,tomDouble = 3,tomDotted = 4,tomDash = 5,tomDashDot = 6,tomDashDotDot = 7,tomWave = 8,tomThick = 9,
-    tomHair = 10,tomLineSpaceSingle = 0,tomLineSpace1pt5 = 1,tomLineSpaceDouble = 2,tomLineSpaceAtLeast = 3,tomLineSpaceExactly = 4,
-    tomLineSpaceMultiple = 5,tomAlignLeft = 0,tomAlignCenter = 1,tomAlignRight = 2,tomAlignJustify = 3,tomAlignDecimal = 3,tomAlignBar = 4,
-    tomAlignInterWord = 3,tomAlignInterLetter = 4,tomAlignScaled = 5,tomAlignGlyphs = 6,tomAlignSnapGrid = 7,tomSpaces = 0,tomDots = 1,tomDashes = 2,
-    tomLines = 3,tomThickLines = 4,tomEquals = 5,tomTabBack = -3,tomTabNext = -2,tomTabHere = -1,tomListNone = 0,tomListBullet = 1,
-    tomListNumberAsArabic = 2,tomListNumberAsLCLetter = 3,tomListNumberAsUCLetter = 4,tomListNumberAsLCRoman = 5,tomListNumberAsUCRoman = 6,
-    tomListNumberAsSequence = 7,tomListParentheses = 0x10000,tomListPeriod = 0x20000,tomListPlain = 0x30000,tomCharacter = 1,tomWord = 2,
-    tomSentence = 3,tomParagraph = 4,tomLine = 5,tomStory = 6,tomScreen = 7,tomSection = 8,tomColumn = 9,tomRow = 10,tomWindow = 11,tomCell = 12,
-    tomCharFormat = 13,tomParaFormat = 14,tomTable = 15,tomObject = 16,tomMatchWord = 2,tomMatchCase = 4,tomMatchPattern = 8,tomUnknownStory = 0,
-    tomMainTextStory = 1,tomFootnotesStory = 2,tomEndnotesStory = 3,tomCommentsStory = 4,tomTextFrameStory = 5,tomEvenPagesHeaderStory = 6,
-    tomPrimaryHeaderStory = 7,tomEvenPagesFooterStory = 8,tomPrimaryFooterStory = 9,tomFirstPageHeaderStory = 10,tomFirstPageFooterStory = 11,
-    tomNoAnimation = 0,tomLasVegasLights = 1,tomBlinkingBackground = 2,tomSparkleText = 3,tomMarchingBlackAnts = 4,tomMarchingRedAnts = 5,
-    tomShimmer = 6,tomWipeDown = 7,tomWipeRight = 8,tomAnimationMax = 8,tomLowerCase = 0,tomUpperCase = 1,tomTitleCase = 2,tomSentenceCase = 4,
-    tomToggleCase = 5,tomReadOnly = 0x100,tomShareDenyRead = 0x200,tomShareDenyWrite = 0x400,tomPasteFile = 0x1000,tomCreateNew = 0x10,
-    tomCreateAlways = 0x20,tomOpenExisting = 0x30,tomOpenAlways = 0x40,tomTruncateExisting = 0x50,tomRTF = 0x1,tomText = 0x2,tomHTML = 0x3,
-    tomWordDocument = 0x4,tomBold = 0x80000001,tomItalic = 0x80000002,tomUnderline = 0x80000004,tomStrikeout = 0x80000008,tomProtected = 0x80000010,
-    tomLink = 0x80000020,tomSmallCaps = 0x80000040,tomAllCaps = 0x80000080,tomHidden = 0x80000100,tomOutline = 0x80000200,tomShadow = 0x80000400,
-    tomEmboss = 0x80000800,tomImprint = 0x80001000,tomDisabled = 0x80002000,tomRevised = 0x80004000,tomNormalCaret = 0,tomKoreanBlockCaret = 0x1,
-    tomIncludeInset = 0x1,tomIgnoreCurrentFont = 0,tomMatchFontCharset = 0x1,tomMatchFontSignature = 0x2,tomCharset = 0x80000000,tomRE10Mode = 0x1,
-    tomNoIME = 0x80000,tomSelfIME = 0x40000
+    tomFalse = (int) 0,tomTrue = (int) -1,tomUndefined = (int) -9999999,tomToggle = (int) -9999998,tomAutoColor = (int) -9999997,tomDefault = (int) -9999996,tomSuspend = (int) -9999995,
+    tomResume = (int) -9999994,tomApplyNow = (int) 0,tomApplyLater = (int) 1,tomTrackParms = (int) 2,tomCacheParms = (int) 3,tomBackward = (int) 0xc0000001,tomForward = (int) 0x3fffffff,
+    tomMove = (int) 0,tomExtend = (int) 1,tomNoSelection = (int) 0,tomSelectionIP = (int) 1,tomSelectionNormal = (int) 2,tomSelectionFrame = (int) 3,tomSelectionColumn = (int) 4,
+    tomSelectionRow = (int) 5,tomSelectionBlock = (int) 6,tomSelectionInlineShape = (int) 7,tomSelectionShape = (int) 8,tomSelStartActive = (int) 1,tomSelAtEOL = (int) 2,
+    tomSelOvertype = (int) 4,tomSelActive = (int) 8,tomSelReplace = (int) 16,tomEnd = (int) 0,tomStart = (int) 32,tomCollapseEnd = (int) 0,tomCollapseStart = (int) 1,tomClientCoord = (int) 256,
+    tomNone = (int) 0,tomSingle = (int) 1,tomWords = (int) 2,tomDouble = (int) 3,tomDotted = (int) 4,tomDash = (int) 5,tomDashDot = (int) 6,tomDashDotDot = (int) 7,tomWave = (int) 8,tomThick = (int) 9,
+    tomHair = (int) 10,tomLineSpaceSingle = (int) 0,tomLineSpace1pt5 = (int) 1,tomLineSpaceDouble = (int) 2,tomLineSpaceAtLeast = (int) 3,tomLineSpaceExactly = (int) 4,
+    tomLineSpaceMultiple = (int) 5,tomAlignLeft = (int) 0,tomAlignCenter = (int) 1,tomAlignRight = (int) 2,tomAlignJustify = (int) 3,tomAlignDecimal = (int) 3,tomAlignBar = (int) 4,
+    tomAlignInterWord = (int) 3,tomAlignInterLetter = (int) 4,tomAlignScaled = (int) 5,tomAlignGlyphs = (int) 6,tomAlignSnapGrid = (int) 7,tomSpaces = (int) 0,tomDots = (int) 1,tomDashes = (int) 2,
+    tomLines = (int) 3,tomThickLines = (int) 4,tomEquals = (int) 5,tomTabBack = (int) -3,tomTabNext = (int) -2,tomTabHere = (int) -1,tomListNone = (int) 0,tomListBullet = (int) 1,
+    tomListNumberAsArabic = (int) 2,tomListNumberAsLCLetter = (int) 3,tomListNumberAsUCLetter = (int) 4,tomListNumberAsLCRoman = (int) 5,tomListNumberAsUCRoman = (int) 6,
+    tomListNumberAsSequence = (int) 7,tomListParentheses = (int) 0x10000,tomListPeriod = (int) 0x20000,tomListPlain = (int) 0x30000,tomCharacter = (int) 1,tomWord = (int) 2,
+    tomSentence = (int) 3,tomParagraph = (int) 4,tomLine = (int) 5,tomStory = (int) 6,tomScreen = (int) 7,tomSection = (int) 8,tomColumn = (int) 9,tomRow = (int) 10,tomWindow = (int) 11,tomCell = (int) 12,
+    tomCharFormat = (int) 13,tomParaFormat = (int) 14,tomTable = (int) 15,tomObject = (int) 16,tomMatchWord = (int) 2,tomMatchCase = (int) 4,tomMatchPattern = (int) 8,tomUnknownStory = (int) 0,
+    tomMainTextStory = (int) 1,tomFootnotesStory = (int) 2,tomEndnotesStory = (int) 3,tomCommentsStory = (int) 4,tomTextFrameStory = (int) 5,tomEvenPagesHeaderStory = (int) 6,
+    tomPrimaryHeaderStory = (int) 7,tomEvenPagesFooterStory = (int) 8,tomPrimaryFooterStory = (int) 9,tomFirstPageHeaderStory = (int) 10,tomFirstPageFooterStory = (int) 11,
+    tomNoAnimation = (int) 0,tomLasVegasLights = (int) 1,tomBlinkingBackground = (int) 2,tomSparkleText = (int) 3,tomMarchingBlackAnts = (int) 4,tomMarchingRedAnts = (int) 5,
+    tomShimmer = (int) 6,tomWipeDown = (int) 7,tomWipeRight = (int) 8,tomAnimationMax = (int) 8,tomLowerCase = (int) 0,tomUpperCase = (int) 1,tomTitleCase = (int) 2,tomSentenceCase = (int) 4,
+    tomToggleCase = (int) 5,tomReadOnly = (int) 0x100,tomShareDenyRead = (int) 0x200,tomShareDenyWrite = (int) 0x400,tomPasteFile = (int) 0x1000,tomCreateNew = (int) 0x10,
+    tomCreateAlways = (int) 0x20,tomOpenExisting = (int) 0x30,tomOpenAlways = (int) 0x40,tomTruncateExisting = (int) 0x50,tomRTF = (int) 0x1,tomText = (int) 0x2,tomHTML = (int) 0x3,
+    tomWordDocument = (int) 0x4,tomBold = (int) 0x80000001,tomItalic = (int) 0x80000002,tomUnderline = (int) 0x80000004,tomStrikeout = (int) 0x80000008,tomProtected = (int) 0x80000010,
+    tomLink = (int) 0x80000020,tomSmallCaps = (int) 0x80000040,tomAllCaps = (int) 0x80000080,tomHidden = (int) 0x80000100,tomOutline = (int) 0x80000200,tomShadow = (int) 0x80000400,
+    tomEmboss = (int) 0x80000800,tomImprint = (int) 0x80001000,tomDisabled = (int) 0x80002000,tomRevised = (int) 0x80004000,tomNormalCaret = (int) 0,tomKoreanBlockCaret = (int) 0x1,
+    tomIncludeInset = (int) 0x1,tomIgnoreCurrentFont = (int) 0,tomMatchFontCharset = (int) 0x1,tomMatchFontSignature = (int) 0x2,tomCharset = (int) 0x80000000,tomRE10Mode = (int) 0x1,
+    tomNoIME = (int) 0x80000,tomSelfIME = (int) 0x40000
   } tomConstants;
 
   EXTERN_C const IID LIBID_tom;
diff --git a/x86_64-w64-mingw32/include/tpcshrd.h b/x86_64-w64-mingw32/include/tpcshrd.h
index a8dd1fc..b114270 100644
--- a/x86_64-w64-mingw32/include/tpcshrd.h
+++ b/x86_64-w64-mingw32/include/tpcshrd.h
@@ -44,6 +44,17 @@
 typedef DWORD CURSOR_ID;
 typedef USHORT SYSTEM_EVENT;
 typedef DWORD TABLET_CONTEXT_ID;
+#ifndef _XFORM_
+#define _XFORM_
+typedef struct tagXFORM {
+    float eM11;
+    float eM12;
+    float eM21;
+    float eM22;
+    float eDx;
+    float eDy;
+} XFORM;
+#endif
 /* Begin additional prototypes for all interfaces */
 
 
diff --git a/x86_64-w64-mingw32/include/tsattrs.h b/x86_64-w64-mingw32/include/tsattrs.h
index b60d752..c119cbd 100644
--- a/x86_64-w64-mingw32/include/tsattrs.h
+++ b/x86_64-w64-mingw32/include/tsattrs.h
@@ -1,100 +1,100 @@
-/**
- * This file has no copyright assigned and is placed in the Public Domain.
- * This file is part of the mingw-w64 runtime package.
- * No warranty is given; refer to the file DISCLAIMER.PD within this package.
- */
-
-#ifndef _TSATTRS_H_
-#define _TSATTRS_H_
-
-DEFINE_GUID(TSATTRID_OTHERS, 0xb3c32af9,0x57d0,0x46a9,0xbc,0xa8,0xda,0xc2,0x38,0xa1,0x30,0x57);
-
-DEFINE_GUID(TSATTRID_Font,                           0x573ea825,0x749b,0x4f8a,0x9c,0xfd,0x21,0xc3,0x60,0x5c,0xa8,0x28);
-DEFINE_GUID(TSATTRID_Font_FaceName,                  0xb536aeb6,0x053b,0x4eb8,0xb6,0x5a,0x50,0xda,0x1e,0x81,0xe7,0x2e);
-DEFINE_GUID(TSATTRID_Font_SizePts,                   0xc8493302,0xa5e9,0x456d,0xaf,0x04,0x80,0x05,0xe4,0x13,0x0f,0x03);
-DEFINE_GUID(TSATTRID_Font_Style,                     0x68b2a77f,0x6b0e,0x4f28,0x81,0x77,0x57,0x1c,0x2f,0x3a,0x42,0xb1);
-DEFINE_GUID(TSATTRID_Font_Style_Bold,                0x48813a43,0x8a20,0x4940,0x8e,0x58,0x97,0x82,0x3f,0x7b,0x26,0x8a);
-DEFINE_GUID(TSATTRID_Font_Style_Italic,              0x8740682a,0xa765,0x48e1,0xac,0xfc,0xd2,0x22,0x22,0xb2,0xf8,0x10);
-DEFINE_GUID(TSATTRID_Font_Style_SmallCaps,           0xfacb6bc6,0x9100,0x4cc6,0xb9,0x69,0x11,0xee,0xa4,0x5a,0x86,0xb4);
-DEFINE_GUID(TSATTRID_Font_Style_Capitalize,          0x7d85a3ba,0xb4fd,0x43b3,0xbe,0xfc,0x6b,0x98,0x5c,0x84,0x31,0x41);
-DEFINE_GUID(TSATTRID_Font_Style_Uppercase,           0x33a300e8,0xe340,0x4937,0xb6,0x97,0x8f,0x23,0x40,0x45,0xcd,0x9a);
-DEFINE_GUID(TSATTRID_Font_Style_Lowercase,           0x76d8ccb5,0xca7b,0x4498,0x8e,0xe9,0xd5,0xc4,0xf6,0xf7,0x4c,0x60);
-DEFINE_GUID(TSATTRID_Font_Style_Animation,           0xdcf73d22,0xe029,0x47b7,0xbb,0x36,0xf2,0x63,0xa3,0xd0,0x04,0xcc);
-DEFINE_GUID(TSATTRID_Font_Style_Animation_LasVegasLights,     0xf40423d5,0x0f87,0x4f8f,0xba,0xda,0xe6,0xd6,0x0c,0x25,0xe1,0x52);
-DEFINE_GUID(TSATTRID_Font_Style_Animation_BlinkingBackground, 0x86e5b104,0x0104,0x4b10,0xb5,0x85,0x00,0xf2,0x52,0x75,0x22,0xb5);
-DEFINE_GUID(TSATTRID_Font_Style_Animation_SparkleText,        0x533aad20,0x962c,0x4e9f,0x8c,0x09,0xb4,0x2e,0xa4,0x74,0x97,0x11);
-DEFINE_GUID(TSATTRID_Font_Style_Animation_MarchingBlackAnts,  0x7644e067,0xf186,0x4902,0xbf,0xc6,0xec,0x81,0x5a,0xa2,0x0e,0x9d);
-DEFINE_GUID(TSATTRID_Font_Style_Animation_MarchingRedAnts,    0x78368dad,0x50fb,0x4c6f,0x84,0x0b,0xd4,0x86,0xbb,0x6c,0xf7,0x81);
-DEFINE_GUID(TSATTRID_Font_Style_Animation_Shimmer,    0x2ce31b58,0x5293,0x4c36,0x88,0x09,0xbf,0x8b,0xb5,0x1a,0x27,0xb3);
-DEFINE_GUID(TSATTRID_Font_Style_Animation_WipeDown,   0x5872e874,0x367b,0x4803,0xb1,0x60,0xc9,0x0f,0xf6,0x25,0x69,0xd0);
-DEFINE_GUID(TSATTRID_Font_Style_Animation_WipeRight,  0xb855cbe3,0x3d2c,0x4600,0xb1,0xe9,0xe1,0xc9,0xce,0x02,0xf8,0x42);
-DEFINE_GUID(TSATTRID_Font_Style_Emboss,               0xbd8ed742,0x349e,0x4e37,0x82,0xfb,0x43,0x79,0x79,0xcb,0x53,0xa7);
-DEFINE_GUID(TSATTRID_Font_Style_Engrave,              0x9c3371de,0x8332,0x4897,0xbe,0x5d,0x89,0x23,0x32,0x23,0x17,0x9a);
-DEFINE_GUID(TSATTRID_Font_Style_Hidden,               0xb1e28770,0x881c,0x475f,0x86,0x3f,0x88,0x7a,0x64,0x7b,0x10,0x90);
-DEFINE_GUID(TSATTRID_Font_Style_Kerning,              0xcc26e1b4,0x2f9a,0x47c8,0x8b,0xff,0xbf,0x1e,0xb7,0xcc,0xe0,0xdd);
-DEFINE_GUID(TSATTRID_Font_Style_Outlined,             0x10e6db31,0xdb0d,0x4ac6,0xa7,0xf5,0x9c,0x9c,0xff,0x6f,0x2a,0xb4);
-DEFINE_GUID(TSATTRID_Font_Style_Position,             0x15cd26ab,0xf2fb,0x4062,0xb5,0xa6,0x9a,0x49,0xe1,0xa5,0xcc,0x0b);
-DEFINE_GUID(TSATTRID_Font_Style_Protected,            0x1c557cb2,0x14cf,0x4554,0xa5,0x74,0xec,0xb2,0xf7,0xe7,0xef,0xd4);
-DEFINE_GUID(TSATTRID_Font_Style_Shadow,               0x5f686d2f,0xc6cd,0x4c56,0x8a,0x1a,0x99,0x4a,0x4b,0x97,0x66,0xbe);
-DEFINE_GUID(TSATTRID_Font_Style_Spacing,              0x98c1200d,0x8f06,0x409a,0x8e,0x49,0x6a,0x55,0x4b,0xf7,0xc1,0x53);
-DEFINE_GUID(TSATTRID_Font_Style_Weight,               0x12f3189c,0x8bb0,0x461b,0xb1,0xfa,0xea,0xf9,0x07,0x04,0x7f,0xe0);
-DEFINE_GUID(TSATTRID_Font_Style_Height,               0x7e937477,0x12e6,0x458b,0x92,0x6a,0x1f,0xa4,0x4e,0xe8,0xf3,0x91);
-DEFINE_GUID(TSATTRID_Font_Style_Underline,            0xc3c9c9f3,0x7902,0x444b,0x9a,0x7b,0x48,0xe7,0x0f,0x4b,0x50,0xf7);
-DEFINE_GUID(TSATTRID_Font_Style_Underline_Single,     0x1b6720e5,0x0f73,0x4951,0xa6,0xb3,0x6f,0x19,0xe4,0x3c,0x94,0x61);
-DEFINE_GUID(TSATTRID_Font_Style_Underline_Double,     0x74d24aa6,0x1db3,0x4c69,0xa1,0x76,0x31,0x12,0x0e,0x75,0x86,0xd5);
-DEFINE_GUID(TSATTRID_Font_Style_Strikethrough,        0x0c562193,0x2d08,0x4668,0x96,0x01,0xce,0xd4,0x13,0x09,0xd7,0xaf);
-DEFINE_GUID(TSATTRID_Font_Style_Strikethrough_Single, 0x75d736b6,0x3c8f,0x4b97,0xab,0x78,0x18,0x77,0xcb,0x99,0x0d,0x31);
-DEFINE_GUID(TSATTRID_Font_Style_Strikethrough_Double, 0x62489b31,0xa3e7,0x4f94,0xac,0x43,0xeb,0xaf,0x8f,0xcc,0x7a,0x9f);
-DEFINE_GUID(TSATTRID_Font_Style_Overline,             0xe3989f4a,0x992b,0x4301,0x8c,0xe1,0xa5,0xb7,0xc6,0xd1,0xf3,0xc8);
-DEFINE_GUID(TSATTRID_Font_Style_Overline_Single,      0x8440d94c,0x51ce,0x47b2,0x8d,0x4c,0x15,0x75,0x1e,0x5f,0x72,0x1b);
-DEFINE_GUID(TSATTRID_Font_Style_Overline_Double,      0xdc46063a,0xe115,0x46e3,0xbc,0xd8,0xca,0x67,0x72,0xaa,0x95,0xb4);
-DEFINE_GUID(TSATTRID_Font_Style_Blink,                0xbfb2c036,0x7acf,0x4532,0xb7,0x20,0xb4,0x16,0xdd,0x77,0x65,0xa8);
-DEFINE_GUID(TSATTRID_Font_Style_Subscript,            0x5774fb84,0x389b,0x43bc,0xa7,0x4b,0x15,0x68,0x34,0x7c,0xf0,0xf4);
-DEFINE_GUID(TSATTRID_Font_Style_Superscript,          0x2ea4993c,0x563c,0x49aa,0x93,0x72,0x0b,0xef,0x09,0xa9,0x25,0x5b);
-DEFINE_GUID(TSATTRID_Font_Style_Color,                0x857a7a37,0xb8af,0x4e9a,0x81,0xb4,0xac,0xf7,0x00,0xc8,0x41,0x1b);
-DEFINE_GUID(TSATTRID_Font_Style_BackgroundColor,      0xb50eaa4e,0x3091,0x4468,0x81,0xdb,0xd7,0x9e,0xa1,0x90,0xc7,0xc7);
-
-DEFINE_GUID(TSATTRID_Text,                            0x7edb8e68,0x81f9,0x449d,0xa1,0x5a,0x87,0xa8,0x38,0x8f,0xaa,0xc0);
-DEFINE_GUID(TSATTRID_Text_VerticalWriting,            0x6bba8195,0x046f,0x4ea9,0xb3,0x11,0x97,0xfd,0x66,0xc4,0x27,0x4b);
-DEFINE_GUID(TSATTRID_Text_RightToLeft,                0xca666e71,0x1b08,0x453d,0xbf,0xdd,0x28,0xe0,0x8c,0x8a,0xaf,0x7a);
-DEFINE_GUID(TSATTRID_Text_Orientation,                0x6bab707f,0x8785,0x4c39,0x8b,0x52,0x96,0xf8,0x78,0x30,0x3f,0xfb);
-DEFINE_GUID(TSATTRID_Text_Language,                   0xd8c04ef1,0x5753,0x4c25,0x88,0x87,0x85,0x44,0x3f,0xe5,0xf8,0x19);
-DEFINE_GUID(TSATTRID_Text_ReadOnly,                   0x85836617,0xde32,0x4afd,0xa5,0x0f,0xa2,0xdb,0x11,0x0e,0x6e,0x4d);
-DEFINE_GUID(TSATTRID_Text_EmbeddedObject,             0x7edb8e68,0x81f9,0x449d,0xa1,0x5a,0x87,0xa8,0x38,0x8f,0xaa,0xc0);
-DEFINE_GUID(TSATTRID_Text_Alignment,                  0x139941e6,0x1767,0x456d,0x93,0x8e,0x35,0xba,0x56,0x8b,0x5c,0xd4);
-DEFINE_GUID(TSATTRID_Text_Alignment_Left,             0x16ae95d3,0x6361,0x43a2,0x84,0x95,0xd0,0x0f,0x39,0x7f,0x16,0x93);
-DEFINE_GUID(TSATTRID_Text_Alignment_Right,            0xb36f0f98,0x1b9e,0x4360,0x86,0x16,0x03,0xfb,0x08,0xa7,0x84,0x56);
-DEFINE_GUID(TSATTRID_Text_Alignment_Center,           0xa4a95c16,0x53bf,0x4d55,0x8b,0x87,0x4b,0xdd,0x8d,0x42,0x75,0xfc);
-DEFINE_GUID(TSATTRID_Text_Alignment_Justify,          0xed350740,0xa0f7,0x42d3,0x8e,0xa8,0xf8,0x1b,0x64,0x88,0xfa,0xf0);
-DEFINE_GUID(TSATTRID_Text_Link,                       0x47cd9051,0x3722,0x4cd8,0xb7,0xc8,0x4e,0x17,0xca,0x17,0x59,0xf5);
-DEFINE_GUID(TSATTRID_Text_Hyphenation,                0xdadf4525,0x618e,0x49eb,0xb1,0xa8,0x3b,0x68,0xbd,0x76,0x48,0xe3);
-DEFINE_GUID(TSATTRID_Text_Para,                       0x5edc5822,0x99dc,0x4dd6,0xae,0xc3,0xb6,0x2b,0xaa,0x5b,0x2e,0x7c);
-DEFINE_GUID(TSATTRID_Text_Para_FirstLineIndent,       0x07c97a13,0x7472,0x4dd8,0x90,0xa9,0x91,0xe3,0xd7,0xe4,0xf2,0x9c);
-DEFINE_GUID(TSATTRID_Text_Para_LeftIndent,            0xfb2848e9,0x7471,0x41c9,0xb6,0xb3,0x8a,0x14,0x50,0xe0,0x18,0x97);
-DEFINE_GUID(TSATTRID_Text_Para_RightIndent,           0x2c7f26f9,0xa5e2,0x48da,0xb9,0x8a,0x52,0x0c,0xb1,0x65,0x13,0xbf);
-DEFINE_GUID(TSATTRID_Text_Para_SpaceAfter,            0x7b0a3f55,0x22dc,0x425f,0xa4,0x11,0x93,0xda,0x1d,0x8f,0x9b,0xaa);
-DEFINE_GUID(TSATTRID_Text_Para_SpaceBefore,           0x8df98589,0x194a,0x4601,0xb2,0x51,0x98,0x65,0xa3,0xe9,0x06,0xdd);
-DEFINE_GUID(TSATTRID_Text_Para_LineSpacing,           0x699b380d,0x7f8c,0x46d6,0xa7,0x3b,0xdf,0xe3,0xd1,0x53,0x8d,0xf3);
-DEFINE_GUID(TSATTRID_Text_Para_LineSpacing_Single,    0xed350740,0xa0f7,0x42d3,0x8e,0xa8,0xf8,0x1b,0x64,0x88,0xfa,0xf0);
-DEFINE_GUID(TSATTRID_Text_Para_LineSpacing_OnePtFive, 0x0428a021,0x0397,0x4b57,0x9a,0x17,0x07,0x95,0x99,0x4c,0xd3,0xc5);
-DEFINE_GUID(TSATTRID_Text_Para_LineSpacing_Double,    0x82fb1805,0xa6c4,0x4231,0xac,0x12,0x62,0x60,0xaf,0x2a,0xba,0x28);
-DEFINE_GUID(TSATTRID_Text_Para_LineSpacing_AtLeast,   0xadfedf31,0x2d44,0x4434,0xa5,0xff,0x7f,0x4c,0x49,0x90,0xa9,0x05);
-DEFINE_GUID(TSATTRID_Text_Para_LineSpacing_Exactly,   0x3d45ad40,0x23de,0x48d7,0xa6,0xb3,0x76,0x54,0x20,0xc6,0x20,0xcc);
-DEFINE_GUID(TSATTRID_Text_Para_LineSpacing_Multiple,  0x910f1e3c,0xd6d0,0x4f65,0x8a,0x3c,0x42,0xb4,0xb3,0x18,0x68,0xc5);
-
-DEFINE_GUID(TSATTRID_List,                  0x436d673b,0x26f1,0x4aee,0x9e,0x65,0x8f,0x83,0xa4,0xed,0x48,0x84);
-DEFINE_GUID(TSATTRID_List_LevelIndel,       0x7f7cc899,0x311f,0x487b,0xad,0x5d,0xe2,0xa4,0x59,0xe1,0x2d,0x42);
-DEFINE_GUID(TSATTRID_List_Type,             0xae3e665e,0x4bce,0x49e3,0xa0,0xfe,0x2d,0xb4,0x7d,0x3a,0x17,0xae);
-DEFINE_GUID(TSATTRID_List_Type_Bullet,      0xbccd77c5,0x4c4d,0x4ce2,0xb1,0x02,0x55,0x9f,0x3b,0x2b,0xfc,0xea);
-DEFINE_GUID(TSATTRID_List_Type_Arabic,      0x1338c5d6,0x98a3,0x4fa3,0x9b,0xd1,0x7a,0x60,0xee,0xf8,0xe9,0xe0);
-DEFINE_GUID(TSATTRID_List_Type_LowerLetter, 0x96372285,0xf3cf,0x491e,0xa9,0x25,0x38,0x32,0x34,0x7f,0xd2,0x37);
-DEFINE_GUID(TSATTRID_List_Type_UpperLetter, 0x7987b7cd,0xce52,0x428b,0x9b,0x95,0xa3,0x57,0xf6,0xf1,0x0c,0x45);
-DEFINE_GUID(TSATTRID_List_Type_LowerRoman,  0x90466262,0x3980,0x4b8e,0x93,0x68,0x91,0x8b,0xd1,0x21,0x8a,0x41);
-DEFINE_GUID(TSATTRID_List_Type_UpperRoman,  0x0f6ab552,0x4a80,0x467f,0xb2,0xf1,0x12,0x7e,0x2a,0xa3,0xba,0x9e);
-
-DEFINE_GUID(TSATTRID_App,                   0xa80f77df,0x4237,0x40e5,0x84,0x9c,0xb5,0xfa,0x51,0xc1,0x3a,0xc7);
-DEFINE_GUID(TSATTRID_App_IncorrectSpelling, 0xf42de43c,0xef12,0x430d,0x94,0x4c,0x9a,0x08,0x97,0x0a,0x25,0xd2);
-DEFINE_GUID(TSATTRID_App_IncorrectGrammar,  0xbd54e398,0xad03,0x4b74,0xb6,0xb3,0x5e,0xdb,0x19,0x99,0x63,0x88);
-
-#endif
-
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef _TSATTRS_H_
+#define _TSATTRS_H_
+
+DEFINE_GUID(TSATTRID_OTHERS, 0xb3c32af9,0x57d0,0x46a9,0xbc,0xa8,0xda,0xc2,0x38,0xa1,0x30,0x57);
+
+DEFINE_GUID(TSATTRID_Font,                           0x573ea825,0x749b,0x4f8a,0x9c,0xfd,0x21,0xc3,0x60,0x5c,0xa8,0x28);
+DEFINE_GUID(TSATTRID_Font_FaceName,                  0xb536aeb6,0x053b,0x4eb8,0xb6,0x5a,0x50,0xda,0x1e,0x81,0xe7,0x2e);
+DEFINE_GUID(TSATTRID_Font_SizePts,                   0xc8493302,0xa5e9,0x456d,0xaf,0x04,0x80,0x05,0xe4,0x13,0x0f,0x03);
+DEFINE_GUID(TSATTRID_Font_Style,                     0x68b2a77f,0x6b0e,0x4f28,0x81,0x77,0x57,0x1c,0x2f,0x3a,0x42,0xb1);
+DEFINE_GUID(TSATTRID_Font_Style_Bold,                0x48813a43,0x8a20,0x4940,0x8e,0x58,0x97,0x82,0x3f,0x7b,0x26,0x8a);
+DEFINE_GUID(TSATTRID_Font_Style_Italic,              0x8740682a,0xa765,0x48e1,0xac,0xfc,0xd2,0x22,0x22,0xb2,0xf8,0x10);
+DEFINE_GUID(TSATTRID_Font_Style_SmallCaps,           0xfacb6bc6,0x9100,0x4cc6,0xb9,0x69,0x11,0xee,0xa4,0x5a,0x86,0xb4);
+DEFINE_GUID(TSATTRID_Font_Style_Capitalize,          0x7d85a3ba,0xb4fd,0x43b3,0xbe,0xfc,0x6b,0x98,0x5c,0x84,0x31,0x41);
+DEFINE_GUID(TSATTRID_Font_Style_Uppercase,           0x33a300e8,0xe340,0x4937,0xb6,0x97,0x8f,0x23,0x40,0x45,0xcd,0x9a);
+DEFINE_GUID(TSATTRID_Font_Style_Lowercase,           0x76d8ccb5,0xca7b,0x4498,0x8e,0xe9,0xd5,0xc4,0xf6,0xf7,0x4c,0x60);
+DEFINE_GUID(TSATTRID_Font_Style_Animation,           0xdcf73d22,0xe029,0x47b7,0xbb,0x36,0xf2,0x63,0xa3,0xd0,0x04,0xcc);
+DEFINE_GUID(TSATTRID_Font_Style_Animation_LasVegasLights,     0xf40423d5,0x0f87,0x4f8f,0xba,0xda,0xe6,0xd6,0x0c,0x25,0xe1,0x52);
+DEFINE_GUID(TSATTRID_Font_Style_Animation_BlinkingBackground, 0x86e5b104,0x0104,0x4b10,0xb5,0x85,0x00,0xf2,0x52,0x75,0x22,0xb5);
+DEFINE_GUID(TSATTRID_Font_Style_Animation_SparkleText,        0x533aad20,0x962c,0x4e9f,0x8c,0x09,0xb4,0x2e,0xa4,0x74,0x97,0x11);
+DEFINE_GUID(TSATTRID_Font_Style_Animation_MarchingBlackAnts,  0x7644e067,0xf186,0x4902,0xbf,0xc6,0xec,0x81,0x5a,0xa2,0x0e,0x9d);
+DEFINE_GUID(TSATTRID_Font_Style_Animation_MarchingRedAnts,    0x78368dad,0x50fb,0x4c6f,0x84,0x0b,0xd4,0x86,0xbb,0x6c,0xf7,0x81);
+DEFINE_GUID(TSATTRID_Font_Style_Animation_Shimmer,    0x2ce31b58,0x5293,0x4c36,0x88,0x09,0xbf,0x8b,0xb5,0x1a,0x27,0xb3);
+DEFINE_GUID(TSATTRID_Font_Style_Animation_WipeDown,   0x5872e874,0x367b,0x4803,0xb1,0x60,0xc9,0x0f,0xf6,0x25,0x69,0xd0);
+DEFINE_GUID(TSATTRID_Font_Style_Animation_WipeRight,  0xb855cbe3,0x3d2c,0x4600,0xb1,0xe9,0xe1,0xc9,0xce,0x02,0xf8,0x42);
+DEFINE_GUID(TSATTRID_Font_Style_Emboss,               0xbd8ed742,0x349e,0x4e37,0x82,0xfb,0x43,0x79,0x79,0xcb,0x53,0xa7);
+DEFINE_GUID(TSATTRID_Font_Style_Engrave,              0x9c3371de,0x8332,0x4897,0xbe,0x5d,0x89,0x23,0x32,0x23,0x17,0x9a);
+DEFINE_GUID(TSATTRID_Font_Style_Hidden,               0xb1e28770,0x881c,0x475f,0x86,0x3f,0x88,0x7a,0x64,0x7b,0x10,0x90);
+DEFINE_GUID(TSATTRID_Font_Style_Kerning,              0xcc26e1b4,0x2f9a,0x47c8,0x8b,0xff,0xbf,0x1e,0xb7,0xcc,0xe0,0xdd);
+DEFINE_GUID(TSATTRID_Font_Style_Outlined,             0x10e6db31,0xdb0d,0x4ac6,0xa7,0xf5,0x9c,0x9c,0xff,0x6f,0x2a,0xb4);
+DEFINE_GUID(TSATTRID_Font_Style_Position,             0x15cd26ab,0xf2fb,0x4062,0xb5,0xa6,0x9a,0x49,0xe1,0xa5,0xcc,0x0b);
+DEFINE_GUID(TSATTRID_Font_Style_Protected,            0x1c557cb2,0x14cf,0x4554,0xa5,0x74,0xec,0xb2,0xf7,0xe7,0xef,0xd4);
+DEFINE_GUID(TSATTRID_Font_Style_Shadow,               0x5f686d2f,0xc6cd,0x4c56,0x8a,0x1a,0x99,0x4a,0x4b,0x97,0x66,0xbe);
+DEFINE_GUID(TSATTRID_Font_Style_Spacing,              0x98c1200d,0x8f06,0x409a,0x8e,0x49,0x6a,0x55,0x4b,0xf7,0xc1,0x53);
+DEFINE_GUID(TSATTRID_Font_Style_Weight,               0x12f3189c,0x8bb0,0x461b,0xb1,0xfa,0xea,0xf9,0x07,0x04,0x7f,0xe0);
+DEFINE_GUID(TSATTRID_Font_Style_Height,               0x7e937477,0x12e6,0x458b,0x92,0x6a,0x1f,0xa4,0x4e,0xe8,0xf3,0x91);
+DEFINE_GUID(TSATTRID_Font_Style_Underline,            0xc3c9c9f3,0x7902,0x444b,0x9a,0x7b,0x48,0xe7,0x0f,0x4b,0x50,0xf7);
+DEFINE_GUID(TSATTRID_Font_Style_Underline_Single,     0x1b6720e5,0x0f73,0x4951,0xa6,0xb3,0x6f,0x19,0xe4,0x3c,0x94,0x61);
+DEFINE_GUID(TSATTRID_Font_Style_Underline_Double,     0x74d24aa6,0x1db3,0x4c69,0xa1,0x76,0x31,0x12,0x0e,0x75,0x86,0xd5);
+DEFINE_GUID(TSATTRID_Font_Style_Strikethrough,        0x0c562193,0x2d08,0x4668,0x96,0x01,0xce,0xd4,0x13,0x09,0xd7,0xaf);
+DEFINE_GUID(TSATTRID_Font_Style_Strikethrough_Single, 0x75d736b6,0x3c8f,0x4b97,0xab,0x78,0x18,0x77,0xcb,0x99,0x0d,0x31);
+DEFINE_GUID(TSATTRID_Font_Style_Strikethrough_Double, 0x62489b31,0xa3e7,0x4f94,0xac,0x43,0xeb,0xaf,0x8f,0xcc,0x7a,0x9f);
+DEFINE_GUID(TSATTRID_Font_Style_Overline,             0xe3989f4a,0x992b,0x4301,0x8c,0xe1,0xa5,0xb7,0xc6,0xd1,0xf3,0xc8);
+DEFINE_GUID(TSATTRID_Font_Style_Overline_Single,      0x8440d94c,0x51ce,0x47b2,0x8d,0x4c,0x15,0x75,0x1e,0x5f,0x72,0x1b);
+DEFINE_GUID(TSATTRID_Font_Style_Overline_Double,      0xdc46063a,0xe115,0x46e3,0xbc,0xd8,0xca,0x67,0x72,0xaa,0x95,0xb4);
+DEFINE_GUID(TSATTRID_Font_Style_Blink,                0xbfb2c036,0x7acf,0x4532,0xb7,0x20,0xb4,0x16,0xdd,0x77,0x65,0xa8);
+DEFINE_GUID(TSATTRID_Font_Style_Subscript,            0x5774fb84,0x389b,0x43bc,0xa7,0x4b,0x15,0x68,0x34,0x7c,0xf0,0xf4);
+DEFINE_GUID(TSATTRID_Font_Style_Superscript,          0x2ea4993c,0x563c,0x49aa,0x93,0x72,0x0b,0xef,0x09,0xa9,0x25,0x5b);
+DEFINE_GUID(TSATTRID_Font_Style_Color,                0x857a7a37,0xb8af,0x4e9a,0x81,0xb4,0xac,0xf7,0x00,0xc8,0x41,0x1b);
+DEFINE_GUID(TSATTRID_Font_Style_BackgroundColor,      0xb50eaa4e,0x3091,0x4468,0x81,0xdb,0xd7,0x9e,0xa1,0x90,0xc7,0xc7);
+
+DEFINE_GUID(TSATTRID_Text,                            0x7edb8e68,0x81f9,0x449d,0xa1,0x5a,0x87,0xa8,0x38,0x8f,0xaa,0xc0);
+DEFINE_GUID(TSATTRID_Text_VerticalWriting,            0x6bba8195,0x046f,0x4ea9,0xb3,0x11,0x97,0xfd,0x66,0xc4,0x27,0x4b);
+DEFINE_GUID(TSATTRID_Text_RightToLeft,                0xca666e71,0x1b08,0x453d,0xbf,0xdd,0x28,0xe0,0x8c,0x8a,0xaf,0x7a);
+DEFINE_GUID(TSATTRID_Text_Orientation,                0x6bab707f,0x8785,0x4c39,0x8b,0x52,0x96,0xf8,0x78,0x30,0x3f,0xfb);
+DEFINE_GUID(TSATTRID_Text_Language,                   0xd8c04ef1,0x5753,0x4c25,0x88,0x87,0x85,0x44,0x3f,0xe5,0xf8,0x19);
+DEFINE_GUID(TSATTRID_Text_ReadOnly,                   0x85836617,0xde32,0x4afd,0xa5,0x0f,0xa2,0xdb,0x11,0x0e,0x6e,0x4d);
+DEFINE_GUID(TSATTRID_Text_EmbeddedObject,             0x7edb8e68,0x81f9,0x449d,0xa1,0x5a,0x87,0xa8,0x38,0x8f,0xaa,0xc0);
+DEFINE_GUID(TSATTRID_Text_Alignment,                  0x139941e6,0x1767,0x456d,0x93,0x8e,0x35,0xba,0x56,0x8b,0x5c,0xd4);
+DEFINE_GUID(TSATTRID_Text_Alignment_Left,             0x16ae95d3,0x6361,0x43a2,0x84,0x95,0xd0,0x0f,0x39,0x7f,0x16,0x93);
+DEFINE_GUID(TSATTRID_Text_Alignment_Right,            0xb36f0f98,0x1b9e,0x4360,0x86,0x16,0x03,0xfb,0x08,0xa7,0x84,0x56);
+DEFINE_GUID(TSATTRID_Text_Alignment_Center,           0xa4a95c16,0x53bf,0x4d55,0x8b,0x87,0x4b,0xdd,0x8d,0x42,0x75,0xfc);
+DEFINE_GUID(TSATTRID_Text_Alignment_Justify,          0xed350740,0xa0f7,0x42d3,0x8e,0xa8,0xf8,0x1b,0x64,0x88,0xfa,0xf0);
+DEFINE_GUID(TSATTRID_Text_Link,                       0x47cd9051,0x3722,0x4cd8,0xb7,0xc8,0x4e,0x17,0xca,0x17,0x59,0xf5);
+DEFINE_GUID(TSATTRID_Text_Hyphenation,                0xdadf4525,0x618e,0x49eb,0xb1,0xa8,0x3b,0x68,0xbd,0x76,0x48,0xe3);
+DEFINE_GUID(TSATTRID_Text_Para,                       0x5edc5822,0x99dc,0x4dd6,0xae,0xc3,0xb6,0x2b,0xaa,0x5b,0x2e,0x7c);
+DEFINE_GUID(TSATTRID_Text_Para_FirstLineIndent,       0x07c97a13,0x7472,0x4dd8,0x90,0xa9,0x91,0xe3,0xd7,0xe4,0xf2,0x9c);
+DEFINE_GUID(TSATTRID_Text_Para_LeftIndent,            0xfb2848e9,0x7471,0x41c9,0xb6,0xb3,0x8a,0x14,0x50,0xe0,0x18,0x97);
+DEFINE_GUID(TSATTRID_Text_Para_RightIndent,           0x2c7f26f9,0xa5e2,0x48da,0xb9,0x8a,0x52,0x0c,0xb1,0x65,0x13,0xbf);
+DEFINE_GUID(TSATTRID_Text_Para_SpaceAfter,            0x7b0a3f55,0x22dc,0x425f,0xa4,0x11,0x93,0xda,0x1d,0x8f,0x9b,0xaa);
+DEFINE_GUID(TSATTRID_Text_Para_SpaceBefore,           0x8df98589,0x194a,0x4601,0xb2,0x51,0x98,0x65,0xa3,0xe9,0x06,0xdd);
+DEFINE_GUID(TSATTRID_Text_Para_LineSpacing,           0x699b380d,0x7f8c,0x46d6,0xa7,0x3b,0xdf,0xe3,0xd1,0x53,0x8d,0xf3);
+DEFINE_GUID(TSATTRID_Text_Para_LineSpacing_Single,    0xed350740,0xa0f7,0x42d3,0x8e,0xa8,0xf8,0x1b,0x64,0x88,0xfa,0xf0);
+DEFINE_GUID(TSATTRID_Text_Para_LineSpacing_OnePtFive, 0x0428a021,0x0397,0x4b57,0x9a,0x17,0x07,0x95,0x99,0x4c,0xd3,0xc5);
+DEFINE_GUID(TSATTRID_Text_Para_LineSpacing_Double,    0x82fb1805,0xa6c4,0x4231,0xac,0x12,0x62,0x60,0xaf,0x2a,0xba,0x28);
+DEFINE_GUID(TSATTRID_Text_Para_LineSpacing_AtLeast,   0xadfedf31,0x2d44,0x4434,0xa5,0xff,0x7f,0x4c,0x49,0x90,0xa9,0x05);
+DEFINE_GUID(TSATTRID_Text_Para_LineSpacing_Exactly,   0x3d45ad40,0x23de,0x48d7,0xa6,0xb3,0x76,0x54,0x20,0xc6,0x20,0xcc);
+DEFINE_GUID(TSATTRID_Text_Para_LineSpacing_Multiple,  0x910f1e3c,0xd6d0,0x4f65,0x8a,0x3c,0x42,0xb4,0xb3,0x18,0x68,0xc5);
+
+DEFINE_GUID(TSATTRID_List,                  0x436d673b,0x26f1,0x4aee,0x9e,0x65,0x8f,0x83,0xa4,0xed,0x48,0x84);
+DEFINE_GUID(TSATTRID_List_LevelIndel,       0x7f7cc899,0x311f,0x487b,0xad,0x5d,0xe2,0xa4,0x59,0xe1,0x2d,0x42);
+DEFINE_GUID(TSATTRID_List_Type,             0xae3e665e,0x4bce,0x49e3,0xa0,0xfe,0x2d,0xb4,0x7d,0x3a,0x17,0xae);
+DEFINE_GUID(TSATTRID_List_Type_Bullet,      0xbccd77c5,0x4c4d,0x4ce2,0xb1,0x02,0x55,0x9f,0x3b,0x2b,0xfc,0xea);
+DEFINE_GUID(TSATTRID_List_Type_Arabic,      0x1338c5d6,0x98a3,0x4fa3,0x9b,0xd1,0x7a,0x60,0xee,0xf8,0xe9,0xe0);
+DEFINE_GUID(TSATTRID_List_Type_LowerLetter, 0x96372285,0xf3cf,0x491e,0xa9,0x25,0x38,0x32,0x34,0x7f,0xd2,0x37);
+DEFINE_GUID(TSATTRID_List_Type_UpperLetter, 0x7987b7cd,0xce52,0x428b,0x9b,0x95,0xa3,0x57,0xf6,0xf1,0x0c,0x45);
+DEFINE_GUID(TSATTRID_List_Type_LowerRoman,  0x90466262,0x3980,0x4b8e,0x93,0x68,0x91,0x8b,0xd1,0x21,0x8a,0x41);
+DEFINE_GUID(TSATTRID_List_Type_UpperRoman,  0x0f6ab552,0x4a80,0x467f,0xb2,0xf1,0x12,0x7e,0x2a,0xa3,0xba,0x9e);
+
+DEFINE_GUID(TSATTRID_App,                   0xa80f77df,0x4237,0x40e5,0x84,0x9c,0xb5,0xfa,0x51,0xc1,0x3a,0xc7);
+DEFINE_GUID(TSATTRID_App_IncorrectSpelling, 0xf42de43c,0xef12,0x430d,0x94,0x4c,0x9a,0x08,0x97,0x0a,0x25,0xd2);
+DEFINE_GUID(TSATTRID_App_IncorrectGrammar,  0xbd54e398,0xad03,0x4b74,0xb6,0xb3,0x5e,0xdb,0x19,0x99,0x63,0x88);
+
+#endif
+
diff --git a/x86_64-w64-mingw32/include/tuner.h b/x86_64-w64-mingw32/include/tuner.h
index c6efe1d..e29ccce 100644
--- a/x86_64-w64-mingw32/include/tuner.h
+++ b/x86_64-w64-mingw32/include/tuner.h
@@ -1,1184 +1,20119 @@
-/**
- * This file has no copyright assigned and is placed in the Public Domain.
- * This file is part of the mingw-w64 runtime package.
- * No warranty is given; refer to the file DISCLAIMER.PD within this package.
- */
-#ifndef __INC_TUNER__
-#define __INC_TUNER__
-#include <objbase.h>
-#include <comcat.h>
-#include <dshow.h>
-#include <bdatypes.h>
-#include <bdaiface.h>
+/*** Autogenerated by WIDL 1.6 from include/tuner.idl - Do not edit ***/
 
-#ifndef __IBDACreateTuneRequestEx_FWD_DEFINED__
-#define __IBDACreateTuneRequestEx_FWD_DEFINED__
-typedef struct IBDACreateTuneRequestEx IBDACreateTuneRequestEx;
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
 #endif
 
-#ifndef __ITuneRequest_FWD_DEFINED__
-#define __ITuneRequest_FWD_DEFINED__
-typedef struct ITuneRequest ITuneRequest;
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
 #endif
 
-#ifndef __IChannelIDTuneRequest_FWD_DEFINED__
-#define __IChannelIDTuneRequest_FWD_DEFINED__
-typedef struct IChannelIDTuneRequest IChannelIDTuneRequest;
+#ifndef __tuner_h__
+#define __tuner_h__
+
+/* Forward declarations */
+
+#ifndef __ITuningSpaces_FWD_DEFINED__
+#define __ITuningSpaces_FWD_DEFINED__
+typedef interface ITuningSpaces ITuningSpaces;
 #endif
 
-#ifndef __ILocator_FWD_DEFINED__
-#define __ILocator_FWD_DEFINED__
-typedef struct ILocator ILocator;
-#endif
-
-#ifndef __IDigitalLocator_FWD_DEFINED__
-#define __IDigitalLocator_FWD_DEFINED__
-typedef struct IDigitalLocator IDigitalLocator;
-#endif
-
-#ifndef __IDVBSLocator_FWD_DEFINED__
-#define __IDVBSLocator_FWD_DEFINED__
-typedef struct IDVBSLocator IDVBSLocator;
-#endif
-
-#ifndef __IDVBSLocator2_FWD_DEFINED__
-#define __IDVBSLocator2_FWD_DEFINED__
-typedef struct IDVBSLocator2 IDVBSLocator2;
-#endif
-
-#ifndef __IDVBTLocator_FWD_DEFINED__
-#define __IDVBTLocator_FWD_DEFINED__
-typedef struct IDVBTLocator IDVBTLocator;
-#endif
-
-#ifndef __IDVBTLocator_FWD_DEFINED__
-#define __IDVBTLocator_FWD_DEFINED__
-typedef struct IDVBTLocator2 IDVBTLocator2;
-#endif
-
-#ifndef __IComponents_FWD_DEFINED__
-#define __IComponents_FWD_DEFINED__
-typedef struct IComponents IComponents;
-#endif
-
-#ifndef __IEnumComponents_FWD_DEFINED__
-#define __IEnumComponents_FWD_DEFINED__
-typedef struct IEnumComponents IEnumComponents;
-#endif
-
-#ifndef __IComponent_FWD_DEFINED__
-#define __IComponent_FWD_DEFINED__
-typedef struct IComponent IComponent;
-#endif
-
-#ifndef __IMPEG2Component_FWD_DEFINED__
-#define __IMPEG2Component_FWD_DEFINED__
-typedef struct IMPEG2Component IMPEG2Component;
+#ifndef __ITuningSpaceContainer_FWD_DEFINED__
+#define __ITuningSpaceContainer_FWD_DEFINED__
+typedef interface ITuningSpaceContainer ITuningSpaceContainer;
 #endif
 
 #ifndef __ITuningSpace_FWD_DEFINED__
 #define __ITuningSpace_FWD_DEFINED__
-typedef struct ITuningSpace ITuningSpace;
+typedef interface ITuningSpace ITuningSpace;
 #endif
 
-#ifndef __IComponentTypes_FWD_DEFINED__
-#define __IComponentTypes_FWD_DEFINED__
-typedef struct IComponentTypes IComponentTypes;
+#ifndef __IEnumTuningSpaces_FWD_DEFINED__
+#define __IEnumTuningSpaces_FWD_DEFINED__
+typedef interface IEnumTuningSpaces IEnumTuningSpaces;
+#endif
+
+#ifndef __IDVBTuningSpace_FWD_DEFINED__
+#define __IDVBTuningSpace_FWD_DEFINED__
+typedef interface IDVBTuningSpace IDVBTuningSpace;
+#endif
+
+#ifndef __IDVBTuningSpace2_FWD_DEFINED__
+#define __IDVBTuningSpace2_FWD_DEFINED__
+typedef interface IDVBTuningSpace2 IDVBTuningSpace2;
+#endif
+
+#ifndef __IDVBSTuningSpace_FWD_DEFINED__
+#define __IDVBSTuningSpace_FWD_DEFINED__
+typedef interface IDVBSTuningSpace IDVBSTuningSpace;
+#endif
+
+#ifndef __IAuxInTuningSpace_FWD_DEFINED__
+#define __IAuxInTuningSpace_FWD_DEFINED__
+typedef interface IAuxInTuningSpace IAuxInTuningSpace;
+#endif
+
+#ifndef __IAuxInTuningSpace2_FWD_DEFINED__
+#define __IAuxInTuningSpace2_FWD_DEFINED__
+typedef interface IAuxInTuningSpace2 IAuxInTuningSpace2;
+#endif
+
+#ifndef __IAnalogTVTuningSpace_FWD_DEFINED__
+#define __IAnalogTVTuningSpace_FWD_DEFINED__
+typedef interface IAnalogTVTuningSpace IAnalogTVTuningSpace;
+#endif
+
+#ifndef __IATSCTuningSpace_FWD_DEFINED__
+#define __IATSCTuningSpace_FWD_DEFINED__
+typedef interface IATSCTuningSpace IATSCTuningSpace;
+#endif
+
+#ifndef __IDigitalCableTuningSpace_FWD_DEFINED__
+#define __IDigitalCableTuningSpace_FWD_DEFINED__
+typedef interface IDigitalCableTuningSpace IDigitalCableTuningSpace;
+#endif
+
+#ifndef __IAnalogRadioTuningSpace_FWD_DEFINED__
+#define __IAnalogRadioTuningSpace_FWD_DEFINED__
+typedef interface IAnalogRadioTuningSpace IAnalogRadioTuningSpace;
+#endif
+
+#ifndef __IAnalogRadioTuningSpace2_FWD_DEFINED__
+#define __IAnalogRadioTuningSpace2_FWD_DEFINED__
+typedef interface IAnalogRadioTuningSpace2 IAnalogRadioTuningSpace2;
+#endif
+
+#ifndef __ITuneRequest_FWD_DEFINED__
+#define __ITuneRequest_FWD_DEFINED__
+typedef interface ITuneRequest ITuneRequest;
+#endif
+
+#ifndef __IChannelIDTuneRequest_FWD_DEFINED__
+#define __IChannelIDTuneRequest_FWD_DEFINED__
+typedef interface IChannelIDTuneRequest IChannelIDTuneRequest;
+#endif
+
+#ifndef __IChannelTuneRequest_FWD_DEFINED__
+#define __IChannelTuneRequest_FWD_DEFINED__
+typedef interface IChannelTuneRequest IChannelTuneRequest;
+#endif
+
+#ifndef __IATSCChannelTuneRequest_FWD_DEFINED__
+#define __IATSCChannelTuneRequest_FWD_DEFINED__
+typedef interface IATSCChannelTuneRequest IATSCChannelTuneRequest;
+#endif
+
+#ifndef __IDigitalCableTuneRequest_FWD_DEFINED__
+#define __IDigitalCableTuneRequest_FWD_DEFINED__
+typedef interface IDigitalCableTuneRequest IDigitalCableTuneRequest;
+#endif
+
+#ifndef __IDVBTuneRequest_FWD_DEFINED__
+#define __IDVBTuneRequest_FWD_DEFINED__
+typedef interface IDVBTuneRequest IDVBTuneRequest;
+#endif
+
+#ifndef __IMPEG2TuneRequest_FWD_DEFINED__
+#define __IMPEG2TuneRequest_FWD_DEFINED__
+typedef interface IMPEG2TuneRequest IMPEG2TuneRequest;
+#endif
+
+#ifndef __IMPEG2TuneRequestFactory_FWD_DEFINED__
+#define __IMPEG2TuneRequestFactory_FWD_DEFINED__
+typedef interface IMPEG2TuneRequestFactory IMPEG2TuneRequestFactory;
+#endif
+
+#ifndef __IMPEG2TuneRequestSupport_FWD_DEFINED__
+#define __IMPEG2TuneRequestSupport_FWD_DEFINED__
+typedef interface IMPEG2TuneRequestSupport IMPEG2TuneRequestSupport;
+#endif
+
+#ifndef __ITunerCap_FWD_DEFINED__
+#define __ITunerCap_FWD_DEFINED__
+typedef interface ITunerCap ITunerCap;
+#endif
+
+#ifndef __ITunerCapEx_FWD_DEFINED__
+#define __ITunerCapEx_FWD_DEFINED__
+typedef interface ITunerCapEx ITunerCapEx;
+#endif
+
+#ifndef __ITuner_FWD_DEFINED__
+#define __ITuner_FWD_DEFINED__
+typedef interface ITuner ITuner;
+#endif
+
+#ifndef __IScanningTuner_FWD_DEFINED__
+#define __IScanningTuner_FWD_DEFINED__
+typedef interface IScanningTuner IScanningTuner;
+#endif
+
+#ifndef __IScanningTunerEx_FWD_DEFINED__
+#define __IScanningTunerEx_FWD_DEFINED__
+typedef interface IScanningTunerEx IScanningTunerEx;
 #endif
 
 #ifndef __IComponentType_FWD_DEFINED__
 #define __IComponentType_FWD_DEFINED__
-typedef struct IComponentType IComponentType;
+typedef interface IComponentType IComponentType;
+#endif
+
+#ifndef __ILanguageComponentType_FWD_DEFINED__
+#define __ILanguageComponentType_FWD_DEFINED__
+typedef interface ILanguageComponentType ILanguageComponentType;
+#endif
+
+#ifndef __IMPEG2ComponentType_FWD_DEFINED__
+#define __IMPEG2ComponentType_FWD_DEFINED__
+typedef interface IMPEG2ComponentType IMPEG2ComponentType;
+#endif
+
+#ifndef __IATSCComponentType_FWD_DEFINED__
+#define __IATSCComponentType_FWD_DEFINED__
+typedef interface IATSCComponentType IATSCComponentType;
 #endif
 
 #ifndef __IEnumComponentTypes_FWD_DEFINED__
 #define __IEnumComponentTypes_FWD_DEFINED__
-typedef struct IEnumComponentTypes IEnumComponentTypes;
+typedef interface IEnumComponentTypes IEnumComponentTypes;
 #endif
 
-#undef  INTERFACE
-#define INTERFACE IBDACreateTuneRequestEx
-DECLARE_INTERFACE_(IBDACreateTuneRequestEx,IUnknown)
-{
-    BEGIN_INTERFACE
-
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IBDACreateTuneRequestEx methods */
-    STDMETHOD_(HRESULT,CreateTuneRequestEx)(THIS_ REFCLSID TuneRequestIID,ITuneRequest **ppTuneRequest) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IBDACreateTuneRequestEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IBDACreateTuneRequestEx_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IBDACreateTuneRequestEx_Release(This) (This)->lpVtbl->Release(This)
-#define IBDACreateTuneRequestEx_CreateTuneRequestEx(This,TuneRequestIID,ppTuneRequest) (This)->lpVtbl->CreateTuneRequestEx(This,TuneRequestIID,ppTuneRequest)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE ITuneRequest
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
+#ifndef __IComponentTypes_FWD_DEFINED__
+#define __IComponentTypes_FWD_DEFINED__
+typedef interface IComponentTypes IComponentTypes;
 #endif
-DECLARE_INTERFACE_(ITuneRequest,IDispatch)
-{
-    BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IDispatch methods */
-    STDMETHOD_(HRESULT,GetTypeInfoCount)(THIS_ UINT *pctinfo) PURE;
-    STDMETHOD_(HRESULT,GetTypeInfo)(THIS_ UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) PURE;
-    STDMETHOD_(HRESULT,GetIDsOfNames)(THIS_ REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) PURE;
-    STDMETHOD_(HRESULT,Invoke)(THIS_ DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) PURE;
-
-    /* ITuneRequest methods */
-    STDMETHOD_(HRESULT,Clone)(THIS_ ITuneRequest **ppNewTuneRequest) PURE;
-    STDMETHOD_(HRESULT,get_Components)(THIS_ IComponents **ppComponents) PURE;
-    STDMETHOD_(HRESULT,get_Locator)(THIS_ ILocator **ppLocator) PURE;
-    STDMETHOD_(HRESULT,get_TuningSpace)(THIS_ ITuningSpace **ppTuningSpace) PURE;
-    STDMETHOD_(HRESULT,put_Locator)(THIS_ ILocator *pLocator) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define ITuneRequest_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define ITuneRequest_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define ITuneRequest_Release(This) (This)->lpVtbl->Release(This)
-#define ITuneRequest_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
-#define ITuneRequest_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
-#define ITuneRequest_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
-#define ITuneRequest_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
-#define ITuneRequest_Clone(This,ppNewTuneRequest) (This)->lpVtbl->Clone(This,ppNewTuneRequest)
-#define ITuneRequest_get_Components(This,ppComponents) (This)->lpVtbl->get_Components(This,ppComponents)
-#define ITuneRequest_get_Locator(This,ppLocator) (This)->lpVtbl->get_Locator(This,ppLocator)
-#define ITuneRequest_get_TuningSpace(This,ppTuningSpace) (This)->lpVtbl->get_TuningSpace(This,ppTuningSpace)
-#define ITuneRequest_put_Locator(This,pLocator) (This)->lpVtbl->put_Locator(This,pLocator)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IChannelIDTuneRequest
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
+#ifndef __IComponent_FWD_DEFINED__
+#define __IComponent_FWD_DEFINED__
+typedef interface IComponent IComponent;
 #endif
-DECLARE_INTERFACE_(IChannelIDTuneRequest,ITuneRequest)
-{
-    BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IChannelIDTuneRequest methods */
-    STDMETHOD_(HRESULT,put_ChannelID)(THIS_ BSTR ChannelID) PURE;
-    STDMETHOD_(HRESULT,get_ChannelID)(THIS_ BSTR *ChannelID) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IChannelIDTuneRequest_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IChannelIDTuneRequest_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IChannelIDTuneRequest_Release(This) (This)->lpVtbl->Release(This)
-#define IChannelIDTuneRequest_put_ChannelID(This,ChannelID) (This)->lpVtbl->put_ChannelID(This,ChannelID)
-#define IChannelIDTuneRequest_get_ChannelID(This,ChannelID) (This)->lpVtbl->get_ChannelID(This,ChannelID)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE ILocator
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
+#ifndef __IAnalogAudioComponentType_FWD_DEFINED__
+#define __IAnalogAudioComponentType_FWD_DEFINED__
+typedef interface IAnalogAudioComponentType IAnalogAudioComponentType;
 #endif
-DECLARE_INTERFACE_(ILocator,IDispatch)
-{
-    BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IDispatch methods */
-    STDMETHOD_(HRESULT,GetTypeInfoCount)(THIS_ UINT *pctinfo) PURE;
-    STDMETHOD_(HRESULT,GetTypeInfo)(THIS_ UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) PURE;
-    STDMETHOD_(HRESULT,GetIDsOfNames)(THIS_ REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) PURE;
-    STDMETHOD_(HRESULT,Invoke)(THIS_ DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) PURE;
-
-    /* ILocator methods */
-    STDMETHOD_(HRESULT,Clone)(THIS_ ILocator **ppNewLocator) PURE;
-    STDMETHOD_(HRESULT,get_CarrierFrequency)(THIS_ __LONG32 *pFrequency) PURE;
-    STDMETHOD_(HRESULT,get_InnerFEC)(THIS_ FECMethod *FEC) PURE;
-    STDMETHOD_(HRESULT,get_InnerFECRate)(THIS_ BinaryConvolutionCodeRate *FEC) PURE;
-    STDMETHOD_(HRESULT,get_Modulation)(THIS_ ModulationType *pModulation) PURE;
-    STDMETHOD_(HRESULT,get_OuterFEC)(THIS_ FECMethod *FEC) PURE;
-    STDMETHOD_(HRESULT,get_OuterFECRate)(THIS_ BinaryConvolutionCodeRate *FEC) PURE;
-    STDMETHOD_(HRESULT,get_SymbolRate)(THIS_ __LONG32 *Rate) PURE;
-    STDMETHOD_(HRESULT,put_CarrierFrequency)(THIS_ __LONG32 Frequency) PURE;
-    STDMETHOD_(HRESULT,put_InnerFEC)(THIS_ FECMethod FEC) PURE;
-    STDMETHOD_(HRESULT,put_InnerFECRate)(THIS_ BinaryConvolutionCodeRate FEC) PURE;
-    STDMETHOD_(HRESULT,put_Modulation)(THIS_ ModulationType Modulation) PURE;
-    STDMETHOD_(HRESULT,put_OuterFEC)(THIS_ FECMethod FEC) PURE;
-    STDMETHOD_(HRESULT,put_OuterFECRate)(THIS_ BinaryConvolutionCodeRate FEC) PURE;
-    STDMETHOD_(HRESULT,put_SymbolRate)(THIS_ __LONG32 Rate) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define ILocator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define ILocator_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define ILocator_Release(This) (This)->lpVtbl->Release(This)
-#define ILocator_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
-#define ILocator_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
-#define ILocator_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
-#define ILocator_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
-#define ILocator_Clone(This,ppNewLocator) (This)->lpVtbl->Clone(This,ppNewLocator)
-#define ILocator_get_CarrierFrequency(This,pFrequency) (This)->lpVtbl->get_CarrierFrequency(This,pFrequency)
-#define ILocator_get_InnerFEC(This,FEC) (This)->lpVtbl->get_InnerFEC(This,FEC)
-#define ILocator_get_InnerFECRate(This,FEC) (This)->lpVtbl->get_InnerFECRate(This,FEC)
-#define ILocator_get_Modulation(This,pModulation) (This)->lpVtbl->get_Modulation(This,pModulation)
-#define ILocator_get_OuterFEC(This,FEC) (This)->lpVtbl->get_OuterFEC(This,FEC)
-#define ILocator_get_OuterFECRate(This,FEC) (This)->lpVtbl->get_OuterFECRate(This,FEC)
-#define ILocator_get_SymbolRate(This,Rate) (This)->lpVtbl->get_SymbolRate(This,Rate)
-#define ILocator_put_CarrierFrequency(This,Frequency) (This)->lpVtbl->put_CarrierFrequency(This,Frequency)
-#define ILocator_put_InnerFEC(This,FEC) (This)->lpVtbl->put_InnerFEC(This,FEC)
-#define ILocator_put_InnerFECRate(This,FEC) (This)->lpVtbl->put_InnerFECRate(This,FEC)
-#define ILocator_put_Modulation(This,Modulation) (This)->lpVtbl->put_Modulation(This,Modulation)
-#define ILocator_put_OuterFEC(This,FEC) (This)->lpVtbl->put_OuterFEC(This,FEC)
-#define ILocator_put_OuterFECRate(This,FEC) (This)->lpVtbl->put_OuterFECRate(This,FEC)
-#define ILocator_put_SymbolRate(This,Rate) (This)->lpVtbl->put_SymbolRate(This,Rate)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IDigitalLocator
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
+#ifndef __IMPEG2Component_FWD_DEFINED__
+#define __IMPEG2Component_FWD_DEFINED__
+typedef interface IMPEG2Component IMPEG2Component;
 #endif
-DECLARE_INTERFACE_(IDigitalLocator,ILocator)
-{
-    BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IDispatch methods */
-    STDMETHOD_(HRESULT,GetTypeInfoCount)(THIS_ UINT *pctinfo) PURE;
-    STDMETHOD_(HRESULT,GetTypeInfo)(THIS_ UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) PURE;
-    STDMETHOD_(HRESULT,GetIDsOfNames)(THIS_ REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) PURE;
-    STDMETHOD_(HRESULT,Invoke)(THIS_ DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) PURE;
-
-    /* ILocator methods */
-    STDMETHOD_(HRESULT,Clone)(THIS_ ILocator **ppNewLocator) PURE;
-    STDMETHOD_(HRESULT,get_CarrierFrequency)(THIS_ __LONG32 *pFrequency) PURE;
-    STDMETHOD_(HRESULT,get_InnerFEC)(THIS_ FECMethod *FEC) PURE;
-    STDMETHOD_(HRESULT,get_InnerFECRate)(THIS_ BinaryConvolutionCodeRate *FEC) PURE;
-    STDMETHOD_(HRESULT,get_Modulation)(THIS_ ModulationType *pModulation) PURE;
-    STDMETHOD_(HRESULT,get_OuterFEC)(THIS_ FECMethod *FEC) PURE;
-    STDMETHOD_(HRESULT,get_OuterFECRate)(THIS_ BinaryConvolutionCodeRate *FEC) PURE;
-    STDMETHOD_(HRESULT,get_SymbolRate)(THIS_ __LONG32 *Rate) PURE;
-    STDMETHOD_(HRESULT,put_CarrierFrequency)(THIS_ __LONG32 Frequency) PURE;
-    STDMETHOD_(HRESULT,put_InnerFEC)(THIS_ FECMethod FEC) PURE;
-    STDMETHOD_(HRESULT,put_InnerFECRate)(THIS_ BinaryConvolutionCodeRate FEC) PURE;
-    STDMETHOD_(HRESULT,put_Modulation)(THIS_ ModulationType Modulation) PURE;
-    STDMETHOD_(HRESULT,put_OuterFEC)(THIS_ FECMethod FEC) PURE;
-    STDMETHOD_(HRESULT,put_OuterFECRate)(THIS_ BinaryConvolutionCodeRate FEC) PURE;
-    STDMETHOD_(HRESULT,put_SymbolRate)(THIS_ __LONG32 Rate) PURE;
-
-    /* IDigitalLocator methods */
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDigitalLocator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDigitalLocator_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDigitalLocator_Release(This) (This)->lpVtbl->Release(This)
-#define IDigitalLocator_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
-#define IDigitalLocator_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
-#define IDigitalLocator_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
-#define IDigitalLocator_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
-#define IDigitalLocator_Clone(This,ppNewLocator) (This)->lpVtbl->Clone(This,ppNewLocator)
-#define IDigitalLocator_get_CarrierFrequency(This,pFrequency) (This)->lpVtbl->get_CarrierFrequency(This,pFrequency)
-#define IDigitalLocator_get_InnerFEC(This,FEC) (This)->lpVtbl->get_InnerFEC(This,FEC)
-#define IDigitalLocator_get_InnerFECRate(This,FEC) (This)->lpVtbl->get_InnerFECRate(This,FEC)
-#define IDigitalLocator_get_Modulation(This,pModulation) (This)->lpVtbl->get_Modulation(This,pModulation)
-#define IDigitalLocator_get_OuterFEC(This,FEC) (This)->lpVtbl->get_OuterFEC(This,FEC)
-#define IDigitalLocator_get_OuterFECRate(This,FEC) (This)->lpVtbl->get_OuterFECRate(This,FEC)
-#define IDigitalLocator_get_SymbolRate(This,Rate) (This)->lpVtbl->get_SymbolRate(This,Rate)
-#define IDigitalLocator_put_CarrierFrequency(This,Frequency) (This)->lpVtbl->put_CarrierFrequency(This,Frequency)
-#define IDigitalLocator_put_InnerFEC(This,FEC) (This)->lpVtbl->put_InnerFEC(This,FEC)
-#define IDigitalLocator_put_InnerFECRate(This,FEC) (This)->lpVtbl->put_InnerFECRate(This,FEC)
-#define IDigitalLocator_put_Modulation(This,Modulation) (This)->lpVtbl->put_Modulation(This,Modulation)
-#define IDigitalLocator_put_OuterFEC(This,FEC) (This)->lpVtbl->put_OuterFEC(This,FEC)
-#define IDigitalLocator_put_OuterFECRate(This,FEC) (This)->lpVtbl->put_OuterFECRate(This,FEC)
-#define IDigitalLocator_put_SymbolRate(This,Rate) (This)->lpVtbl->put_SymbolRate(This,Rate)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IDVBSLocator
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
+#ifndef __IEnumComponents_FWD_DEFINED__
+#define __IEnumComponents_FWD_DEFINED__
+typedef interface IEnumComponents IEnumComponents;
 #endif
-DECLARE_INTERFACE_(IDVBSLocator,IDigitalLocator)
-{
-    BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IDispatch methods */
-    STDMETHOD_(HRESULT,GetTypeInfoCount)(THIS_ UINT *pctinfo) PURE;
-    STDMETHOD_(HRESULT,GetTypeInfo)(THIS_ UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) PURE;
-    STDMETHOD_(HRESULT,GetIDsOfNames)(THIS_ REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) PURE;
-    STDMETHOD_(HRESULT,Invoke)(THIS_ DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) PURE;
-
-    /* ILocator methods */
-    STDMETHOD_(HRESULT,Clone)(THIS_ ILocator **ppNewLocator) PURE;
-    STDMETHOD_(HRESULT,get_CarrierFrequency)(THIS_ __LONG32 *pFrequency) PURE;
-    STDMETHOD_(HRESULT,get_InnerFEC)(THIS_ FECMethod *FEC) PURE;
-    STDMETHOD_(HRESULT,get_InnerFECRate)(THIS_ BinaryConvolutionCodeRate *FEC) PURE;
-    STDMETHOD_(HRESULT,get_Modulation)(THIS_ ModulationType *pModulation) PURE;
-    STDMETHOD_(HRESULT,get_OuterFEC)(THIS_ FECMethod *FEC) PURE;
-    STDMETHOD_(HRESULT,get_OuterFECRate)(THIS_ BinaryConvolutionCodeRate *FEC) PURE;
-    STDMETHOD_(HRESULT,get_SymbolRate)(THIS_ __LONG32 *Rate) PURE;
-    STDMETHOD_(HRESULT,put_CarrierFrequency)(THIS_ __LONG32 Frequency) PURE;
-    STDMETHOD_(HRESULT,put_InnerFEC)(THIS_ FECMethod FEC) PURE;
-    STDMETHOD_(HRESULT,put_InnerFECRate)(THIS_ BinaryConvolutionCodeRate FEC) PURE;
-    STDMETHOD_(HRESULT,put_Modulation)(THIS_ ModulationType Modulation) PURE;
-    STDMETHOD_(HRESULT,put_OuterFEC)(THIS_ FECMethod FEC) PURE;
-    STDMETHOD_(HRESULT,put_OuterFECRate)(THIS_ BinaryConvolutionCodeRate FEC) PURE;
-    STDMETHOD_(HRESULT,put_SymbolRate)(THIS_ __LONG32 Rate) PURE;
-
-    /* IDigitalLocator methods */
-
-    /* IDVBSLocator methods */
-    STDMETHOD_(HRESULT,get_Azimuth)(THIS_ __LONG32 *pAzimuth) PURE;
-    STDMETHOD_(HRESULT,get_Elevation)(THIS_ __LONG32 *pElevation) PURE;
-    STDMETHOD_(HRESULT,get_OrbitalPosition)(THIS_ __LONG32 *plongitude) PURE;
-    STDMETHOD_(HRESULT,get_SignalPolarisation)(THIS_ Polarisation *pPolarisationVal) PURE;
-    STDMETHOD_(HRESULT,get_WestPosition)(THIS_ VARIANT_BOOL *pWestLongitude) PURE;
-    STDMETHOD_(HRESULT,put_Azimuth)(THIS_ __LONG32 Azimuth) PURE;
-    STDMETHOD_(HRESULT,put_Elevation)(THIS_ __LONG32 Elevation) PURE;
-    STDMETHOD_(HRESULT,put_OrbitalPosition)(THIS_ __LONG32 longitude) PURE;
-    STDMETHOD_(HRESULT,put_SignalPolarisation)(THIS_ Polarisation PolarisationVal) PURE;
-    STDMETHOD_(HRESULT,put_WestPosition)(THIS_ VARIANT_BOOL WestLongitude) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDVBSLocator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDVBSLocator_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDVBSLocator_Release(This) (This)->lpVtbl->Release(This)
-#define IDVBSLocator_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
-#define IDVBSLocator_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
-#define IDVBSLocator_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
-#define IDVBSLocator_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
-#define IDVBSLocator_Clone(This,ppNewLocator) (This)->lpVtbl->Clone(This,ppNewLocator)
-#define IDVBSLocator_get_CarrierFrequency(This,pFrequency) (This)->lpVtbl->get_CarrierFrequency(This,pFrequency)
-#define IDVBSLocator_get_InnerFEC(This,FEC) (This)->lpVtbl->get_InnerFEC(This,FEC)
-#define IDVBSLocator_get_InnerFECRate(This,FEC) (This)->lpVtbl->get_InnerFECRate(This,FEC)
-#define IDVBSLocator_get_Modulation(This,pModulation) (This)->lpVtbl->get_Modulation(This,pModulation)
-#define IDVBSLocator_get_OuterFEC(This,FEC) (This)->lpVtbl->get_OuterFEC(This,FEC)
-#define IDVBSLocator_get_OuterFECRate(This,FEC) (This)->lpVtbl->get_OuterFECRate(This,FEC)
-#define IDVBSLocator_get_SymbolRate(This,Rate) (This)->lpVtbl->get_SymbolRate(This,Rate)
-#define IDVBSLocator_put_CarrierFrequency(This,Frequency) (This)->lpVtbl->put_CarrierFrequency(This,Frequency)
-#define IDVBSLocator_put_InnerFEC(This,FEC) (This)->lpVtbl->put_InnerFEC(This,FEC)
-#define IDVBSLocator_put_InnerFECRate(This,FEC) (This)->lpVtbl->put_InnerFECRate(This,FEC)
-#define IDVBSLocator_put_Modulation(This,Modulation) (This)->lpVtbl->put_Modulation(This,Modulation)
-#define IDVBSLocator_put_OuterFEC(This,FEC) (This)->lpVtbl->put_OuterFEC(This,FEC)
-#define IDVBSLocator_put_OuterFECRate(This,FEC) (This)->lpVtbl->put_OuterFECRate(This,FEC)
-#define IDVBSLocator_put_SymbolRate(This,Rate) (This)->lpVtbl->put_SymbolRate(This,Rate)
-#define IDVBSLocator_get_Azimuth(This,pAzimuth) (This)->lpVtbl->get_Azimuth(This,pAzimuth)
-#define IDVBSLocator_get_Elevation(This,pElevation) (This)->lpVtbl->get_Elevation(This,pElevation)
-#define IDVBSLocator_get_OrbitalPosition(This,plongitude) (This)->lpVtbl->get_OrbitalPosition(This,plongitude)
-#define IDVBSLocator_get_SignalPolarisation(This,pPolarisationVal) (This)->lpVtbl->get_SignalPolarisation(This,pPolarisationVal)
-#define IDVBSLocator_get_WestPosition(This,pWestLongitude) (This)->lpVtbl->get_WestPosition(This,pWestLongitude)
-#define IDVBSLocator_put_Azimuth(This,Azimuth) (This)->lpVtbl->put_Azimuth(This,Azimuth)
-#define IDVBSLocator_put_Elevation(This,Elevation) (This)->lpVtbl->put_Elevation(This,Elevation)
-#define IDVBSLocator_put_OrbitalPosition(This,longitude) (This)->lpVtbl->put_OrbitalPosition(This,longitude)
-#define IDVBSLocator_put_SignalPolarisation(This,PolarisationVal) (This)->lpVtbl->put_SignalPolarisation(This,PolarisationVal)
-#define IDVBSLocator_put_WestPosition(This,WestLongitude) (This)->lpVtbl->put_WestPosition(This,WestLongitude)
-#endif /*COBJMACROS*/
-
-#if (_WIN32_WINNT >= 0x0601)
-
-#undef  INTERFACE
-#define INTERFACE IDVBSLocator2
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
+#ifndef __IComponents_FWD_DEFINED__
+#define __IComponents_FWD_DEFINED__
+typedef interface IComponents IComponents;
 #endif
-DECLARE_INTERFACE_(IDVBSLocator2,IDVBSLocator)
-{
-    BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IDispatch methods */
-    STDMETHOD_(HRESULT,GetTypeInfoCount)(THIS_ UINT *pctinfo) PURE;
-    STDMETHOD_(HRESULT,GetTypeInfo)(THIS_ UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) PURE;
-    STDMETHOD_(HRESULT,GetIDsOfNames)(THIS_ REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) PURE;
-    STDMETHOD_(HRESULT,Invoke)(THIS_ DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) PURE;
-
-    /* ILocator methods */
-    STDMETHOD_(HRESULT,Clone)(THIS_ ILocator **ppNewLocator) PURE;
-    STDMETHOD_(HRESULT,get_CarrierFrequency)(THIS_ __LONG32 *pFrequency) PURE;
-    STDMETHOD_(HRESULT,get_InnerFEC)(THIS_ FECMethod *FEC) PURE;
-    STDMETHOD_(HRESULT,get_InnerFECRate)(THIS_ BinaryConvolutionCodeRate *FEC) PURE;
-    STDMETHOD_(HRESULT,get_Modulation)(THIS_ ModulationType *pModulation) PURE;
-    STDMETHOD_(HRESULT,get_OuterFEC)(THIS_ FECMethod *FEC) PURE;
-    STDMETHOD_(HRESULT,get_OuterFECRate)(THIS_ BinaryConvolutionCodeRate *FEC) PURE;
-    STDMETHOD_(HRESULT,get_SymbolRate)(THIS_ __LONG32 *Rate) PURE;
-    STDMETHOD_(HRESULT,put_CarrierFrequency)(THIS_ __LONG32 Frequency) PURE;
-    STDMETHOD_(HRESULT,put_InnerFEC)(THIS_ FECMethod FEC) PURE;
-    STDMETHOD_(HRESULT,put_InnerFECRate)(THIS_ BinaryConvolutionCodeRate FEC) PURE;
-    STDMETHOD_(HRESULT,put_Modulation)(THIS_ ModulationType Modulation) PURE;
-    STDMETHOD_(HRESULT,put_OuterFEC)(THIS_ FECMethod FEC) PURE;
-    STDMETHOD_(HRESULT,put_OuterFECRate)(THIS_ BinaryConvolutionCodeRate FEC) PURE;
-    STDMETHOD_(HRESULT,put_SymbolRate)(THIS_ __LONG32 Rate) PURE;
-
-    /* IDigitalLocator methods */
-
-    /* IDVBSLocator methods */
-    STDMETHOD_(HRESULT,get_Azimuth)(THIS_ __LONG32 *pAzimuth) PURE;
-    STDMETHOD_(HRESULT,get_Elevation)(THIS_ __LONG32 *pElevation) PURE;
-    STDMETHOD_(HRESULT,get_OrbitalPosition)(THIS_ __LONG32 *plongitude) PURE;
-    STDMETHOD_(HRESULT,get_SignalPolarisation)(THIS_ Polarisation *pPolarisationVal) PURE;
-    STDMETHOD_(HRESULT,get_WestPosition)(THIS_ VARIANT_BOOL *pWestLongitude) PURE;
-    STDMETHOD_(HRESULT,put_Azimuth)(THIS_ __LONG32 Azimuth) PURE;
-    STDMETHOD_(HRESULT,put_Elevation)(THIS_ __LONG32 Elevation) PURE;
-    STDMETHOD_(HRESULT,put_OrbitalPosition)(THIS_ __LONG32 longitude) PURE;
-    STDMETHOD_(HRESULT,put_SignalPolarisation)(THIS_ Polarisation PolarisationVal) PURE;
-    STDMETHOD_(HRESULT,put_WestPosition)(THIS_ VARIANT_BOOL WestLongitude) PURE;
-
-    /* IDVBSLocator2 methods */
-    STDMETHOD_(HRESULT,put_DiseqLNBSource)(THIS_ LNB_Source DiseqLNBSourceVal) PURE;
-    STDMETHOD_(HRESULT,get_DiseqLNBSource)(THIS_ LNB_Source *DiseqLNBSourceVal) PURE;
-    STDMETHOD_(HRESULT,put_LocalLNBSwitchOverride)(THIS_ __LONG32 LocalLNBSwitchOverrideVal) PURE;
-    STDMETHOD_(HRESULT,get_LocalLNBSwitchOverride)(THIS_ __LONG32 *LocalLNBSwitchOverrideVal) PURE;
-    STDMETHOD_(HRESULT,put_LocalOscillatorOverrideHigh)(THIS_ __LONG32 LocalOscillatorOverrideHighVal) PURE;
-    STDMETHOD_(HRESULT,get_LocalOscillatorOverrideHigh)(THIS_ __LONG32 *LocalOscillatorOverrideHighVal) PURE;
-    STDMETHOD_(HRESULT,put_LocalOscillatorOverrideLow)(THIS_ __LONG32 LocalOscillatorOverrideLowVal) PURE;
-    STDMETHOD_(HRESULT,get_LocalOscillatorOverrideLow)(THIS_ __LONG32 *LocalOscillatorOverrideLowVal) PURE;
-    STDMETHOD_(HRESULT,put_LocalSpectralInversionOverride)(THIS_ SpectralInversion LocalSpectralInversionOverrideVal) PURE;
-    STDMETHOD_(HRESULT,get_LocalSpectralInversionOverride)(THIS_ SpectralInversion *LocalSpectralInversionOverrideVal) PURE;
-    STDMETHOD_(HRESULT,put_SignalPilot)(THIS_ Pilot PilotVal) PURE;
-    STDMETHOD_(HRESULT,get_SignalPilot)(THIS_ Pilot *PilotVal) PURE;
-    STDMETHOD_(HRESULT,put_SignalRollOff)(THIS_ RollOff RollOffVal) PURE;
-    STDMETHOD_(HRESULT,get_SignalRollOff)(THIS_ RollOff *RollOffVal) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDVBSLocator2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDVBSLocator2_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDVBSLocator2_Release(This) (This)->lpVtbl->Release(This)
-#define IDVBSLocator2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
-#define IDVBSLocator2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
-#define IDVBSLocator2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
-#define IDVBSLocator2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
-#define IDVBSLocator2_Clone(This,ppNewLocator) (This)->lpVtbl->Clone(This,ppNewLocator)
-#define IDVBSLocator2_get_CarrierFrequency(This,pFrequency) (This)->lpVtbl->get_CarrierFrequency(This,pFrequency)
-#define IDVBSLocator2_get_InnerFEC(This,FEC) (This)->lpVtbl->get_InnerFEC(This,FEC)
-#define IDVBSLocator2_get_InnerFECRate(This,FEC) (This)->lpVtbl->get_InnerFECRate(This,FEC)
-#define IDVBSLocator2_get_Modulation(This,pModulation) (This)->lpVtbl->get_Modulation(This,pModulation)
-#define IDVBSLocator2_get_OuterFEC(This,FEC) (This)->lpVtbl->get_OuterFEC(This,FEC)
-#define IDVBSLocator2_get_OuterFECRate(This,FEC) (This)->lpVtbl->get_OuterFECRate(This,FEC)
-#define IDVBSLocator2_get_SymbolRate(This,Rate) (This)->lpVtbl->get_SymbolRate(This,Rate)
-#define IDVBSLocator2_put_CarrierFrequency(This,Frequency) (This)->lpVtbl->put_CarrierFrequency(This,Frequency)
-#define IDVBSLocator2_put_InnerFEC(This,FEC) (This)->lpVtbl->put_InnerFEC(This,FEC)
-#define IDVBSLocator2_put_InnerFECRate(This,FEC) (This)->lpVtbl->put_InnerFECRate(This,FEC)
-#define IDVBSLocator2_put_Modulation(This,Modulation) (This)->lpVtbl->put_Modulation(This,Modulation)
-#define IDVBSLocator2_put_OuterFEC(This,FEC) (This)->lpVtbl->put_OuterFEC(This,FEC)
-#define IDVBSLocator2_put_OuterFECRate(This,FEC) (This)->lpVtbl->put_OuterFECRate(This,FEC)
-#define IDVBSLocator2_put_SymbolRate(This,Rate) (This)->lpVtbl->put_SymbolRate(This,Rate)
-#define IDVBSLocator2_get_Azimuth(This,pAzimuth) (This)->lpVtbl->get_Azimuth(This,pAzimuth)
-#define IDVBSLocator2_get_Elevation(This,pElevation) (This)->lpVtbl->get_Elevation(This,pElevation)
-#define IDVBSLocator2_get_OrbitalPosition(This,plongitude) (This)->lpVtbl->get_OrbitalPosition(This,plongitude)
-#define IDVBSLocator2_get_SignalPolarisation(This,pPolarisationVal) (This)->lpVtbl->get_SignalPolarisation(This,pPolarisationVal)
-#define IDVBSLocator2_get_WestPosition(This,pWestLongitude) (This)->lpVtbl->get_WestPosition(This,pWestLongitude)
-#define IDVBSLocator2_put_Azimuth(This,Azimuth) (This)->lpVtbl->put_Azimuth(This,Azimuth)
-#define IDVBSLocator2_put_Elevation(This,Elevation) (This)->lpVtbl->put_Elevation(This,Elevation)
-#define IDVBSLocator2_put_OrbitalPosition(This,longitude) (This)->lpVtbl->put_OrbitalPosition(This,longitude)
-#define IDVBSLocator2_put_SignalPolarisation(This,PolarisationVal) (This)->lpVtbl->put_SignalPolarisation(This,PolarisationVal)
-#define IDVBSLocator2_put_WestPosition(This,WestLongitude) (This)->lpVtbl->put_WestPosition(This,WestLongitude)
-#define IDVBSLocator2_put_DiseqLNBSource(This,DiseqLNBSourceVal) (This)->lpVtbl->put_DiseqLNBSource(This,DiseqLNBSourceVal)
-#define IDVBSLocator2_get_DiseqLNBSource(This,DiseqLNBSourceVal) (This)->lpVtbl->get_DiseqLNBSource(This,DiseqLNBSourceVal)
-#define IDVBSLocator2_put_LocalLNBSwitchOverride(This,LocalLNBSwitchOverrideVal) (This)->lpVtbl->put_LocalLNBSwitchOverride(This,LocalLNBSwitchOverrideVal)
-#define IDVBSLocator2_get_LocalLNBSwitchOverride(This,LocalLNBSwitchOverrideVal) (This)->lpVtbl->get_LocalLNBSwitchOverride(This,LocalLNBSwitchOverrideVal)
-#define IDVBSLocator2_put_LocalOscillatorOverrideHigh(This,LocalOscillatorOverrideHighVal) (This)->lpVtbl->put_LocalOscillatorOverrideHigh(This,LocalOscillatorOverrideHighVal)
-#define IDVBSLocator2_get_LocalOscillatorOverrideHigh(This,LocalOscillatorOverrideHighVal) (This)->lpVtbl->get_LocalOscillatorOverrideHigh(This,LocalOscillatorOverrideHighVal)
-#define IDVBSLocator2_put_LocalOscillatorOverrideLow(This,LocalOscillatorOverrideLowVal) (This)->lpVtbl->put_LocalOscillatorOverrideLow(This,LocalOscillatorOverrideLowVal)
-#define IDVBSLocator2_get_LocalOscillatorOverrideLow(This,LocalOscillatorOverrideLowVal) (This)->lpVtbl->get_LocalOscillatorOverrideLow(This,LocalOscillatorOverrideLowVal)
-#define IDVBSLocator2_put_LocalSpectralInversionOverride(This,LocalSpectralInversionOverrideVal) (This)->lpVtbl->put_LocalSpectralInversionOverride(This,LocalSpectralInversionOverrideVal)
-#define IDVBSLocator2_get_LocalSpectralInversionOverride(This,LocalSpectralInversionOverrideVal) (This)->lpVtbl->get_LocalSpectralInversionOverride(This,LocalSpectralInversionOverrideVal)
-#define IDVBSLocator2_put_SignalPilot(This,PilotVal) (This)->lpVtbl->put_SignalPilot(This,PilotVal)
-#define IDVBSLocator2_get_SignalPilot(This,PilotVal) (This)->lpVtbl->get_SignalPilot(This,PilotVal)
-#define IDVBSLocator2_put_SignalRollOff(This,RollOffVal) (This)->lpVtbl->put_SignalRollOff(This,RollOffVal)
-#define IDVBSLocator2_get_SignalRollOff(This,RollOffVal) (This)->lpVtbl->get_SignalRollOff(This,RollOffVal)
-#endif /*COBJMACROS*/
-
-#endif /*(_WIN32_WINNT >= 0x0601)*/
-
-#undef  INTERFACE
-#define INTERFACE IDVBTLocator
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
+#ifndef __IComponentsOld_FWD_DEFINED__
+#define __IComponentsOld_FWD_DEFINED__
+typedef interface IComponentsOld IComponentsOld;
 #endif
-DECLARE_INTERFACE_(IDVBTLocator,IDigitalLocator)
-{
-    BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IDispatch methods */
-    STDMETHOD_(HRESULT,GetTypeInfoCount)(THIS_ UINT *pctinfo) PURE;
-    STDMETHOD_(HRESULT,GetTypeInfo)(THIS_ UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) PURE;
-    STDMETHOD_(HRESULT,GetIDsOfNames)(THIS_ REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) PURE;
-    STDMETHOD_(HRESULT,Invoke)(THIS_ DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) PURE;
-
-    /* ILocator methods */
-    STDMETHOD_(HRESULT,Clone)(THIS_ ILocator **ppNewLocator) PURE;
-    STDMETHOD_(HRESULT,get_CarrierFrequency)(THIS_ __LONG32 *pFrequency) PURE;
-    STDMETHOD_(HRESULT,get_InnerFEC)(THIS_ FECMethod *FEC) PURE;
-    STDMETHOD_(HRESULT,get_InnerFECRate)(THIS_ BinaryConvolutionCodeRate *FEC) PURE;
-    STDMETHOD_(HRESULT,get_Modulation)(THIS_ ModulationType *pModulation) PURE;
-    STDMETHOD_(HRESULT,get_OuterFEC)(THIS_ FECMethod *FEC) PURE;
-    STDMETHOD_(HRESULT,get_OuterFECRate)(THIS_ BinaryConvolutionCodeRate *FEC) PURE;
-    STDMETHOD_(HRESULT,get_SymbolRate)(THIS_ __LONG32 *Rate) PURE;
-    STDMETHOD_(HRESULT,put_CarrierFrequency)(THIS_ __LONG32 Frequency) PURE;
-    STDMETHOD_(HRESULT,put_InnerFEC)(THIS_ FECMethod FEC) PURE;
-    STDMETHOD_(HRESULT,put_InnerFECRate)(THIS_ BinaryConvolutionCodeRate FEC) PURE;
-    STDMETHOD_(HRESULT,put_Modulation)(THIS_ ModulationType Modulation) PURE;
-    STDMETHOD_(HRESULT,put_OuterFEC)(THIS_ FECMethod FEC) PURE;
-    STDMETHOD_(HRESULT,put_OuterFECRate)(THIS_ BinaryConvolutionCodeRate FEC) PURE;
-    STDMETHOD_(HRESULT,put_SymbolRate)(THIS_ __LONG32 Rate) PURE;
-
-    /* IDigitalLocator methods */
-
-    /* IDVBTLocator methods */
-    STDMETHOD_(HRESULT,get_Bandwidth)(THIS_ __LONG32 *pBandWidthVal) PURE;
-    STDMETHOD_(HRESULT,get_Guard)(THIS_ GuardInterval *pGI) PURE;
-    STDMETHOD_(HRESULT,get_HAlpha)(THIS_ HierarchyAlpha *pAlpha) PURE;
-    STDMETHOD_(HRESULT,get_LPInnerFEC)(THIS_ FECMethod *pFEC) PURE;
-    STDMETHOD_(HRESULT,get_LPInnerFECRate)(THIS_ BinaryConvolutionCodeRate *pFEC) PURE;
-    STDMETHOD_(HRESULT,get_Mode)(THIS_ TransmissionMode *pmode) PURE;
-    STDMETHOD_(HRESULT,get_OtherFrequencyInUse)(THIS_ VARIANT_BOOL *pOtherFrequencyInUseVal) PURE;
-    STDMETHOD_(HRESULT,put_Bandwidth)(THIS_ __LONG32 BandwidthVal) PURE;
-    STDMETHOD_(HRESULT,put_Guard)(THIS_ GuardInterval GI) PURE;
-    STDMETHOD_(HRESULT,put_HAlpha)(THIS_ HierarchyAlpha Alpha) PURE;
-    STDMETHOD_(HRESULT,put_LPInnerFEC)(THIS_ FECMethod FEC) PURE;
-    STDMETHOD_(HRESULT,put_LPInnerFECRate)(THIS_ BinaryConvolutionCodeRate FEC) PURE;
-    STDMETHOD_(HRESULT,put_Mode)(THIS_ TransmissionMode mode) PURE;
-    STDMETHOD_(HRESULT,put_OtherFrequencyInUse)(THIS_ VARIANT_BOOL OtherFrequencyInUseVal) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDVBTLocator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDVBTLocator_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDVBTLocator_Release(This) (This)->lpVtbl->Release(This)
-#define IDVBTLocator_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
-#define IDVBTLocator_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
-#define IDVBTLocator_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
-#define IDVBTLocator_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
-#define IDVBTLocator_Clone(This,ppNewLocator) (This)->lpVtbl->Clone(This,ppNewLocator)
-#define IDVBTLocator_get_CarrierFrequency(This,pFrequency) (This)->lpVtbl->get_CarrierFrequency(This,pFrequency)
-#define IDVBTLocator_get_InnerFEC(This,FEC) (This)->lpVtbl->get_InnerFEC(This,FEC)
-#define IDVBTLocator_get_InnerFECRate(This,FEC) (This)->lpVtbl->get_InnerFECRate(This,FEC)
-#define IDVBTLocator_get_Modulation(This,pModulation) (This)->lpVtbl->get_Modulation(This,pModulation)
-#define IDVBTLocator_get_OuterFEC(This,FEC) (This)->lpVtbl->get_OuterFEC(This,FEC)
-#define IDVBTLocator_get_OuterFECRate(This,FEC) (This)->lpVtbl->get_OuterFECRate(This,FEC)
-#define IDVBTLocator_get_SymbolRate(This,Rate) (This)->lpVtbl->get_SymbolRate(This,Rate)
-#define IDVBTLocator_put_CarrierFrequency(This,Frequency) (This)->lpVtbl->put_CarrierFrequency(This,Frequency)
-#define IDVBTLocator_put_InnerFEC(This,FEC) (This)->lpVtbl->put_InnerFEC(This,FEC)
-#define IDVBTLocator_put_InnerFECRate(This,FEC) (This)->lpVtbl->put_InnerFECRate(This,FEC)
-#define IDVBTLocator_put_Modulation(This,Modulation) (This)->lpVtbl->put_Modulation(This,Modulation)
-#define IDVBTLocator_put_OuterFEC(This,FEC) (This)->lpVtbl->put_OuterFEC(This,FEC)
-#define IDVBTLocator_put_OuterFECRate(This,FEC) (This)->lpVtbl->put_OuterFECRate(This,FEC)
-#define IDVBTLocator_put_SymbolRate(This,Rate) (This)->lpVtbl->put_SymbolRate(This,Rate)
-#define IDVBTLocator_get_Bandwidth(This,pBandWidthVal) (This)->lpVtbl->get_Bandwidth(This,pBandWidthVal)
-#define IDVBTLocator_get_Guard(This,pGI) (This)->lpVtbl->get_Guard(This,pGI)
-#define IDVBTLocator_get_HAlpha(This,pAlpha) (This)->lpVtbl->get_HAlpha(This,pAlpha)
-#define IDVBTLocator_get_LPInnerFEC(This,pFEC) (This)->lpVtbl->get_LPInnerFEC(This,pFEC)
-#define IDVBTLocator_get_LPInnerFECRate(This,pFEC) (This)->lpVtbl->get_LPInnerFECRate(This,pFEC)
-#define IDVBTLocator_get_Mode(This,pmode) (This)->lpVtbl->get_Mode(This,pmode)
-#define IDVBTLocator_get_OtherFrequencyInUse(This,pOtherFrequencyInUseVal) (This)->lpVtbl->get_OtherFrequencyInUse(This,pOtherFrequencyInUseVal)
-#define IDVBTLocator_put_Bandwidth(This,BandwidthVal) (This)->lpVtbl->put_Bandwidth(This,BandwidthVal)
-#define IDVBTLocator_put_Guard(This,GI) (This)->lpVtbl->put_Guard(This,GI)
-#define IDVBTLocator_put_HAlpha(This,Alpha) (This)->lpVtbl->put_HAlpha(This,Alpha)
-#define IDVBTLocator_put_LPInnerFEC(This,FEC) (This)->lpVtbl->put_LPInnerFEC(This,FEC)
-#define IDVBTLocator_put_LPInnerFECRate(This,FEC) (This)->lpVtbl->put_LPInnerFECRate(This,FEC)
-#define IDVBTLocator_put_Mode(This,mode) (This)->lpVtbl->put_Mode(This,mode)
-#define IDVBTLocator_put_OtherFrequencyInUse(This,OtherFrequencyInUseVal) (This)->lpVtbl->put_OtherFrequencyInUse(This,OtherFrequencyInUseVal)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IDVBTLocator2
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
+#ifndef __ILocator_FWD_DEFINED__
+#define __ILocator_FWD_DEFINED__
+typedef interface ILocator ILocator;
 #endif
-DECLARE_INTERFACE_(IDVBTLocator2,IDVBTLocator)
-{
-    BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IDispatch methods */
-    STDMETHOD_(HRESULT,GetTypeInfoCount)(THIS_ UINT *pctinfo) PURE;
-    STDMETHOD_(HRESULT,GetTypeInfo)(THIS_ UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) PURE;
-    STDMETHOD_(HRESULT,GetIDsOfNames)(THIS_ REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) PURE;
-    STDMETHOD_(HRESULT,Invoke)(THIS_ DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) PURE;
-
-    /* ILocator methods */
-    STDMETHOD_(HRESULT,Clone)(THIS_ ILocator **ppNewLocator) PURE;
-    STDMETHOD_(HRESULT,get_CarrierFrequency)(THIS_ __LONG32 *pFrequency) PURE;
-    STDMETHOD_(HRESULT,get_InnerFEC)(THIS_ FECMethod *FEC) PURE;
-    STDMETHOD_(HRESULT,get_InnerFECRate)(THIS_ BinaryConvolutionCodeRate *FEC) PURE;
-    STDMETHOD_(HRESULT,get_Modulation)(THIS_ ModulationType *pModulation) PURE;
-    STDMETHOD_(HRESULT,get_OuterFEC)(THIS_ FECMethod *FEC) PURE;
-    STDMETHOD_(HRESULT,get_OuterFECRate)(THIS_ BinaryConvolutionCodeRate *FEC) PURE;
-    STDMETHOD_(HRESULT,get_SymbolRate)(THIS_ __LONG32 *Rate) PURE;
-    STDMETHOD_(HRESULT,put_CarrierFrequency)(THIS_ __LONG32 Frequency) PURE;
-    STDMETHOD_(HRESULT,put_InnerFEC)(THIS_ FECMethod FEC) PURE;
-    STDMETHOD_(HRESULT,put_InnerFECRate)(THIS_ BinaryConvolutionCodeRate FEC) PURE;
-    STDMETHOD_(HRESULT,put_Modulation)(THIS_ ModulationType Modulation) PURE;
-    STDMETHOD_(HRESULT,put_OuterFEC)(THIS_ FECMethod FEC) PURE;
-    STDMETHOD_(HRESULT,put_OuterFECRate)(THIS_ BinaryConvolutionCodeRate FEC) PURE;
-    STDMETHOD_(HRESULT,put_SymbolRate)(THIS_ __LONG32 Rate) PURE;
-
-    /* IDigitalLocator methods */
-
-    /* IDVBTLocator methods */
-    STDMETHOD_(HRESULT,get_Bandwidth)(THIS_ __LONG32 *pBandWidthVal) PURE;
-    STDMETHOD_(HRESULT,get_Guard)(THIS_ GuardInterval *pGI) PURE;
-    STDMETHOD_(HRESULT,get_HAlpha)(THIS_ HierarchyAlpha *pAlpha) PURE;
-    STDMETHOD_(HRESULT,get_LPInnerFEC)(THIS_ FECMethod *pFEC) PURE;
-    STDMETHOD_(HRESULT,get_LPInnerFECRate)(THIS_ BinaryConvolutionCodeRate *pFEC) PURE;
-    STDMETHOD_(HRESULT,get_Mode)(THIS_ TransmissionMode *pmode) PURE;
-    STDMETHOD_(HRESULT,get_OtherFrequencyInUse)(THIS_ VARIANT_BOOL *pOtherFrequencyInUseVal) PURE;
-    STDMETHOD_(HRESULT,put_Bandwidth)(THIS_ __LONG32 BandwidthVal) PURE;
-    STDMETHOD_(HRESULT,put_Guard)(THIS_ GuardInterval GI) PURE;
-    STDMETHOD_(HRESULT,put_HAlpha)(THIS_ HierarchyAlpha Alpha) PURE;
-    STDMETHOD_(HRESULT,put_LPInnerFEC)(THIS_ FECMethod FEC) PURE;
-    STDMETHOD_(HRESULT,put_LPInnerFECRate)(THIS_ BinaryConvolutionCodeRate FEC) PURE;
-    STDMETHOD_(HRESULT,put_Mode)(THIS_ TransmissionMode mode) PURE;
-    STDMETHOD_(HRESULT,put_OtherFrequencyInUse)(THIS_ VARIANT_BOOL OtherFrequencyInUseVal) PURE;
-
-    /* IDVBTLocator2 methods */
-    STDMETHOD_(HRESULT,put_PhysicalLayerPipeId)(THIS_ __LONG32 PhysicalLayerPipeIdVal) PURE;
-    STDMETHOD_(HRESULT,get_PhysicalLayerPipeId)(THIS_ __LONG32 *PhysicalLayerPipeIdVal) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDVBTLocator2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDVBTLocator2_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDVBTLocator2_Release(This) (This)->lpVtbl->Release(This)
-#define IDVBTLocator2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
-#define IDVBTLocator2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
-#define IDVBTLocator2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
-#define IDVBTLocator2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
-#define IDVBTLocator2_Clone(This,ppNewLocator) (This)->lpVtbl->Clone(This,ppNewLocator)
-#define IDVBTLocator2_get_CarrierFrequency(This,pFrequency) (This)->lpVtbl->get_CarrierFrequency(This,pFrequency)
-#define IDVBTLocator2_get_InnerFEC(This,FEC) (This)->lpVtbl->get_InnerFEC(This,FEC)
-#define IDVBTLocator2_get_InnerFECRate(This,FEC) (This)->lpVtbl->get_InnerFECRate(This,FEC)
-#define IDVBTLocator2_get_Modulation(This,pModulation) (This)->lpVtbl->get_Modulation(This,pModulation)
-#define IDVBTLocator2_get_OuterFEC(This,FEC) (This)->lpVtbl->get_OuterFEC(This,FEC)
-#define IDVBTLocator2_get_OuterFECRate(This,FEC) (This)->lpVtbl->get_OuterFECRate(This,FEC)
-#define IDVBTLocator2_get_SymbolRate(This,Rate) (This)->lpVtbl->get_SymbolRate(This,Rate)
-#define IDVBTLocator2_put_CarrierFrequency(This,Frequency) (This)->lpVtbl->put_CarrierFrequency(This,Frequency)
-#define IDVBTLocator2_put_InnerFEC(This,FEC) (This)->lpVtbl->put_InnerFEC(This,FEC)
-#define IDVBTLocator2_put_InnerFECRate(This,FEC) (This)->lpVtbl->put_InnerFECRate(This,FEC)
-#define IDVBTLocator2_put_Modulation(This,Modulation) (This)->lpVtbl->put_Modulation(This,Modulation)
-#define IDVBTLocator2_put_OuterFEC(This,FEC) (This)->lpVtbl->put_OuterFEC(This,FEC)
-#define IDVBTLocator2_put_OuterFECRate(This,FEC) (This)->lpVtbl->put_OuterFECRate(This,FEC)
-#define IDVBTLocator2_put_SymbolRate(This,Rate) (This)->lpVtbl->put_SymbolRate(This,Rate)
-#define IDVBTLocator2_get_Bandwidth(This,pBandWidthVal) (This)->lpVtbl->get_Bandwidth(This,pBandWidthVal)
-#define IDVBTLocator2_get_Guard(This,pGI) (This)->lpVtbl->get_Guard(This,pGI)
-#define IDVBTLocator2_get_HAlpha(This,pAlpha) (This)->lpVtbl->get_HAlpha(This,pAlpha)
-#define IDVBTLocator2_get_LPInnerFEC(This,pFEC) (This)->lpVtbl->get_LPInnerFEC(This,pFEC)
-#define IDVBTLocator2_get_LPInnerFECRate(This,pFEC) (This)->lpVtbl->get_LPInnerFECRate(This,pFEC)
-#define IDVBTLocator2_get_Mode(This,pmode) (This)->lpVtbl->get_Mode(This,pmode)
-#define IDVBTLocator2_get_OtherFrequencyInUse(This,pOtherFrequencyInUseVal) (This)->lpVtbl->get_OtherFrequencyInUse(This,pOtherFrequencyInUseVal)
-#define IDVBTLocator2_put_Bandwidth(This,BandwidthVal) (This)->lpVtbl->put_Bandwidth(This,BandwidthVal)
-#define IDVBTLocator2_put_Guard(This,GI) (This)->lpVtbl->put_Guard(This,GI)
-#define IDVBTLocator2_put_HAlpha(This,Alpha) (This)->lpVtbl->put_HAlpha(This,Alpha)
-#define IDVBTLocator2_put_LPInnerFEC(This,FEC) (This)->lpVtbl->put_LPInnerFEC(This,FEC)
-#define IDVBTLocator2_put_LPInnerFECRate(This,FEC) (This)->lpVtbl->put_LPInnerFECRate(This,FEC)
-#define IDVBTLocator2_put_Mode(This,mode) (This)->lpVtbl->put_Mode(This,mode)
-#define IDVBTLocator2_put_OtherFrequencyInUse(This,OtherFrequencyInUseVal) (This)->lpVtbl->put_OtherFrequencyInUse(This,OtherFrequencyInUseVal)
-#define IDVBTLocator2_put_PhysicalLayerPipeId(This,PhysicalLayerPipeIdVal) (This)->lpVtbl->put_PhysicalLayerPipeId(This,PhysicalLayerPipeIdVal)
-#define IDVBTLocator2_get_PhysicalLayerPipeId(This,PhysicalLayerPipeIdVal) (This)->lpVtbl->get_PhysicalLayerPipeId(This,PhysicalLayerPipeIdVal)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IComponents
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
+#ifndef __IAnalogLocator_FWD_DEFINED__
+#define __IAnalogLocator_FWD_DEFINED__
+typedef interface IAnalogLocator IAnalogLocator;
 #endif
-DECLARE_INTERFACE_(IComponents,IDispatch)
-{
-    BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IDispatch methods */
-    STDMETHOD_(HRESULT,GetTypeInfoCount)(THIS_ UINT *pctinfo) PURE;
-    STDMETHOD_(HRESULT,GetTypeInfo)(THIS_ UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) PURE;
-    STDMETHOD_(HRESULT,GetIDsOfNames)(THIS_ REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) PURE;
-    STDMETHOD_(HRESULT,Invoke)(THIS_ DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) PURE;
-
-    /* IComponents methods */
-    STDMETHOD_(HRESULT,Add)(THIS_ IComponent *pComponent,VARIANT *pNewIndex) PURE;
-    STDMETHOD_(HRESULT,Clone)(THIS_ IComponents **ppNewList) PURE;
-    STDMETHOD_(HRESULT,EnumComponents)(THIS_ IEnumComponents **ppNewEnum) PURE;
-    STDMETHOD_(HRESULT,get__NewEnum)(THIS_ IEnumVARIANT **ppNewEnum) PURE;
-    STDMETHOD_(HRESULT,get_Count)(THIS_ __LONG32 *pCount) PURE;
-    STDMETHOD_(HRESULT,get_Item)(THIS_ VARIANT Index,IComponent **ppComponent) PURE;
-    STDMETHOD_(HRESULT,put_Item)(THIS_ VARIANT Index,IComponentType *pComponentType) PURE;
-    STDMETHOD_(HRESULT,Remove)(THIS_ VARIANT Index) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IComponents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IComponents_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IComponents_Release(This) (This)->lpVtbl->Release(This)
-#define IComponents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
-#define IComponents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
-#define IComponents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
-#define IComponents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
-#define IComponents_Clone(This,ppNewList) (This)->lpVtbl->Clone(This,ppNewList)
-#define IComponents_EnumComponents(This,ppNewEnum) (This)->lpVtbl->EnumComponents(This,ppNewEnum)
-#define IComponents_get__NewEnum(This,ppNewEnum) (This)->lpVtbl->get__NewEnum(This,ppNewEnum)
-#define IComponents_get_Count(This,pCount) (This)->lpVtbl->get_Count(This,pCount)
-#define IComponents_get_Item(This,Index,ppComponent) (This)->lpVtbl->get_Item(This,Index,ppComponent)
-#define IComponents_put_Item(This,Index,pComponentType) (This)->lpVtbl->put_Item(This,Index,pComponentType)
-#define IComponents_Remove(This,Index) (This)->lpVtbl->Remove(This,Index)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IEnumComponents
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
+#ifndef __IDigitalLocator_FWD_DEFINED__
+#define __IDigitalLocator_FWD_DEFINED__
+typedef interface IDigitalLocator IDigitalLocator;
 #endif
-DECLARE_INTERFACE_(IEnumComponents,IUnknown)
-{
-    BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IEnumComponents methods */
-    STDMETHOD_(HRESULT,Clone)(THIS_ IEnumComponents **ppEnum) PURE;
-    STDMETHOD_(HRESULT,Next)(THIS_ ULONG celt,IComponent **pprgelt,ULONG *pceltFetched) PURE;
-    STDMETHOD_(HRESULT,Reset)(THIS) PURE;
-    STDMETHOD_(HRESULT,Skip)(THIS_ ULONG celt) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IEnumComponents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IEnumComponents_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IEnumComponents_Release(This) (This)->lpVtbl->Release(This)
-#define IEnumComponents_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)
-#define IEnumComponents_Next(This,celt,pprgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,pprgelt,pceltFetched)
-#define IEnumComponents_Reset() (This)->lpVtbl->Reset(This)
-#define IEnumComponents_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IComponent
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
+#ifndef __IATSCLocator_FWD_DEFINED__
+#define __IATSCLocator_FWD_DEFINED__
+typedef interface IATSCLocator IATSCLocator;
 #endif
-DECLARE_INTERFACE_(IComponent,IDispatch)
-{
-    BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IDispatch methods */
-    STDMETHOD_(HRESULT,GetTypeInfoCount)(THIS_ UINT *pctinfo) PURE;
-    STDMETHOD_(HRESULT,GetTypeInfo)(THIS_ UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) PURE;
-    STDMETHOD_(HRESULT,GetIDsOfNames)(THIS_ REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) PURE;
-    STDMETHOD_(HRESULT,Invoke)(THIS_ DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) PURE;
-
-    /* IComponent methods */
-    STDMETHOD_(HRESULT,Clone)(THIS_ IComponent **ppNewComponent) PURE;
-    STDMETHOD_(HRESULT,get_DescLangID)(THIS_ __LONG32 *pLangID) PURE;
-    STDMETHOD_(HRESULT,get_Description)(THIS_ BSTR *pDescription) PURE;
-    STDMETHOD_(HRESULT,get_Status)(THIS_ ComponentStatus *pStatus) PURE;
-    STDMETHOD_(HRESULT,get_Type)(THIS_ IComponentType **ppCT) PURE;
-    STDMETHOD_(HRESULT,put_DescLangID)(THIS_ __LONG32 LangID) PURE;
-    STDMETHOD_(HRESULT,put_Description)(THIS_ BSTR Description) PURE;
-    STDMETHOD_(HRESULT,put_Status)(THIS_ ComponentStatus Status) PURE;
-    STDMETHOD_(HRESULT,put_Type)(THIS_ IComponentType *pCT) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IComponent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IComponent_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IComponent_Release(This) (This)->lpVtbl->Release(This)
-#define IComponent_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
-#define IComponent_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
-#define IComponent_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
-#define IComponent_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
-#define IComponent_Clone(This,ppNewComponent) (This)->lpVtbl->Clone(This,ppNewComponent)
-#define IComponent_get_DescLangID(This,pLangID) (This)->lpVtbl->get_DescLangID(This,pLangID)
-#define IComponent_get_Description(This,pDescription) (This)->lpVtbl->get_Description(This,pDescription)
-#define IComponent_get_Status(This,pStatus) (This)->lpVtbl->get_Status(This,pStatus)
-#define IComponent_get_Type(This,ppCT) (This)->lpVtbl->get_Type(This,ppCT)
-#define IComponent_put_DescLangID(This,LangID) (This)->lpVtbl->put_DescLangID(This,LangID)
-#define IComponent_put_Description(This,Description) (This)->lpVtbl->put_Description(This,Description)
-#define IComponent_put_Status(This,Status) (This)->lpVtbl->put_Status(This,Status)
-#define IComponent_put_Type(This,pCT) (This)->lpVtbl->put_Type(This,pCT)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IMPEG2Component
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
+#ifndef __IATSCLocator2_FWD_DEFINED__
+#define __IATSCLocator2_FWD_DEFINED__
+typedef interface IATSCLocator2 IATSCLocator2;
 #endif
-DECLARE_INTERFACE_(IMPEG2Component,IComponent)
-{
-    BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IDispatch methods */
-    STDMETHOD_(HRESULT,GetTypeInfoCount)(THIS_ UINT *pctinfo) PURE;
-    STDMETHOD_(HRESULT,GetTypeInfo)(THIS_ UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) PURE;
-    STDMETHOD_(HRESULT,GetIDsOfNames)(THIS_ REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) PURE;
-    STDMETHOD_(HRESULT,Invoke)(THIS_ DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) PURE;
-
-    /* IComponent methods */
-    STDMETHOD_(HRESULT,Clone)(THIS_ IComponent **ppNewComponent) PURE;
-    STDMETHOD_(HRESULT,get_DescLangID)(THIS_ __LONG32 *pLangID) PURE;
-    STDMETHOD_(HRESULT,get_Description)(THIS_ BSTR *pDescription) PURE;
-    STDMETHOD_(HRESULT,get_Status)(THIS_ ComponentStatus *pStatus) PURE;
-    STDMETHOD_(HRESULT,get_Type)(THIS_ IComponentType **ppCT) PURE;
-    STDMETHOD_(HRESULT,put_DescLangID)(THIS_ __LONG32 LangID) PURE;
-    STDMETHOD_(HRESULT,put_Description)(THIS_ BSTR Description) PURE;
-    STDMETHOD_(HRESULT,put_Status)(THIS_ ComponentStatus Status) PURE;
-    STDMETHOD_(HRESULT,put_Type)(THIS_ IComponentType *pCT) PURE;
-
-    /* IMPEG2Component methods */
-    STDMETHOD_(HRESULT,get_PID)(THIS_ __LONG32 *pPID) PURE;
-    STDMETHOD_(HRESULT,get_ProgramNumber)(THIS_ __LONG32 *pProgramNumber) PURE;
-    STDMETHOD_(HRESULT,put_PCRPID)(THIS_ __LONG32 PCRPID) PURE;
-    STDMETHOD_(HRESULT,put_PID)(THIS_ __LONG32 PID) PURE;
-    STDMETHOD_(HRESULT,put_ProgramNumber)(THIS_ __LONG32 ProgramNumber) PURE;
-    STDMETHOD_(HRESULT,get_PCRPID)(THIS_ __LONG32 *pPCRPID) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IMPEG2Component_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IMPEG2Component_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IMPEG2Component_Release(This) (This)->lpVtbl->Release(This)
-#define IMPEG2Component_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
-#define IMPEG2Component_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
-#define IMPEG2Component_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
-#define IMPEG2Component_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
-#define IMPEG2Component_Clone(This,ppNewComponent) (This)->lpVtbl->Clone(This,ppNewComponent)
-#define IMPEG2Component_get_DescLangID(This,pLangID) (This)->lpVtbl->get_DescLangID(This,pLangID)
-#define IMPEG2Component_get_Description(This,pDescription) (This)->lpVtbl->get_Description(This,pDescription)
-#define IMPEG2Component_get_Status(This,pStatus) (This)->lpVtbl->get_Status(This,pStatus)
-#define IMPEG2Component_get_Type(This,ppCT) (This)->lpVtbl->get_Type(This,ppCT)
-#define IMPEG2Component_put_DescLangID(This,LangID) (This)->lpVtbl->put_DescLangID(This,LangID)
-#define IMPEG2Component_put_Description(This,Description) (This)->lpVtbl->put_Description(This,Description)
-#define IMPEG2Component_put_Status(This,Status) (This)->lpVtbl->put_Status(This,Status)
-#define IMPEG2Component_put_Type(This,pCT) (This)->lpVtbl->put_Type(This,pCT)
-#define IMPEG2Component_get_PID(This,pPID) (This)->lpVtbl->get_PID(This,pPID)
-#define IMPEG2Component_get_ProgramNumber(This,pProgramNumber) (This)->lpVtbl->get_ProgramNumber(This,pProgramNumber)
-#define IMPEG2Component_put_PCRPID(This,PCRPID) (This)->lpVtbl->put_PCRPID(This,PCRPID)
-#define IMPEG2Component_put_PID(This,PID) (This)->lpVtbl->put_PID(This,PID)
-#define IMPEG2Component_put_ProgramNumber(This,ProgramNumber) (This)->lpVtbl->put_ProgramNumber(This,ProgramNumber)
-#define IMPEG2Component_get_PCRPID(This,pPCRPID) (This)->lpVtbl->get_PCRPID(This,pPCRPID)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE ITuningSpace
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
+#ifndef __IDigitalCableLocator_FWD_DEFINED__
+#define __IDigitalCableLocator_FWD_DEFINED__
+typedef interface IDigitalCableLocator IDigitalCableLocator;
 #endif
-DECLARE_INTERFACE_(ITuningSpace,IDispatch)
+
+#ifndef __IDVBTLocator_FWD_DEFINED__
+#define __IDVBTLocator_FWD_DEFINED__
+typedef interface IDVBTLocator IDVBTLocator;
+#endif
+
+#ifndef __IDVBTLocator2_FWD_DEFINED__
+#define __IDVBTLocator2_FWD_DEFINED__
+typedef interface IDVBTLocator2 IDVBTLocator2;
+#endif
+
+#ifndef __IDVBSLocator_FWD_DEFINED__
+#define __IDVBSLocator_FWD_DEFINED__
+typedef interface IDVBSLocator IDVBSLocator;
+#endif
+
+#ifndef __IDVBSLocator2_FWD_DEFINED__
+#define __IDVBSLocator2_FWD_DEFINED__
+typedef interface IDVBSLocator2 IDVBSLocator2;
+#endif
+
+#ifndef __IDVBCLocator_FWD_DEFINED__
+#define __IDVBCLocator_FWD_DEFINED__
+typedef interface IDVBCLocator IDVBCLocator;
+#endif
+
+#ifndef __IISDBSLocator_FWD_DEFINED__
+#define __IISDBSLocator_FWD_DEFINED__
+typedef interface IISDBSLocator IISDBSLocator;
+#endif
+
+#ifndef __IESEvent_FWD_DEFINED__
+#define __IESEvent_FWD_DEFINED__
+typedef interface IESEvent IESEvent;
+#endif
+
+#ifndef __IESOpenMmiEvent_FWD_DEFINED__
+#define __IESOpenMmiEvent_FWD_DEFINED__
+typedef interface IESOpenMmiEvent IESOpenMmiEvent;
+#endif
+
+#ifndef __IESCloseMmiEvent_FWD_DEFINED__
+#define __IESCloseMmiEvent_FWD_DEFINED__
+typedef interface IESCloseMmiEvent IESCloseMmiEvent;
+#endif
+
+#ifndef __IESValueUpdatedEvent_FWD_DEFINED__
+#define __IESValueUpdatedEvent_FWD_DEFINED__
+typedef interface IESValueUpdatedEvent IESValueUpdatedEvent;
+#endif
+
+#ifndef __IESRequestTunerEvent_FWD_DEFINED__
+#define __IESRequestTunerEvent_FWD_DEFINED__
+typedef interface IESRequestTunerEvent IESRequestTunerEvent;
+#endif
+
+#ifndef __IESIsdbCasResponseEvent_FWD_DEFINED__
+#define __IESIsdbCasResponseEvent_FWD_DEFINED__
+typedef interface IESIsdbCasResponseEvent IESIsdbCasResponseEvent;
+#endif
+
+#ifndef __IGpnvsCommonBase_FWD_DEFINED__
+#define __IGpnvsCommonBase_FWD_DEFINED__
+typedef interface IGpnvsCommonBase IGpnvsCommonBase;
+#endif
+
+#ifndef __IESEventFactory_FWD_DEFINED__
+#define __IESEventFactory_FWD_DEFINED__
+typedef interface IESEventFactory IESEventFactory;
+#endif
+
+#ifndef __IESLicenseRenewalResultEvent_FWD_DEFINED__
+#define __IESLicenseRenewalResultEvent_FWD_DEFINED__
+typedef interface IESLicenseRenewalResultEvent IESLicenseRenewalResultEvent;
+#endif
+
+#ifndef __IESFileExpiryDateEvent_FWD_DEFINED__
+#define __IESFileExpiryDateEvent_FWD_DEFINED__
+typedef interface IESFileExpiryDateEvent IESFileExpiryDateEvent;
+#endif
+
+#ifndef __IESEvents_FWD_DEFINED__
+#define __IESEvents_FWD_DEFINED__
+typedef interface IESEvents IESEvents;
+#endif
+
+#ifndef __IESEventService_FWD_DEFINED__
+#define __IESEventService_FWD_DEFINED__
+typedef interface IESEventService IESEventService;
+#endif
+
+#ifndef __IESEventServiceConfiguration_FWD_DEFINED__
+#define __IESEventServiceConfiguration_FWD_DEFINED__
+typedef interface IESEventServiceConfiguration IESEventServiceConfiguration;
+#endif
+
+#ifndef __IBroadcastEvent_FWD_DEFINED__
+#define __IBroadcastEvent_FWD_DEFINED__
+typedef interface IBroadcastEvent IBroadcastEvent;
+#endif
+
+#ifndef __IBroadcastEventEx_FWD_DEFINED__
+#define __IBroadcastEventEx_FWD_DEFINED__
+typedef interface IBroadcastEventEx IBroadcastEventEx;
+#endif
+
+#ifndef __IRegisterTuner_FWD_DEFINED__
+#define __IRegisterTuner_FWD_DEFINED__
+typedef interface IRegisterTuner IRegisterTuner;
+#endif
+
+#ifndef __IBDAComparable_FWD_DEFINED__
+#define __IBDAComparable_FWD_DEFINED__
+typedef interface IBDAComparable IBDAComparable;
+#endif
+
+#ifndef __IPersistTuneXml_FWD_DEFINED__
+#define __IPersistTuneXml_FWD_DEFINED__
+typedef interface IPersistTuneXml IPersistTuneXml;
+#endif
+
+#ifndef __IPersistTuneXmlUtility_FWD_DEFINED__
+#define __IPersistTuneXmlUtility_FWD_DEFINED__
+typedef interface IPersistTuneXmlUtility IPersistTuneXmlUtility;
+#endif
+
+#ifndef __IPersistTuneXmlUtility2_FWD_DEFINED__
+#define __IPersistTuneXmlUtility2_FWD_DEFINED__
+typedef interface IPersistTuneXmlUtility2 IPersistTuneXmlUtility2;
+#endif
+
+#ifndef __IBDACreateTuneRequestEx_FWD_DEFINED__
+#define __IBDACreateTuneRequestEx_FWD_DEFINED__
+typedef interface IBDACreateTuneRequestEx IBDACreateTuneRequestEx;
+#endif
+
+#ifndef __SystemTuningSpaces_FWD_DEFINED__
+#define __SystemTuningSpaces_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class SystemTuningSpaces SystemTuningSpaces;
+#else
+typedef struct SystemTuningSpaces SystemTuningSpaces;
+#endif /* defined __cplusplus */
+#endif /* defined __SystemTuningSpaces_FWD_DEFINED__ */
+
+#ifndef __TuningSpace_FWD_DEFINED__
+#define __TuningSpace_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class TuningSpace TuningSpace;
+#else
+typedef struct TuningSpace TuningSpace;
+#endif /* defined __cplusplus */
+#endif /* defined __TuningSpace_FWD_DEFINED__ */
+
+#ifndef __ChannelIDTuningSpace_FWD_DEFINED__
+#define __ChannelIDTuningSpace_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class ChannelIDTuningSpace ChannelIDTuningSpace;
+#else
+typedef struct ChannelIDTuningSpace ChannelIDTuningSpace;
+#endif /* defined __cplusplus */
+#endif /* defined __ChannelIDTuningSpace_FWD_DEFINED__ */
+
+#ifndef __ATSCTuningSpace_FWD_DEFINED__
+#define __ATSCTuningSpace_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class ATSCTuningSpace ATSCTuningSpace;
+#else
+typedef struct ATSCTuningSpace ATSCTuningSpace;
+#endif /* defined __cplusplus */
+#endif /* defined __ATSCTuningSpace_FWD_DEFINED__ */
+
+#ifndef __DigitalCableTuningSpace_FWD_DEFINED__
+#define __DigitalCableTuningSpace_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class DigitalCableTuningSpace DigitalCableTuningSpace;
+#else
+typedef struct DigitalCableTuningSpace DigitalCableTuningSpace;
+#endif /* defined __cplusplus */
+#endif /* defined __DigitalCableTuningSpace_FWD_DEFINED__ */
+
+#ifndef __AnalogRadioTuningSpace_FWD_DEFINED__
+#define __AnalogRadioTuningSpace_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class AnalogRadioTuningSpace AnalogRadioTuningSpace;
+#else
+typedef struct AnalogRadioTuningSpace AnalogRadioTuningSpace;
+#endif /* defined __cplusplus */
+#endif /* defined __AnalogRadioTuningSpace_FWD_DEFINED__ */
+
+#ifndef __AuxInTuningSpace_FWD_DEFINED__
+#define __AuxInTuningSpace_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class AuxInTuningSpace AuxInTuningSpace;
+#else
+typedef struct AuxInTuningSpace AuxInTuningSpace;
+#endif /* defined __cplusplus */
+#endif /* defined __AuxInTuningSpace_FWD_DEFINED__ */
+
+#ifndef __AnalogTVTuningSpace_FWD_DEFINED__
+#define __AnalogTVTuningSpace_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class AnalogTVTuningSpace AnalogTVTuningSpace;
+#else
+typedef struct AnalogTVTuningSpace AnalogTVTuningSpace;
+#endif /* defined __cplusplus */
+#endif /* defined __AnalogTVTuningSpace_FWD_DEFINED__ */
+
+#ifndef __DVBTuningSpace_FWD_DEFINED__
+#define __DVBTuningSpace_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class DVBTuningSpace DVBTuningSpace;
+#else
+typedef struct DVBTuningSpace DVBTuningSpace;
+#endif /* defined __cplusplus */
+#endif /* defined __DVBTuningSpace_FWD_DEFINED__ */
+
+#ifndef __DVBSTuningSpace_FWD_DEFINED__
+#define __DVBSTuningSpace_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class DVBSTuningSpace DVBSTuningSpace;
+#else
+typedef struct DVBSTuningSpace DVBSTuningSpace;
+#endif /* defined __cplusplus */
+#endif /* defined __DVBSTuningSpace_FWD_DEFINED__ */
+
+#ifndef __ComponentTypes_FWD_DEFINED__
+#define __ComponentTypes_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class ComponentTypes ComponentTypes;
+#else
+typedef struct ComponentTypes ComponentTypes;
+#endif /* defined __cplusplus */
+#endif /* defined __ComponentTypes_FWD_DEFINED__ */
+
+#ifndef __ComponentType_FWD_DEFINED__
+#define __ComponentType_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class ComponentType ComponentType;
+#else
+typedef struct ComponentType ComponentType;
+#endif /* defined __cplusplus */
+#endif /* defined __ComponentType_FWD_DEFINED__ */
+
+#ifndef __LanguageComponentType_FWD_DEFINED__
+#define __LanguageComponentType_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class LanguageComponentType LanguageComponentType;
+#else
+typedef struct LanguageComponentType LanguageComponentType;
+#endif /* defined __cplusplus */
+#endif /* defined __LanguageComponentType_FWD_DEFINED__ */
+
+#ifndef __MPEG2ComponentType_FWD_DEFINED__
+#define __MPEG2ComponentType_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class MPEG2ComponentType MPEG2ComponentType;
+#else
+typedef struct MPEG2ComponentType MPEG2ComponentType;
+#endif /* defined __cplusplus */
+#endif /* defined __MPEG2ComponentType_FWD_DEFINED__ */
+
+#ifndef __ATSCComponentType_FWD_DEFINED__
+#define __ATSCComponentType_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class ATSCComponentType ATSCComponentType;
+#else
+typedef struct ATSCComponentType ATSCComponentType;
+#endif /* defined __cplusplus */
+#endif /* defined __ATSCComponentType_FWD_DEFINED__ */
+
+#ifndef __Components_FWD_DEFINED__
+#define __Components_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class Components Components;
+#else
+typedef struct Components Components;
+#endif /* defined __cplusplus */
+#endif /* defined __Components_FWD_DEFINED__ */
+
+#ifndef __Component_FWD_DEFINED__
+#define __Component_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class Component Component;
+#else
+typedef struct Component Component;
+#endif /* defined __cplusplus */
+#endif /* defined __Component_FWD_DEFINED__ */
+
+#ifndef __MPEG2Component_FWD_DEFINED__
+#define __MPEG2Component_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class MPEG2Component MPEG2Component;
+#else
+typedef struct MPEG2Component MPEG2Component;
+#endif /* defined __cplusplus */
+#endif /* defined __MPEG2Component_FWD_DEFINED__ */
+
+#ifndef __AnalogAudioComponentType_FWD_DEFINED__
+#define __AnalogAudioComponentType_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class AnalogAudioComponentType AnalogAudioComponentType;
+#else
+typedef struct AnalogAudioComponentType AnalogAudioComponentType;
+#endif /* defined __cplusplus */
+#endif /* defined __AnalogAudioComponentType_FWD_DEFINED__ */
+
+#ifndef __TuneRequest_FWD_DEFINED__
+#define __TuneRequest_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class TuneRequest TuneRequest;
+#else
+typedef struct TuneRequest TuneRequest;
+#endif /* defined __cplusplus */
+#endif /* defined __TuneRequest_FWD_DEFINED__ */
+
+#ifndef __ChannelIDTuneRequest_FWD_DEFINED__
+#define __ChannelIDTuneRequest_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class ChannelIDTuneRequest ChannelIDTuneRequest;
+#else
+typedef struct ChannelIDTuneRequest ChannelIDTuneRequest;
+#endif /* defined __cplusplus */
+#endif /* defined __ChannelIDTuneRequest_FWD_DEFINED__ */
+
+#ifndef __ChannelTuneRequest_FWD_DEFINED__
+#define __ChannelTuneRequest_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class ChannelTuneRequest ChannelTuneRequest;
+#else
+typedef struct ChannelTuneRequest ChannelTuneRequest;
+#endif /* defined __cplusplus */
+#endif /* defined __ChannelTuneRequest_FWD_DEFINED__ */
+
+#ifndef __ATSCChannelTuneRequest_FWD_DEFINED__
+#define __ATSCChannelTuneRequest_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class ATSCChannelTuneRequest ATSCChannelTuneRequest;
+#else
+typedef struct ATSCChannelTuneRequest ATSCChannelTuneRequest;
+#endif /* defined __cplusplus */
+#endif /* defined __ATSCChannelTuneRequest_FWD_DEFINED__ */
+
+#ifndef __DigitalCableTuneRequest_FWD_DEFINED__
+#define __DigitalCableTuneRequest_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class DigitalCableTuneRequest DigitalCableTuneRequest;
+#else
+typedef struct DigitalCableTuneRequest DigitalCableTuneRequest;
+#endif /* defined __cplusplus */
+#endif /* defined __DigitalCableTuneRequest_FWD_DEFINED__ */
+
+#ifndef __MPEG2TuneRequest_FWD_DEFINED__
+#define __MPEG2TuneRequest_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class MPEG2TuneRequest MPEG2TuneRequest;
+#else
+typedef struct MPEG2TuneRequest MPEG2TuneRequest;
+#endif /* defined __cplusplus */
+#endif /* defined __MPEG2TuneRequest_FWD_DEFINED__ */
+
+#ifndef __MPEG2TuneRequestFactory_FWD_DEFINED__
+#define __MPEG2TuneRequestFactory_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class MPEG2TuneRequestFactory MPEG2TuneRequestFactory;
+#else
+typedef struct MPEG2TuneRequestFactory MPEG2TuneRequestFactory;
+#endif /* defined __cplusplus */
+#endif /* defined __MPEG2TuneRequestFactory_FWD_DEFINED__ */
+
+#ifndef __Locator_FWD_DEFINED__
+#define __Locator_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class Locator Locator;
+#else
+typedef struct Locator Locator;
+#endif /* defined __cplusplus */
+#endif /* defined __Locator_FWD_DEFINED__ */
+
+#ifndef __DigitalLocator_FWD_DEFINED__
+#define __DigitalLocator_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class DigitalLocator DigitalLocator;
+#else
+typedef struct DigitalLocator DigitalLocator;
+#endif /* defined __cplusplus */
+#endif /* defined __DigitalLocator_FWD_DEFINED__ */
+
+#ifndef __AnalogLocator_FWD_DEFINED__
+#define __AnalogLocator_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class AnalogLocator AnalogLocator;
+#else
+typedef struct AnalogLocator AnalogLocator;
+#endif /* defined __cplusplus */
+#endif /* defined __AnalogLocator_FWD_DEFINED__ */
+
+#ifndef __ATSCLocator_FWD_DEFINED__
+#define __ATSCLocator_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class ATSCLocator ATSCLocator;
+#else
+typedef struct ATSCLocator ATSCLocator;
+#endif /* defined __cplusplus */
+#endif /* defined __ATSCLocator_FWD_DEFINED__ */
+
+#ifndef __DigitalCableLocator_FWD_DEFINED__
+#define __DigitalCableLocator_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class DigitalCableLocator DigitalCableLocator;
+#else
+typedef struct DigitalCableLocator DigitalCableLocator;
+#endif /* defined __cplusplus */
+#endif /* defined __DigitalCableLocator_FWD_DEFINED__ */
+
+#ifndef __DVBTLocator_FWD_DEFINED__
+#define __DVBTLocator_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class DVBTLocator DVBTLocator;
+#else
+typedef struct DVBTLocator DVBTLocator;
+#endif /* defined __cplusplus */
+#endif /* defined __DVBTLocator_FWD_DEFINED__ */
+
+#ifndef __DVBTLocator2_FWD_DEFINED__
+#define __DVBTLocator2_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class DVBTLocator2 DVBTLocator2;
+#else
+typedef struct DVBTLocator2 DVBTLocator2;
+#endif /* defined __cplusplus */
+#endif /* defined __DVBTLocator2_FWD_DEFINED__ */
+
+#ifndef __DVBSLocator_FWD_DEFINED__
+#define __DVBSLocator_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class DVBSLocator DVBSLocator;
+#else
+typedef struct DVBSLocator DVBSLocator;
+#endif /* defined __cplusplus */
+#endif /* defined __DVBSLocator_FWD_DEFINED__ */
+
+#ifndef __DVBCLocator_FWD_DEFINED__
+#define __DVBCLocator_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class DVBCLocator DVBCLocator;
+#else
+typedef struct DVBCLocator DVBCLocator;
+#endif /* defined __cplusplus */
+#endif /* defined __DVBCLocator_FWD_DEFINED__ */
+
+#ifndef __ISDBSLocator_FWD_DEFINED__
+#define __ISDBSLocator_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class ISDBSLocator ISDBSLocator;
+#else
+typedef struct ISDBSLocator ISDBSLocator;
+#endif /* defined __cplusplus */
+#endif /* defined __ISDBSLocator_FWD_DEFINED__ */
+
+#ifndef __DVBTuneRequest_FWD_DEFINED__
+#define __DVBTuneRequest_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class DVBTuneRequest DVBTuneRequest;
+#else
+typedef struct DVBTuneRequest DVBTuneRequest;
+#endif /* defined __cplusplus */
+#endif /* defined __DVBTuneRequest_FWD_DEFINED__ */
+
+#ifndef __CreatePropBagOnRegKey_FWD_DEFINED__
+#define __CreatePropBagOnRegKey_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class CreatePropBagOnRegKey CreatePropBagOnRegKey;
+#else
+typedef struct CreatePropBagOnRegKey CreatePropBagOnRegKey;
+#endif /* defined __cplusplus */
+#endif /* defined __CreatePropBagOnRegKey_FWD_DEFINED__ */
+
+#ifndef __BroadcastEventService_FWD_DEFINED__
+#define __BroadcastEventService_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class BroadcastEventService BroadcastEventService;
+#else
+typedef struct BroadcastEventService BroadcastEventService;
+#endif /* defined __cplusplus */
+#endif /* defined __BroadcastEventService_FWD_DEFINED__ */
+
+#ifndef __TunerMarshaler_FWD_DEFINED__
+#define __TunerMarshaler_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class TunerMarshaler TunerMarshaler;
+#else
+typedef struct TunerMarshaler TunerMarshaler;
+#endif /* defined __cplusplus */
+#endif /* defined __TunerMarshaler_FWD_DEFINED__ */
+
+#ifndef __PersistTuneXmlUtility_FWD_DEFINED__
+#define __PersistTuneXmlUtility_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class PersistTuneXmlUtility PersistTuneXmlUtility;
+#else
+typedef struct PersistTuneXmlUtility PersistTuneXmlUtility;
+#endif /* defined __cplusplus */
+#endif /* defined __PersistTuneXmlUtility_FWD_DEFINED__ */
+
+#ifndef __ESEventService_FWD_DEFINED__
+#define __ESEventService_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class ESEventService ESEventService;
+#else
+typedef struct ESEventService ESEventService;
+#endif /* defined __cplusplus */
+#endif /* defined __ESEventService_FWD_DEFINED__ */
+
+#ifndef __ESEventFactory_FWD_DEFINED__
+#define __ESEventFactory_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class ESEventFactory ESEventFactory;
+#else
+typedef struct ESEventFactory ESEventFactory;
+#endif /* defined __cplusplus */
+#endif /* defined __ESEventFactory_FWD_DEFINED__ */
+
+/* Headers for imported files */
+
+#include <oaidl.h>
+#include <comcat.h>
+#include <strmif.h>
+#include <bdaiface.h>
+#include <regbag.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef __IAnalogLocator_FWD_DEFINED__
+#define __IAnalogLocator_FWD_DEFINED__
+typedef interface IAnalogLocator IAnalogLocator;
+#endif
+
+#ifndef __IATSCLocator_FWD_DEFINED__
+#define __IATSCLocator_FWD_DEFINED__
+typedef interface IATSCLocator IATSCLocator;
+#endif
+
+#ifndef __IComponent_FWD_DEFINED__
+#define __IComponent_FWD_DEFINED__
+typedef interface IComponent IComponent;
+#endif
+
+#ifndef __IComponents_FWD_DEFINED__
+#define __IComponents_FWD_DEFINED__
+typedef interface IComponents IComponents;
+#endif
+
+#ifndef __IComponentType_FWD_DEFINED__
+#define __IComponentType_FWD_DEFINED__
+typedef interface IComponentType IComponentType;
+#endif
+
+#ifndef __IComponentTypes_FWD_DEFINED__
+#define __IComponentTypes_FWD_DEFINED__
+typedef interface IComponentTypes IComponentTypes;
+#endif
+
+#ifndef __IDigitalCableLocator_FWD_DEFINED__
+#define __IDigitalCableLocator_FWD_DEFINED__
+typedef interface IDigitalCableLocator IDigitalCableLocator;
+#endif
+
+#ifndef __IDigitalCableTuneRequest_FWD_DEFINED__
+#define __IDigitalCableTuneRequest_FWD_DEFINED__
+typedef interface IDigitalCableTuneRequest IDigitalCableTuneRequest;
+#endif
+
+#ifndef __IDigitalCableTuningSpace_FWD_DEFINED__
+#define __IDigitalCableTuningSpace_FWD_DEFINED__
+typedef interface IDigitalCableTuningSpace IDigitalCableTuningSpace;
+#endif
+
+#ifndef __IDVBCLocator_FWD_DEFINED__
+#define __IDVBCLocator_FWD_DEFINED__
+typedef interface IDVBCLocator IDVBCLocator;
+#endif
+
+#ifndef __IDVBSLocator_FWD_DEFINED__
+#define __IDVBSLocator_FWD_DEFINED__
+typedef interface IDVBSLocator IDVBSLocator;
+#endif
+
+#ifndef __IDVBSLocator2_FWD_DEFINED__
+#define __IDVBSLocator2_FWD_DEFINED__
+typedef interface IDVBSLocator2 IDVBSLocator2;
+#endif
+
+#ifndef __IDVBTLocator_FWD_DEFINED__
+#define __IDVBTLocator_FWD_DEFINED__
+typedef interface IDVBTLocator IDVBTLocator;
+#endif
+
+#ifndef __IDVBTLocator2_FWD_DEFINED__
+#define __IDVBTLocator2_FWD_DEFINED__
+typedef interface IDVBTLocator2 IDVBTLocator2;
+#endif
+
+#ifndef __IEnumComponents_FWD_DEFINED__
+#define __IEnumComponents_FWD_DEFINED__
+typedef interface IEnumComponents IEnumComponents;
+#endif
+
+#ifndef __IEnumComponentTypes_FWD_DEFINED__
+#define __IEnumComponentTypes_FWD_DEFINED__
+typedef interface IEnumComponentTypes IEnumComponentTypes;
+#endif
+
+#ifndef __IEnumTuningSpaces_FWD_DEFINED__
+#define __IEnumTuningSpaces_FWD_DEFINED__
+typedef interface IEnumTuningSpaces IEnumTuningSpaces;
+#endif
+
+#ifndef __IISDBSLocator_FWD_DEFINED__
+#define __IISDBSLocator_FWD_DEFINED__
+typedef interface IISDBSLocator IISDBSLocator;
+#endif
+
+#ifndef __ILanguageComponentType_FWD_DEFINED__
+#define __ILanguageComponentType_FWD_DEFINED__
+typedef interface ILanguageComponentType ILanguageComponentType;
+#endif
+
+#ifndef __ILocator_FWD_DEFINED__
+#define __ILocator_FWD_DEFINED__
+typedef interface ILocator ILocator;
+#endif
+
+#ifndef __IMPEG2Component_FWD_DEFINED__
+#define __IMPEG2Component_FWD_DEFINED__
+typedef interface IMPEG2Component IMPEG2Component;
+#endif
+
+#ifndef __IMPEG2ComponentType_FWD_DEFINED__
+#define __IMPEG2ComponentType_FWD_DEFINED__
+typedef interface IMPEG2ComponentType IMPEG2ComponentType;
+#endif
+
+#ifndef __IScanningTuner_FWD_DEFINED__
+#define __IScanningTuner_FWD_DEFINED__
+typedef interface IScanningTuner IScanningTuner;
+#endif
+
+#ifndef __ITuneRequest_FWD_DEFINED__
+#define __ITuneRequest_FWD_DEFINED__
+typedef interface ITuneRequest ITuneRequest;
+#endif
+
+#ifndef __ITuner_FWD_DEFINED__
+#define __ITuner_FWD_DEFINED__
+typedef interface ITuner ITuner;
+#endif
+
+#ifndef __ITunerCap_FWD_DEFINED__
+#define __ITunerCap_FWD_DEFINED__
+typedef interface ITunerCap ITunerCap;
+#endif
+
+#ifndef __ITuningSpace_FWD_DEFINED__
+#define __ITuningSpace_FWD_DEFINED__
+typedef interface ITuningSpace ITuningSpace;
+#endif
+
+#ifndef __ITuningSpaceContainer_FWD_DEFINED__
+#define __ITuningSpaceContainer_FWD_DEFINED__
+typedef interface ITuningSpaceContainer ITuningSpaceContainer;
+#endif
+
+
+#include <winapifamily.h>
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+enum {
+    DISPID_TUNER_TS_UNIQUENAME = 1,
+    DISPID_TUNER_TS_FRIENDLYNAME = 2,
+    DISPID_TUNER_TS_CLSID = 3,
+    DISPID_TUNER_TS_NETWORKTYPE = 4,
+    DISPID_TUNER_TS__NETWORKTYPE = 5,
+    DISPID_TUNER_TS_CREATETUNEREQUEST = 6,
+    DISPID_TUNER_TS_ENUMCATEGORYGUIDS = 7,
+    DISPID_TUNER_TS_ENUMDEVICEMONIKERS = 8,
+    DISPID_TUNER_TS_DEFAULTPREFERREDCOMPONENTTYPES = 9,
+    DISPID_TUNER_TS_FREQMAP = 10,
+    DISPID_TUNER_TS_DEFLOCATOR = 11,
+    DISPID_TUNER_TS_CLONE = 12,
+    DISPID_TUNER_TR_TUNINGSPACE = 1,
+    DISPID_TUNER_TR_COMPONENTS = 2,
+    DISPID_TUNER_TR_CLONE = 3,
+    DISPID_TUNER_TR_LOCATOR = 4,
+    DISPID_TUNER_CT_CATEGORY = 1,
+    DISPID_TUNER_CT_MEDIAMAJORTYPE = 2,
+    DISPID_TUNER_CT__MEDIAMAJORTYPE = 3,
+    DISPID_TUNER_CT_MEDIASUBTYPE = 4,
+    DISPID_TUNER_CT__MEDIASUBTYPE = 5,
+    DISPID_TUNER_CT_MEDIAFORMATTYPE = 6,
+    DISPID_TUNER_CT__MEDIAFORMATTYPE = 7,
+    DISPID_TUNER_CT_MEDIATYPE = 8,
+    DISPID_TUNER_CT_CLONE = 9,
+    DISPID_TUNER_LCT_LANGID = 100,
+    DISPID_TUNER_MP2CT_TYPE = 200,
+    DISPID_TUNER_ATSCCT_FLAGS = 300,
+    DISPID_TUNER_L_CARRFREQ = 1,
+    DISPID_TUNER_L_INNERFECMETHOD = 2,
+    DISPID_TUNER_L_INNERFECRATE = 3,
+    DISPID_TUNER_L_OUTERFECMETHOD = 4,
+    DISPID_TUNER_L_OUTERFECRATE = 5,
+    DISPID_TUNER_L_MOD = 6,
+    DISPID_TUNER_L_SYMRATE = 7,
+    DISPID_TUNER_L_CLONE = 8,
+    DISPID_TUNER_L_ATSC_PHYS_CHANNEL = 201,
+    DISPID_TUNER_L_ATSC_TSID = 202,
+    DISPID_TUNER_L_ATSC_MP2_PROGNO = 203,
+    DISPID_TUNER_L_DVBT_BANDWIDTH = 301,
+    DISPID_TUNER_L_DVBT_LPINNERFECMETHOD = 302,
+    DISPID_TUNER_L_DVBT_LPINNERFECRATE = 303,
+    DISPID_TUNER_L_DVBT_GUARDINTERVAL = 304,
+    DISPID_TUNER_L_DVBT_HALPHA = 305,
+    DISPID_TUNER_L_DVBT_TRANSMISSIONMODE = 306,
+    DISPID_TUNER_L_DVBT_INUSE = 307,
+    DISPID_TUNER_L_DVBT2_PHYSICALLAYERPIPEID = 351,
+    DISPID_TUNER_L_DVBS_POLARISATION = 401,
+    DISPID_TUNER_L_DVBS_WEST = 402,
+    DISPID_TUNER_L_DVBS_ORBITAL = 403,
+    DISPID_TUNER_L_DVBS_AZIMUTH = 404,
+    DISPID_TUNER_L_DVBS_ELEVATION = 405,
+    DISPID_TUNER_L_DVBS2_DISEQ_LNB_SOURCE = 406,
+    DISPID_TUNER_TS_DVBS2_LOW_OSC_FREQ_OVERRIDE = 407,
+    DISPID_TUNER_TS_DVBS2_HI_OSC_FREQ_OVERRIDE = 408,
+    DISPID_TUNER_TS_DVBS2_LNB_SWITCH_FREQ_OVERRIDE = 409,
+    DISPID_TUNER_TS_DVBS2_SPECTRAL_INVERSION_OVERRIDE = 410,
+    DISPID_TUNER_L_DVBS2_ROLLOFF = 411,
+    DISPID_TUNER_L_DVBS2_PILOT = 412,
+    DISPID_TUNER_L_ANALOG_STANDARD = 601,
+    DISPID_TUNER_L_DTV_O_MAJOR_CHANNEL = 701,
+    DISPID_TUNER_C_TYPE = 1,
+    DISPID_TUNER_C_STATUS = 2,
+    DISPID_TUNER_C_LANGID = 3,
+    DISPID_TUNER_C_DESCRIPTION = 4,
+    DISPID_TUNER_C_CLONE = 5,
+    DISPID_TUNER_C_MP2_PID = 101,
+    DISPID_TUNER_C_MP2_PCRPID = 102,
+    DISPID_TUNER_C_MP2_PROGNO = 103,
+    DISPID_TUNER_C_ANALOG_AUDIO = 201,
+    DISPID_TUNER_TS_DVB_SYSTEMTYPE = 101,
+    DISPID_TUNER_TS_DVB2_NETWORK_ID = 102,
+    DISPID_TUNER_TS_DVBS_LOW_OSC_FREQ = 1001,
+    DISPID_TUNER_TS_DVBS_HI_OSC_FREQ = 1002,
+    DISPID_TUNER_TS_DVBS_LNB_SWITCH_FREQ = 1003,
+    DISPID_TUNER_TS_DVBS_INPUT_RANGE = 1004,
+    DISPID_TUNER_TS_DVBS_SPECTRAL_INVERSION = 1005,
+    DISPID_TUNER_TS_AR_MINFREQUENCY = 101,
+    DISPID_TUNER_TS_AR_MAXFREQUENCY = 102,
+    DISPID_TUNER_TS_AR_STEP = 103,
+    DISPID_TUNER_TS_AR_COUNTRYCODE = 104,
+    DISPID_TUNER_TS_AUX_COUNTRYCODE = 101,
+    DISPID_TUNER_TS_ATV_MINCHANNEL = 101,
+    DISPID_TUNER_TS_ATV_MAXCHANNEL = 102,
+    DISPID_TUNER_TS_ATV_INPUTTYPE = 103,
+    DISPID_TUNER_TS_ATV_COUNTRYCODE = 104,
+    DISPID_TUNER_TS_ATSC_MINMINORCHANNEL = 201,
+    DISPID_TUNER_TS_ATSC_MAXMINORCHANNEL = 202,
+    DISPID_TUNER_TS_ATSC_MINPHYSCHANNEL = 203,
+    DISPID_TUNER_TS_ATSC_MAXPHYSCHANNEL = 204,
+    DISPID_TUNER_TS_DC_MINMAJORCHANNEL = 301,
+    DISPID_TUNER_TS_DC_MAXMAJORCHANNEL = 302,
+    DISPID_TUNER_TS_DC_MINSOURCEID = 303,
+    DISPID_TUNER_TS_DC_MAXSOURCEID = 304,
+    DISPID_CHTUNER_ATVAC_CHANNEL = 101,
+    DISPID_CHTUNER_ATVDC_SYSTEM = 101,
+    DISPID_CHTUNER_ATVDC_CONTENT = 102,
+    DISPID_CHTUNER_CIDTR_CHANNELID = 101,
+    DISPID_CHTUNER_CTR_CHANNEL = 101,
+    DISPID_CHTUNER_ACTR_MINOR_CHANNEL = 201,
+    DISPID_CHTUNER_DCTR_MAJOR_CHANNEL = 301,
+    DISPID_CHTUNER_DCTR_SRCID = 302,
+    DISPID_DVBTUNER_DVBC_ATTRIBUTESVALID = 101,
+    DISPID_DVBTUNER_DVBC_PID = 102,
+    DISPID_DVBTUNER_DVBC_TAG = 103,
+    DISPID_DVBTUNER_DVBC_COMPONENTTYPE = 104,
+    DISPID_DVBTUNER_ONID = 101,
+    DISPID_DVBTUNER_TSID = 102,
+    DISPID_DVBTUNER_SID = 103,
+    DISPID_MP2TUNER_TSID = 101,
+    DISPID_MP2TUNER_PROGNO = 102,
+    DISPID_MP2TUNERFACTORY_CREATETUNEREQUEST = 1
+};
+
+
+#define SID_ESEventService CLSID_ESEventService
+#define SID_ESEventFactory CLSID_ESEventFactory
+#define SID_SBroadcastEventService CLSID_BroadcastEventService
+#define SID_SContentTuneRequest IID_ITuner
+#define SID_ScanningTuner IID_IScanningTuner
+#define SID_ScanningTunerEx IID_IScanningTunerEx
+
+/*****************************************************************************
+ * ITuningSpaces interface
+ */
+#ifndef __ITuningSpaces_INTERFACE_DEFINED__
+#define __ITuningSpaces_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITuningSpaces, 0x901284e4, 0x33fe, 0x4b69, 0x8d,0x63, 0x63,0x4a,0x59,0x6f,0x37,0x56);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("901284e4-33fe-4b69-8d63-634a596f3756")
+ITuningSpaces : public IDispatch
 {
+    virtual HRESULT STDMETHODCALLTYPE get_Count(
+        LONG *Count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
+        IEnumVARIANT **NewEnum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Item(
+        VARIANT varIndex,
+        ITuningSpace **TuningSpace) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_EnumTuningSpaces(
+        IEnumTuningSpaces **NewEnum) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITuningSpaces, 0x901284e4, 0x33fe, 0x4b69, 0x8d,0x63, 0x63,0x4a,0x59,0x6f,0x37,0x56)
+#endif
+#else
+typedef struct ITuningSpacesVtbl {
     BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITuningSpaces* This,
+        REFIID riid,
+        void **ppvObject);
 
-    /* IDispatch methods */
-    STDMETHOD_(HRESULT,GetTypeInfoCount)(THIS_ UINT *pctinfo) PURE;
-    STDMETHOD_(HRESULT,GetTypeInfo)(THIS_ UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) PURE;
-    STDMETHOD_(HRESULT,GetIDsOfNames)(THIS_ REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) PURE;
-    STDMETHOD_(HRESULT,Invoke)(THIS_ DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) PURE;
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITuningSpaces* This);
 
-    /* ITuningSpace methods */
-    STDMETHOD_(HRESULT,Clone)(THIS_ ITuningSpace **ppNewTS) PURE;
-    STDMETHOD_(HRESULT,CreateTuneRequest)(THIS_ ITuneRequest **ppTuneRequest) PURE;
-    STDMETHOD_(HRESULT,EnumCategoryGUIDs)(THIS_ IEnumGUID **ppEnum) PURE;
-    STDMETHOD_(HRESULT,EnumDeviceMonikers)(THIS_ IEnumMoniker **ppEnum) PURE;
-    STDMETHOD_(HRESULT,get__NetworkType)(THIS_ GUID *pNetworkTypeGuid) PURE;
-    STDMETHOD_(HRESULT,get_CLSID)(THIS_ BSTR *pSpaceCLSID) PURE;
-    STDMETHOD_(HRESULT,get_DefaultLocator)(THIS_ ILocator **ppLocatorVal) PURE;
-    STDMETHOD_(HRESULT,get_DefaultPreferredComponentTypes)(THIS_ IComponentTypes **ppComponentTypes) PURE;
-    STDMETHOD_(HRESULT,get_FrequencyMapping)(THIS_ BSTR *pMapping) PURE;
-    STDMETHOD_(HRESULT,get_FriendlyName)(THIS_ BSTR *pName) PURE;
-    STDMETHOD_(HRESULT,get_NetworkType)(THIS_ BSTR *pNetworkTypeGuid) PURE;
-    STDMETHOD_(HRESULT,get_UniqueName)(THIS_ BSTR *pName) PURE;
-    STDMETHOD_(HRESULT,put__NetworkType)(THIS_ REFCLSID NetworkTypeGuid) PURE;
-    STDMETHOD_(HRESULT,put_DefaultLocator)(THIS_ ILocator *pLocatorVal) PURE;
-    STDMETHOD_(HRESULT,put_DefaultPreferredComponentTypes)(THIS_ IComponentTypes *pNewComponentTypes) PURE;
-    STDMETHOD_(HRESULT,put_FrequencyMapping)(THIS_ BSTR Mapping) PURE;
-    STDMETHOD_(HRESULT,put_FriendlyName)(THIS_ BSTR Name) PURE;
-    STDMETHOD_(HRESULT,put_NetworkType)(THIS_ BSTR NetworkTypeGuid) PURE;
-    STDMETHOD_(HRESULT,put_UniqueName)(THIS_ BSTR Name) PURE;
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITuningSpaces* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        ITuningSpaces* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        ITuningSpaces* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        ITuningSpaces* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        ITuningSpaces* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ITuningSpaces methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Count)(
+        ITuningSpaces* This,
+        LONG *Count);
+
+    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
+        ITuningSpaces* This,
+        IEnumVARIANT **NewEnum);
+
+    HRESULT (STDMETHODCALLTYPE *get_Item)(
+        ITuningSpaces* This,
+        VARIANT varIndex,
+        ITuningSpace **TuningSpace);
+
+    HRESULT (STDMETHODCALLTYPE *get_EnumTuningSpaces)(
+        ITuningSpaces* This,
+        IEnumTuningSpaces **NewEnum);
 
     END_INTERFACE
+} ITuningSpacesVtbl;
+interface ITuningSpaces {
+    CONST_VTBL ITuningSpacesVtbl* lpVtbl;
 };
+
 #ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ITuningSpaces_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITuningSpaces_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITuningSpaces_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define ITuningSpaces_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define ITuningSpaces_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define ITuningSpaces_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define ITuningSpaces_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ITuningSpaces methods ***/
+#define ITuningSpaces_get_Count(This,Count) (This)->lpVtbl->get_Count(This,Count)
+#define ITuningSpaces_get__NewEnum(This,NewEnum) (This)->lpVtbl->get__NewEnum(This,NewEnum)
+#define ITuningSpaces_get_Item(This,varIndex,TuningSpace) (This)->lpVtbl->get_Item(This,varIndex,TuningSpace)
+#define ITuningSpaces_get_EnumTuningSpaces(This,NewEnum) (This)->lpVtbl->get_EnumTuningSpaces(This,NewEnum)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ITuningSpaces_QueryInterface(ITuningSpaces* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ITuningSpaces_AddRef(ITuningSpaces* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ITuningSpaces_Release(ITuningSpaces* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT ITuningSpaces_GetTypeInfoCount(ITuningSpaces* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT ITuningSpaces_GetTypeInfo(ITuningSpaces* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT ITuningSpaces_GetIDsOfNames(ITuningSpaces* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT ITuningSpaces_Invoke(ITuningSpaces* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ITuningSpaces methods ***/
+static FORCEINLINE HRESULT ITuningSpaces_get_Count(ITuningSpaces* This,LONG *Count) {
+    return This->lpVtbl->get_Count(This,Count);
+}
+static FORCEINLINE HRESULT ITuningSpaces_get__NewEnum(ITuningSpaces* This,IEnumVARIANT **NewEnum) {
+    return This->lpVtbl->get__NewEnum(This,NewEnum);
+}
+static FORCEINLINE HRESULT ITuningSpaces_get_Item(ITuningSpaces* This,VARIANT varIndex,ITuningSpace **TuningSpace) {
+    return This->lpVtbl->get_Item(This,varIndex,TuningSpace);
+}
+static FORCEINLINE HRESULT ITuningSpaces_get_EnumTuningSpaces(ITuningSpaces* This,IEnumTuningSpaces **NewEnum) {
+    return This->lpVtbl->get_EnumTuningSpaces(This,NewEnum);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITuningSpaces_get_Count_Proxy(
+    ITuningSpaces* This,
+    LONG *Count);
+void __RPC_STUB ITuningSpaces_get_Count_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpaces_get__NewEnum_Proxy(
+    ITuningSpaces* This,
+    IEnumVARIANT **NewEnum);
+void __RPC_STUB ITuningSpaces_get__NewEnum_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpaces_get_Item_Proxy(
+    ITuningSpaces* This,
+    VARIANT varIndex,
+    ITuningSpace **TuningSpace);
+void __RPC_STUB ITuningSpaces_get_Item_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpaces_get_EnumTuningSpaces_Proxy(
+    ITuningSpaces* This,
+    IEnumTuningSpaces **NewEnum);
+void __RPC_STUB ITuningSpaces_get_EnumTuningSpaces_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ITuningSpaces_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITuningSpaceContainer interface
+ */
+#ifndef __ITuningSpaceContainer_INTERFACE_DEFINED__
+#define __ITuningSpaceContainer_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITuningSpaceContainer, 0x5b692e84, 0xe2f1, 0x11d2, 0x94,0x93, 0x00,0xc0,0x4f,0x72,0xd9,0x80);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("5b692e84-e2f1-11d2-9493-00c04f72d980")
+ITuningSpaceContainer : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Count(
+        LONG *Count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
+        IEnumVARIANT **NewEnum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Item(
+        VARIANT varIndex,
+        ITuningSpace **TuningSpace) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Item(
+        VARIANT varIndex,
+        ITuningSpace *TuningSpace) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE TuningSpacesForCLSID(
+        BSTR SpaceCLSID,
+        ITuningSpaces **NewColl) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE _TuningSpacesForCLSID(
+        REFCLSID SpaceCLSID,
+        ITuningSpaces **NewColl) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE TuningSpacesForName(
+        BSTR Name,
+        ITuningSpaces **NewColl) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE FindID(
+        ITuningSpace *TuningSpace,
+        LONG *ID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Add(
+        ITuningSpace *TuningSpace,
+        VARIANT *NewIndex) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_EnumTuningSpaces(
+        IEnumTuningSpaces **ppEnum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Remove(
+        VARIANT Index) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_MaxCount(
+        LONG *MaxCount) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_MaxCount(
+        LONG MaxCount) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITuningSpaceContainer, 0x5b692e84, 0xe2f1, 0x11d2, 0x94,0x93, 0x00,0xc0,0x4f,0x72,0xd9,0x80)
+#endif
+#else
+typedef struct ITuningSpaceContainerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITuningSpaceContainer* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITuningSpaceContainer* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITuningSpaceContainer* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        ITuningSpaceContainer* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        ITuningSpaceContainer* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        ITuningSpaceContainer* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        ITuningSpaceContainer* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ITuningSpaceContainer methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Count)(
+        ITuningSpaceContainer* This,
+        LONG *Count);
+
+    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
+        ITuningSpaceContainer* This,
+        IEnumVARIANT **NewEnum);
+
+    HRESULT (STDMETHODCALLTYPE *get_Item)(
+        ITuningSpaceContainer* This,
+        VARIANT varIndex,
+        ITuningSpace **TuningSpace);
+
+    HRESULT (STDMETHODCALLTYPE *put_Item)(
+        ITuningSpaceContainer* This,
+        VARIANT varIndex,
+        ITuningSpace *TuningSpace);
+
+    HRESULT (STDMETHODCALLTYPE *TuningSpacesForCLSID)(
+        ITuningSpaceContainer* This,
+        BSTR SpaceCLSID,
+        ITuningSpaces **NewColl);
+
+    HRESULT (STDMETHODCALLTYPE *_TuningSpacesForCLSID)(
+        ITuningSpaceContainer* This,
+        REFCLSID SpaceCLSID,
+        ITuningSpaces **NewColl);
+
+    HRESULT (STDMETHODCALLTYPE *TuningSpacesForName)(
+        ITuningSpaceContainer* This,
+        BSTR Name,
+        ITuningSpaces **NewColl);
+
+    HRESULT (STDMETHODCALLTYPE *FindID)(
+        ITuningSpaceContainer* This,
+        ITuningSpace *TuningSpace,
+        LONG *ID);
+
+    HRESULT (STDMETHODCALLTYPE *Add)(
+        ITuningSpaceContainer* This,
+        ITuningSpace *TuningSpace,
+        VARIANT *NewIndex);
+
+    HRESULT (STDMETHODCALLTYPE *get_EnumTuningSpaces)(
+        ITuningSpaceContainer* This,
+        IEnumTuningSpaces **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *Remove)(
+        ITuningSpaceContainer* This,
+        VARIANT Index);
+
+    HRESULT (STDMETHODCALLTYPE *get_MaxCount)(
+        ITuningSpaceContainer* This,
+        LONG *MaxCount);
+
+    HRESULT (STDMETHODCALLTYPE *put_MaxCount)(
+        ITuningSpaceContainer* This,
+        LONG MaxCount);
+
+    END_INTERFACE
+} ITuningSpaceContainerVtbl;
+interface ITuningSpaceContainer {
+    CONST_VTBL ITuningSpaceContainerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ITuningSpaceContainer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITuningSpaceContainer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITuningSpaceContainer_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define ITuningSpaceContainer_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define ITuningSpaceContainer_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define ITuningSpaceContainer_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define ITuningSpaceContainer_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ITuningSpaceContainer methods ***/
+#define ITuningSpaceContainer_get_Count(This,Count) (This)->lpVtbl->get_Count(This,Count)
+#define ITuningSpaceContainer_get__NewEnum(This,NewEnum) (This)->lpVtbl->get__NewEnum(This,NewEnum)
+#define ITuningSpaceContainer_get_Item(This,varIndex,TuningSpace) (This)->lpVtbl->get_Item(This,varIndex,TuningSpace)
+#define ITuningSpaceContainer_put_Item(This,varIndex,TuningSpace) (This)->lpVtbl->put_Item(This,varIndex,TuningSpace)
+#define ITuningSpaceContainer_TuningSpacesForCLSID(This,SpaceCLSID,NewColl) (This)->lpVtbl->TuningSpacesForCLSID(This,SpaceCLSID,NewColl)
+#define ITuningSpaceContainer__TuningSpacesForCLSID(This,SpaceCLSID,NewColl) (This)->lpVtbl->_TuningSpacesForCLSID(This,SpaceCLSID,NewColl)
+#define ITuningSpaceContainer_TuningSpacesForName(This,Name,NewColl) (This)->lpVtbl->TuningSpacesForName(This,Name,NewColl)
+#define ITuningSpaceContainer_FindID(This,TuningSpace,ID) (This)->lpVtbl->FindID(This,TuningSpace,ID)
+#define ITuningSpaceContainer_Add(This,TuningSpace,NewIndex) (This)->lpVtbl->Add(This,TuningSpace,NewIndex)
+#define ITuningSpaceContainer_get_EnumTuningSpaces(This,ppEnum) (This)->lpVtbl->get_EnumTuningSpaces(This,ppEnum)
+#define ITuningSpaceContainer_Remove(This,Index) (This)->lpVtbl->Remove(This,Index)
+#define ITuningSpaceContainer_get_MaxCount(This,MaxCount) (This)->lpVtbl->get_MaxCount(This,MaxCount)
+#define ITuningSpaceContainer_put_MaxCount(This,MaxCount) (This)->lpVtbl->put_MaxCount(This,MaxCount)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ITuningSpaceContainer_QueryInterface(ITuningSpaceContainer* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ITuningSpaceContainer_AddRef(ITuningSpaceContainer* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ITuningSpaceContainer_Release(ITuningSpaceContainer* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT ITuningSpaceContainer_GetTypeInfoCount(ITuningSpaceContainer* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT ITuningSpaceContainer_GetTypeInfo(ITuningSpaceContainer* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT ITuningSpaceContainer_GetIDsOfNames(ITuningSpaceContainer* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT ITuningSpaceContainer_Invoke(ITuningSpaceContainer* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ITuningSpaceContainer methods ***/
+static FORCEINLINE HRESULT ITuningSpaceContainer_get_Count(ITuningSpaceContainer* This,LONG *Count) {
+    return This->lpVtbl->get_Count(This,Count);
+}
+static FORCEINLINE HRESULT ITuningSpaceContainer_get__NewEnum(ITuningSpaceContainer* This,IEnumVARIANT **NewEnum) {
+    return This->lpVtbl->get__NewEnum(This,NewEnum);
+}
+static FORCEINLINE HRESULT ITuningSpaceContainer_get_Item(ITuningSpaceContainer* This,VARIANT varIndex,ITuningSpace **TuningSpace) {
+    return This->lpVtbl->get_Item(This,varIndex,TuningSpace);
+}
+static FORCEINLINE HRESULT ITuningSpaceContainer_put_Item(ITuningSpaceContainer* This,VARIANT varIndex,ITuningSpace *TuningSpace) {
+    return This->lpVtbl->put_Item(This,varIndex,TuningSpace);
+}
+static FORCEINLINE HRESULT ITuningSpaceContainer_TuningSpacesForCLSID(ITuningSpaceContainer* This,BSTR SpaceCLSID,ITuningSpaces **NewColl) {
+    return This->lpVtbl->TuningSpacesForCLSID(This,SpaceCLSID,NewColl);
+}
+static FORCEINLINE HRESULT ITuningSpaceContainer__TuningSpacesForCLSID(ITuningSpaceContainer* This,REFCLSID SpaceCLSID,ITuningSpaces **NewColl) {
+    return This->lpVtbl->_TuningSpacesForCLSID(This,SpaceCLSID,NewColl);
+}
+static FORCEINLINE HRESULT ITuningSpaceContainer_TuningSpacesForName(ITuningSpaceContainer* This,BSTR Name,ITuningSpaces **NewColl) {
+    return This->lpVtbl->TuningSpacesForName(This,Name,NewColl);
+}
+static FORCEINLINE HRESULT ITuningSpaceContainer_FindID(ITuningSpaceContainer* This,ITuningSpace *TuningSpace,LONG *ID) {
+    return This->lpVtbl->FindID(This,TuningSpace,ID);
+}
+static FORCEINLINE HRESULT ITuningSpaceContainer_Add(ITuningSpaceContainer* This,ITuningSpace *TuningSpace,VARIANT *NewIndex) {
+    return This->lpVtbl->Add(This,TuningSpace,NewIndex);
+}
+static FORCEINLINE HRESULT ITuningSpaceContainer_get_EnumTuningSpaces(ITuningSpaceContainer* This,IEnumTuningSpaces **ppEnum) {
+    return This->lpVtbl->get_EnumTuningSpaces(This,ppEnum);
+}
+static FORCEINLINE HRESULT ITuningSpaceContainer_Remove(ITuningSpaceContainer* This,VARIANT Index) {
+    return This->lpVtbl->Remove(This,Index);
+}
+static FORCEINLINE HRESULT ITuningSpaceContainer_get_MaxCount(ITuningSpaceContainer* This,LONG *MaxCount) {
+    return This->lpVtbl->get_MaxCount(This,MaxCount);
+}
+static FORCEINLINE HRESULT ITuningSpaceContainer_put_MaxCount(ITuningSpaceContainer* This,LONG MaxCount) {
+    return This->lpVtbl->put_MaxCount(This,MaxCount);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITuningSpaceContainer_get_Count_Proxy(
+    ITuningSpaceContainer* This,
+    LONG *Count);
+void __RPC_STUB ITuningSpaceContainer_get_Count_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpaceContainer_get__NewEnum_Proxy(
+    ITuningSpaceContainer* This,
+    IEnumVARIANT **NewEnum);
+void __RPC_STUB ITuningSpaceContainer_get__NewEnum_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpaceContainer_get_Item_Proxy(
+    ITuningSpaceContainer* This,
+    VARIANT varIndex,
+    ITuningSpace **TuningSpace);
+void __RPC_STUB ITuningSpaceContainer_get_Item_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpaceContainer_put_Item_Proxy(
+    ITuningSpaceContainer* This,
+    VARIANT varIndex,
+    ITuningSpace *TuningSpace);
+void __RPC_STUB ITuningSpaceContainer_put_Item_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpaceContainer_TuningSpacesForCLSID_Proxy(
+    ITuningSpaceContainer* This,
+    BSTR SpaceCLSID,
+    ITuningSpaces **NewColl);
+void __RPC_STUB ITuningSpaceContainer_TuningSpacesForCLSID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpaceContainer__TuningSpacesForCLSID_Proxy(
+    ITuningSpaceContainer* This,
+    REFCLSID SpaceCLSID,
+    ITuningSpaces **NewColl);
+void __RPC_STUB ITuningSpaceContainer__TuningSpacesForCLSID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpaceContainer_TuningSpacesForName_Proxy(
+    ITuningSpaceContainer* This,
+    BSTR Name,
+    ITuningSpaces **NewColl);
+void __RPC_STUB ITuningSpaceContainer_TuningSpacesForName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpaceContainer_FindID_Proxy(
+    ITuningSpaceContainer* This,
+    ITuningSpace *TuningSpace,
+    LONG *ID);
+void __RPC_STUB ITuningSpaceContainer_FindID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpaceContainer_Add_Proxy(
+    ITuningSpaceContainer* This,
+    ITuningSpace *TuningSpace,
+    VARIANT *NewIndex);
+void __RPC_STUB ITuningSpaceContainer_Add_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpaceContainer_get_EnumTuningSpaces_Proxy(
+    ITuningSpaceContainer* This,
+    IEnumTuningSpaces **ppEnum);
+void __RPC_STUB ITuningSpaceContainer_get_EnumTuningSpaces_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpaceContainer_Remove_Proxy(
+    ITuningSpaceContainer* This,
+    VARIANT Index);
+void __RPC_STUB ITuningSpaceContainer_Remove_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpaceContainer_get_MaxCount_Proxy(
+    ITuningSpaceContainer* This,
+    LONG *MaxCount);
+void __RPC_STUB ITuningSpaceContainer_get_MaxCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpaceContainer_put_MaxCount_Proxy(
+    ITuningSpaceContainer* This,
+    LONG MaxCount);
+void __RPC_STUB ITuningSpaceContainer_put_MaxCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ITuningSpaceContainer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITuningSpace interface
+ */
+#ifndef __ITuningSpace_INTERFACE_DEFINED__
+#define __ITuningSpace_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITuningSpace, 0x061c6e30, 0xe622, 0x11d2, 0x94,0x93, 0x00,0xc0,0x4f,0x72,0xd9,0x80);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("061c6e30-e622-11d2-9493-00c04f72d980")
+ITuningSpace : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_UniqueName(
+        BSTR *Name) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_UniqueName(
+        BSTR Name) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_FriendlyName(
+        BSTR *Name) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_FriendlyName(
+        BSTR Name) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_CLSID(
+        BSTR *SpaceCLSID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_NetworkType(
+        BSTR *NetworkTypeGuid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_NetworkType(
+        BSTR NetworkTypeGuid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get__NetworkType(
+        GUID *NetworkTypeGuid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put__NetworkType(
+        REFCLSID NetworkTypeGuid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateTuneRequest(
+        ITuneRequest **TuneRequest) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumCategoryGUIDs(
+        IEnumGUID **ppEnum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumDeviceMonikers(
+        IEnumMoniker **ppEnum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_DefaultPreferredComponentTypes(
+        IComponentTypes **ComponentTypes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_DefaultPreferredComponentTypes(
+        IComponentTypes *NewComponentTypes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_FrequencyMapping(
+        BSTR *pMapping) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_FrequencyMapping(
+        BSTR Mapping) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_DefaultLocator(
+        ILocator **LocatorVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_DefaultLocator(
+        ILocator *LocatorVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        ITuningSpace **NewTS) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITuningSpace, 0x061c6e30, 0xe622, 0x11d2, 0x94,0x93, 0x00,0xc0,0x4f,0x72,0xd9,0x80)
+#endif
+#else
+typedef struct ITuningSpaceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITuningSpace* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITuningSpace* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITuningSpace* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        ITuningSpace* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        ITuningSpace* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        ITuningSpace* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        ITuningSpace* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ITuningSpace methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_UniqueName)(
+        ITuningSpace* This,
+        BSTR *Name);
+
+    HRESULT (STDMETHODCALLTYPE *put_UniqueName)(
+        ITuningSpace* This,
+        BSTR Name);
+
+    HRESULT (STDMETHODCALLTYPE *get_FriendlyName)(
+        ITuningSpace* This,
+        BSTR *Name);
+
+    HRESULT (STDMETHODCALLTYPE *put_FriendlyName)(
+        ITuningSpace* This,
+        BSTR Name);
+
+    HRESULT (STDMETHODCALLTYPE *get_CLSID)(
+        ITuningSpace* This,
+        BSTR *SpaceCLSID);
+
+    HRESULT (STDMETHODCALLTYPE *get_NetworkType)(
+        ITuningSpace* This,
+        BSTR *NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put_NetworkType)(
+        ITuningSpace* This,
+        BSTR NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *get__NetworkType)(
+        ITuningSpace* This,
+        GUID *NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put__NetworkType)(
+        ITuningSpace* This,
+        REFCLSID NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTuneRequest)(
+        ITuningSpace* This,
+        ITuneRequest **TuneRequest);
+
+    HRESULT (STDMETHODCALLTYPE *EnumCategoryGUIDs)(
+        ITuningSpace* This,
+        IEnumGUID **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *EnumDeviceMonikers)(
+        ITuningSpace* This,
+        IEnumMoniker **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *get_DefaultPreferredComponentTypes)(
+        ITuningSpace* This,
+        IComponentTypes **ComponentTypes);
+
+    HRESULT (STDMETHODCALLTYPE *put_DefaultPreferredComponentTypes)(
+        ITuningSpace* This,
+        IComponentTypes *NewComponentTypes);
+
+    HRESULT (STDMETHODCALLTYPE *get_FrequencyMapping)(
+        ITuningSpace* This,
+        BSTR *pMapping);
+
+    HRESULT (STDMETHODCALLTYPE *put_FrequencyMapping)(
+        ITuningSpace* This,
+        BSTR Mapping);
+
+    HRESULT (STDMETHODCALLTYPE *get_DefaultLocator)(
+        ITuningSpace* This,
+        ILocator **LocatorVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_DefaultLocator)(
+        ITuningSpace* This,
+        ILocator *LocatorVal);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        ITuningSpace* This,
+        ITuningSpace **NewTS);
+
+    END_INTERFACE
+} ITuningSpaceVtbl;
+interface ITuningSpace {
+    CONST_VTBL ITuningSpaceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
 #define ITuningSpace_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define ITuningSpace_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define ITuningSpace_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
 #define ITuningSpace_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
 #define ITuningSpace_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
 #define ITuningSpace_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
 #define ITuningSpace_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
-#define ITuningSpace_Clone(This,ppNewTS) (This)->lpVtbl->Clone(This,ppNewTS)
-#define ITuningSpace_CreateTuneRequest(This,ppTuneRequest) (This)->lpVtbl->CreateTuneRequest(This,ppTuneRequest)
+/*** ITuningSpace methods ***/
+#define ITuningSpace_get_UniqueName(This,Name) (This)->lpVtbl->get_UniqueName(This,Name)
+#define ITuningSpace_put_UniqueName(This,Name) (This)->lpVtbl->put_UniqueName(This,Name)
+#define ITuningSpace_get_FriendlyName(This,Name) (This)->lpVtbl->get_FriendlyName(This,Name)
+#define ITuningSpace_put_FriendlyName(This,Name) (This)->lpVtbl->put_FriendlyName(This,Name)
+#define ITuningSpace_get_CLSID(This,SpaceCLSID) (This)->lpVtbl->get_CLSID(This,SpaceCLSID)
+#define ITuningSpace_get_NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->get_NetworkType(This,NetworkTypeGuid)
+#define ITuningSpace_put_NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->put_NetworkType(This,NetworkTypeGuid)
+#define ITuningSpace_get__NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->get__NetworkType(This,NetworkTypeGuid)
+#define ITuningSpace_put__NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->put__NetworkType(This,NetworkTypeGuid)
+#define ITuningSpace_CreateTuneRequest(This,TuneRequest) (This)->lpVtbl->CreateTuneRequest(This,TuneRequest)
 #define ITuningSpace_EnumCategoryGUIDs(This,ppEnum) (This)->lpVtbl->EnumCategoryGUIDs(This,ppEnum)
 #define ITuningSpace_EnumDeviceMonikers(This,ppEnum) (This)->lpVtbl->EnumDeviceMonikers(This,ppEnum)
-#define ITuningSpace_get__NetworkType(This,pNetworkTypeGuid) (This)->lpVtbl->get__NetworkType(This,pNetworkTypeGuid)
-#define ITuningSpace_get_CLSID(This,pSpaceCLSID) (This)->lpVtbl->get_CLSID(This,pSpaceCLSID)
-#define ITuningSpace_get_DefaultLocator(This,ppLocatorVal) (This)->lpVtbl->get_DefaultLocator(This,ppLocatorVal)
-#define ITuningSpace_get_DefaultPreferredComponentTypes(This,ppComponentTypes) (This)->lpVtbl->get_DefaultPreferredComponentTypes(This,ppComponentTypes)
+#define ITuningSpace_get_DefaultPreferredComponentTypes(This,ComponentTypes) (This)->lpVtbl->get_DefaultPreferredComponentTypes(This,ComponentTypes)
+#define ITuningSpace_put_DefaultPreferredComponentTypes(This,NewComponentTypes) (This)->lpVtbl->put_DefaultPreferredComponentTypes(This,NewComponentTypes)
 #define ITuningSpace_get_FrequencyMapping(This,pMapping) (This)->lpVtbl->get_FrequencyMapping(This,pMapping)
-#define ITuningSpace_get_FriendlyName(This,pName) (This)->lpVtbl->get_FriendlyName(This,pName)
-#define ITuningSpace_get_NetworkType(This,pNetworkTypeGuid) (This)->lpVtbl->get_NetworkType(This,pNetworkTypeGuid)
-#define ITuningSpace_get_UniqueName(This,pName) (This)->lpVtbl->get_UniqueName(This,pName)
-#define ITuningSpace_put__NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->put__NetworkType(This,NetworkTypeGuid)
-#define ITuningSpace_put_DefaultLocator(This,pLocatorVal) (This)->lpVtbl->put_DefaultLocator(This,pLocatorVal)
-#define ITuningSpace_put_DefaultPreferredComponentTypes(This,pNewComponentTypes) (This)->lpVtbl->put_DefaultPreferredComponentTypes(This,pNewComponentTypes)
 #define ITuningSpace_put_FrequencyMapping(This,Mapping) (This)->lpVtbl->put_FrequencyMapping(This,Mapping)
-#define ITuningSpace_put_FriendlyName(This,Name) (This)->lpVtbl->put_FriendlyName(This,Name)
-#define ITuningSpace_put_NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->put_NetworkType(This,NetworkTypeGuid)
-#define ITuningSpace_put_UniqueName(This,Name) (This)->lpVtbl->put_UniqueName(This,Name)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IComponentTypes
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
+#define ITuningSpace_get_DefaultLocator(This,LocatorVal) (This)->lpVtbl->get_DefaultLocator(This,LocatorVal)
+#define ITuningSpace_put_DefaultLocator(This,LocatorVal) (This)->lpVtbl->put_DefaultLocator(This,LocatorVal)
+#define ITuningSpace_Clone(This,NewTS) (This)->lpVtbl->Clone(This,NewTS)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ITuningSpace_QueryInterface(ITuningSpace* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ITuningSpace_AddRef(ITuningSpace* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ITuningSpace_Release(ITuningSpace* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT ITuningSpace_GetTypeInfoCount(ITuningSpace* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT ITuningSpace_GetTypeInfo(ITuningSpace* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT ITuningSpace_GetIDsOfNames(ITuningSpace* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT ITuningSpace_Invoke(ITuningSpace* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ITuningSpace methods ***/
+static FORCEINLINE HRESULT ITuningSpace_get_UniqueName(ITuningSpace* This,BSTR *Name) {
+    return This->lpVtbl->get_UniqueName(This,Name);
+}
+static FORCEINLINE HRESULT ITuningSpace_put_UniqueName(ITuningSpace* This,BSTR Name) {
+    return This->lpVtbl->put_UniqueName(This,Name);
+}
+static FORCEINLINE HRESULT ITuningSpace_get_FriendlyName(ITuningSpace* This,BSTR *Name) {
+    return This->lpVtbl->get_FriendlyName(This,Name);
+}
+static FORCEINLINE HRESULT ITuningSpace_put_FriendlyName(ITuningSpace* This,BSTR Name) {
+    return This->lpVtbl->put_FriendlyName(This,Name);
+}
+static FORCEINLINE HRESULT ITuningSpace_get_CLSID(ITuningSpace* This,BSTR *SpaceCLSID) {
+    return This->lpVtbl->get_CLSID(This,SpaceCLSID);
+}
+static FORCEINLINE HRESULT ITuningSpace_get_NetworkType(ITuningSpace* This,BSTR *NetworkTypeGuid) {
+    return This->lpVtbl->get_NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT ITuningSpace_put_NetworkType(ITuningSpace* This,BSTR NetworkTypeGuid) {
+    return This->lpVtbl->put_NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT ITuningSpace_get__NetworkType(ITuningSpace* This,GUID *NetworkTypeGuid) {
+    return This->lpVtbl->get__NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT ITuningSpace_put__NetworkType(ITuningSpace* This,REFCLSID NetworkTypeGuid) {
+    return This->lpVtbl->put__NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT ITuningSpace_CreateTuneRequest(ITuningSpace* This,ITuneRequest **TuneRequest) {
+    return This->lpVtbl->CreateTuneRequest(This,TuneRequest);
+}
+static FORCEINLINE HRESULT ITuningSpace_EnumCategoryGUIDs(ITuningSpace* This,IEnumGUID **ppEnum) {
+    return This->lpVtbl->EnumCategoryGUIDs(This,ppEnum);
+}
+static FORCEINLINE HRESULT ITuningSpace_EnumDeviceMonikers(ITuningSpace* This,IEnumMoniker **ppEnum) {
+    return This->lpVtbl->EnumDeviceMonikers(This,ppEnum);
+}
+static FORCEINLINE HRESULT ITuningSpace_get_DefaultPreferredComponentTypes(ITuningSpace* This,IComponentTypes **ComponentTypes) {
+    return This->lpVtbl->get_DefaultPreferredComponentTypes(This,ComponentTypes);
+}
+static FORCEINLINE HRESULT ITuningSpace_put_DefaultPreferredComponentTypes(ITuningSpace* This,IComponentTypes *NewComponentTypes) {
+    return This->lpVtbl->put_DefaultPreferredComponentTypes(This,NewComponentTypes);
+}
+static FORCEINLINE HRESULT ITuningSpace_get_FrequencyMapping(ITuningSpace* This,BSTR *pMapping) {
+    return This->lpVtbl->get_FrequencyMapping(This,pMapping);
+}
+static FORCEINLINE HRESULT ITuningSpace_put_FrequencyMapping(ITuningSpace* This,BSTR Mapping) {
+    return This->lpVtbl->put_FrequencyMapping(This,Mapping);
+}
+static FORCEINLINE HRESULT ITuningSpace_get_DefaultLocator(ITuningSpace* This,ILocator **LocatorVal) {
+    return This->lpVtbl->get_DefaultLocator(This,LocatorVal);
+}
+static FORCEINLINE HRESULT ITuningSpace_put_DefaultLocator(ITuningSpace* This,ILocator *LocatorVal) {
+    return This->lpVtbl->put_DefaultLocator(This,LocatorVal);
+}
+static FORCEINLINE HRESULT ITuningSpace_Clone(ITuningSpace* This,ITuningSpace **NewTS) {
+    return This->lpVtbl->Clone(This,NewTS);
+}
 #endif
-DECLARE_INTERFACE_(IComponentTypes,IDispatch)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITuningSpace_get_UniqueName_Proxy(
+    ITuningSpace* This,
+    BSTR *Name);
+void __RPC_STUB ITuningSpace_get_UniqueName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpace_put_UniqueName_Proxy(
+    ITuningSpace* This,
+    BSTR Name);
+void __RPC_STUB ITuningSpace_put_UniqueName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpace_get_FriendlyName_Proxy(
+    ITuningSpace* This,
+    BSTR *Name);
+void __RPC_STUB ITuningSpace_get_FriendlyName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpace_put_FriendlyName_Proxy(
+    ITuningSpace* This,
+    BSTR Name);
+void __RPC_STUB ITuningSpace_put_FriendlyName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpace_get_CLSID_Proxy(
+    ITuningSpace* This,
+    BSTR *SpaceCLSID);
+void __RPC_STUB ITuningSpace_get_CLSID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpace_get_NetworkType_Proxy(
+    ITuningSpace* This,
+    BSTR *NetworkTypeGuid);
+void __RPC_STUB ITuningSpace_get_NetworkType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpace_put_NetworkType_Proxy(
+    ITuningSpace* This,
+    BSTR NetworkTypeGuid);
+void __RPC_STUB ITuningSpace_put_NetworkType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpace_get__NetworkType_Proxy(
+    ITuningSpace* This,
+    GUID *NetworkTypeGuid);
+void __RPC_STUB ITuningSpace_get__NetworkType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpace_put__NetworkType_Proxy(
+    ITuningSpace* This,
+    REFCLSID NetworkTypeGuid);
+void __RPC_STUB ITuningSpace_put__NetworkType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpace_CreateTuneRequest_Proxy(
+    ITuningSpace* This,
+    ITuneRequest **TuneRequest);
+void __RPC_STUB ITuningSpace_CreateTuneRequest_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpace_EnumCategoryGUIDs_Proxy(
+    ITuningSpace* This,
+    IEnumGUID **ppEnum);
+void __RPC_STUB ITuningSpace_EnumCategoryGUIDs_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpace_EnumDeviceMonikers_Proxy(
+    ITuningSpace* This,
+    IEnumMoniker **ppEnum);
+void __RPC_STUB ITuningSpace_EnumDeviceMonikers_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpace_get_DefaultPreferredComponentTypes_Proxy(
+    ITuningSpace* This,
+    IComponentTypes **ComponentTypes);
+void __RPC_STUB ITuningSpace_get_DefaultPreferredComponentTypes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpace_put_DefaultPreferredComponentTypes_Proxy(
+    ITuningSpace* This,
+    IComponentTypes *NewComponentTypes);
+void __RPC_STUB ITuningSpace_put_DefaultPreferredComponentTypes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpace_get_FrequencyMapping_Proxy(
+    ITuningSpace* This,
+    BSTR *pMapping);
+void __RPC_STUB ITuningSpace_get_FrequencyMapping_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpace_put_FrequencyMapping_Proxy(
+    ITuningSpace* This,
+    BSTR Mapping);
+void __RPC_STUB ITuningSpace_put_FrequencyMapping_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpace_get_DefaultLocator_Proxy(
+    ITuningSpace* This,
+    ILocator **LocatorVal);
+void __RPC_STUB ITuningSpace_get_DefaultLocator_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpace_put_DefaultLocator_Proxy(
+    ITuningSpace* This,
+    ILocator *LocatorVal);
+void __RPC_STUB ITuningSpace_put_DefaultLocator_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuningSpace_Clone_Proxy(
+    ITuningSpace* This,
+    ITuningSpace **NewTS);
+void __RPC_STUB ITuningSpace_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ITuningSpace_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumTuningSpaces interface
+ */
+#ifndef __IEnumTuningSpaces_INTERFACE_DEFINED__
+#define __IEnumTuningSpaces_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IEnumTuningSpaces, 0x8b8eb248, 0xfc2b, 0x11d2, 0x9d,0x8c, 0x00,0xc0,0x4f,0x72,0xd9,0x80);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("8b8eb248-fc2b-11d2-9d8c-00c04f72d980")
+IEnumTuningSpaces : public IUnknown
 {
+    virtual HRESULT STDMETHODCALLTYPE Next(
+        ULONG celt,
+        ITuningSpace **rgelt,
+        ULONG *pceltFetched) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Skip(
+        ULONG celt) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IEnumTuningSpaces **ppEnum) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IEnumTuningSpaces, 0x8b8eb248, 0xfc2b, 0x11d2, 0x9d,0x8c, 0x00,0xc0,0x4f,0x72,0xd9,0x80)
+#endif
+#else
+typedef struct IEnumTuningSpacesVtbl {
     BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IEnumTuningSpaces* This,
+        REFIID riid,
+        void **ppvObject);
 
-    /* IDispatch methods */
-    STDMETHOD_(HRESULT,GetTypeInfoCount)(THIS_ UINT *pctinfo) PURE;
-    STDMETHOD_(HRESULT,GetTypeInfo)(THIS_ UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) PURE;
-    STDMETHOD_(HRESULT,GetIDsOfNames)(THIS_ REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) PURE;
-    STDMETHOD_(HRESULT,Invoke)(THIS_ DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) PURE;
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IEnumTuningSpaces* This);
 
-    /* IComponentTypes methods */
-    STDMETHOD_(HRESULT,Add)(THIS_ IComponentType *pComponentType,VARIANT *pNewIndex) PURE;
-    STDMETHOD_(HRESULT,Clone)(THIS_ IComponentTypes **ppNewList) PURE;
-    STDMETHOD_(HRESULT,EnumComponentTypes)(THIS_ IEnumComponentTypes **ppNewEnum) PURE;
-    STDMETHOD_(HRESULT,get__NewEnum)(THIS_ IEnumVARIANT **ppNewEnum) PURE;
-    STDMETHOD_(HRESULT,get_Count)(THIS_ __LONG32 *pCount) PURE;
-    STDMETHOD_(HRESULT,get_Item)(THIS_ VARIANT Index,IComponentType **ppComponentType) PURE;
-    STDMETHOD_(HRESULT,Remove)(THIS_ VARIANT Index) PURE;
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IEnumTuningSpaces* This);
+
+    /*** IEnumTuningSpaces methods ***/
+    HRESULT (STDMETHODCALLTYPE *Next)(
+        IEnumTuningSpaces* This,
+        ULONG celt,
+        ITuningSpace **rgelt,
+        ULONG *pceltFetched);
+
+    HRESULT (STDMETHODCALLTYPE *Skip)(
+        IEnumTuningSpaces* This,
+        ULONG celt);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        IEnumTuningSpaces* This);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IEnumTuningSpaces* This,
+        IEnumTuningSpaces **ppEnum);
 
     END_INTERFACE
+} IEnumTuningSpacesVtbl;
+interface IEnumTuningSpaces {
+    CONST_VTBL IEnumTuningSpacesVtbl* lpVtbl;
 };
-#ifdef COBJMACROS
-#define IComponentTypes_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IComponentTypes_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IComponentTypes_Release(This) (This)->lpVtbl->Release(This)
-#define IComponentTypes_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
-#define IComponentTypes_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
-#define IComponentTypes_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
-#define IComponentTypes_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
-#define IComponentTypes_Add(This,pComponentType,pNewIndex) (This)->lpVtbl->Add(This,pComponentType,pNewIndex)
-#define IComponentTypes_Clone(This,ppNewList) (This)->lpVtbl->Clone(This,ppNewList)
-#define IComponentTypes_EnumComponentTypes(This,ppNewEnum) (This)->lpVtbl->EnumComponentTypes(This,ppNewEnum)
-#define IComponentTypes_get__NewEnum(This,ppNewEnum) (This)->lpVtbl->get__NewEnum(This,ppNewEnum)
-#define IComponentTypes_get_Count(This,pCount) (This)->lpVtbl->get_Count(This,pCount)
-#define IComponentTypes_get_Item(This,Index,ppComponentType) (This)->lpVtbl->get_Item(This,Index,ppComponentType)
-#define IComponentTypes_Remove(This,Index) (This)->lpVtbl->Remove(This,Index)
-#endif /*COBJMACROS*/
 
-/* Fixme: Double underscored ,methods are C++ only */
-#undef  INTERFACE
-#define INTERFACE IComponentType
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IEnumTuningSpaces_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumTuningSpaces_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumTuningSpaces_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumTuningSpaces methods ***/
+#define IEnumTuningSpaces_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)
+#define IEnumTuningSpaces_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumTuningSpaces_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumTuningSpaces_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IEnumTuningSpaces_QueryInterface(IEnumTuningSpaces* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IEnumTuningSpaces_AddRef(IEnumTuningSpaces* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IEnumTuningSpaces_Release(IEnumTuningSpaces* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IEnumTuningSpaces methods ***/
+static FORCEINLINE HRESULT IEnumTuningSpaces_Next(IEnumTuningSpaces* This,ULONG celt,ITuningSpace **rgelt,ULONG *pceltFetched) {
+    return This->lpVtbl->Next(This,celt,rgelt,pceltFetched);
+}
+static FORCEINLINE HRESULT IEnumTuningSpaces_Skip(IEnumTuningSpaces* This,ULONG celt) {
+    return This->lpVtbl->Skip(This,celt);
+}
+static FORCEINLINE HRESULT IEnumTuningSpaces_Reset(IEnumTuningSpaces* This) {
+    return This->lpVtbl->Reset(This);
+}
+static FORCEINLINE HRESULT IEnumTuningSpaces_Clone(IEnumTuningSpaces* This,IEnumTuningSpaces **ppEnum) {
+    return This->lpVtbl->Clone(This,ppEnum);
+}
 #endif
-DECLARE_INTERFACE_(IComponentType,IDispatch)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumTuningSpaces_Next_Proxy(
+    IEnumTuningSpaces* This,
+    ULONG celt,
+    ITuningSpace **rgelt,
+    ULONG *pceltFetched);
+void __RPC_STUB IEnumTuningSpaces_Next_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumTuningSpaces_Skip_Proxy(
+    IEnumTuningSpaces* This,
+    ULONG celt);
+void __RPC_STUB IEnumTuningSpaces_Skip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumTuningSpaces_Reset_Proxy(
+    IEnumTuningSpaces* This);
+void __RPC_STUB IEnumTuningSpaces_Reset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumTuningSpaces_Clone_Proxy(
+    IEnumTuningSpaces* This,
+    IEnumTuningSpaces **ppEnum);
+void __RPC_STUB IEnumTuningSpaces_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IEnumTuningSpaces_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDVBTuningSpace interface
+ */
+#ifndef __IDVBTuningSpace_INTERFACE_DEFINED__
+#define __IDVBTuningSpace_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDVBTuningSpace, 0xada0b268, 0x3b19, 0x4e5b, 0xac,0xc4, 0x49,0xf8,0x52,0xbe,0x13,0xba);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("ada0b268-3b19-4e5b-acc4-49f852be13ba")
+IDVBTuningSpace : public ITuningSpace
 {
+    virtual HRESULT STDMETHODCALLTYPE get_SystemType(
+        DVBSystemType *SysType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_SystemType(
+        DVBSystemType SysType) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDVBTuningSpace, 0xada0b268, 0x3b19, 0x4e5b, 0xac,0xc4, 0x49,0xf8,0x52,0xbe,0x13,0xba)
+#endif
+#else
+typedef struct IDVBTuningSpaceVtbl {
     BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDVBTuningSpace* This,
+        REFIID riid,
+        void **ppvObject);
 
-    /* IDispatch methods */
-    STDMETHOD_(HRESULT,GetTypeInfoCount)(THIS_ UINT *pctinfo) PURE;
-    STDMETHOD_(HRESULT,GetTypeInfo)(THIS_ UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) PURE;
-    STDMETHOD_(HRESULT,GetIDsOfNames)(THIS_ REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) PURE;
-    STDMETHOD_(HRESULT,Invoke)(THIS_ DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) PURE;
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDVBTuningSpace* This);
 
-    /* IComponentType methods */
-    STDMETHOD_(HRESULT,Clone)(THIS_ IComponentType **ppNewCT) PURE;
-    STDMETHOD_(HRESULT,get__MediaFormatType)(THIS_ GUID *pMediaFormatType) PURE;
-    STDMETHOD_(HRESULT,get__MediaMajorType)(THIS_ GUID *MediaMajorType) PURE;
-    STDMETHOD_(HRESULT,get__MediaSubType)(THIS_ GUID *pMediaSubType) PURE;
-    STDMETHOD_(HRESULT,get_Category)(THIS_ ComponentCategory *pCategory) PURE;
-    STDMETHOD_(HRESULT,get_MediaFormatType)(THIS_ BSTR *pMediaFormatType) PURE;
-    STDMETHOD_(HRESULT,get_MediaMajorType)(THIS_ BSTR *pMediaMajorType) PURE;
-    STDMETHOD_(HRESULT,get_MediaSubType)(THIS_ BSTR *pMediaSubType) PURE;
-    STDMETHOD_(HRESULT,get_MediaType)(THIS_ AM_MEDIA_TYPE *pMediaType) PURE;
-    STDMETHOD_(HRESULT,put__MediaFormatType)(THIS_ REFCLSID MediaFormatType) PURE;
-    STDMETHOD_(HRESULT,put__MediaMajorType)(THIS_ REFCLSID MediaMajorType) PURE;
-    STDMETHOD_(HRESULT,put__MediaSubType)(THIS_ REFCLSID MediaSubType) PURE;
-    STDMETHOD_(HRESULT,put_Category)(THIS_ ComponentCategory Category) PURE;
-    STDMETHOD_(HRESULT,put_MediaFormatType)(THIS_ BSTR MediaFormatType) PURE;
-    STDMETHOD_(HRESULT,put_MediaMajorType)(THIS_ BSTR MediaMajorType) PURE;
-    STDMETHOD_(HRESULT,put_MediaSubType)(THIS_ BSTR MediaSubType) PURE;
-    STDMETHOD_(HRESULT,put_MediaType)(THIS_ AM_MEDIA_TYPE MediaType) PURE;
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDVBTuningSpace* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IDVBTuningSpace* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IDVBTuningSpace* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IDVBTuningSpace* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IDVBTuningSpace* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ITuningSpace methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_UniqueName)(
+        IDVBTuningSpace* This,
+        BSTR *Name);
+
+    HRESULT (STDMETHODCALLTYPE *put_UniqueName)(
+        IDVBTuningSpace* This,
+        BSTR Name);
+
+    HRESULT (STDMETHODCALLTYPE *get_FriendlyName)(
+        IDVBTuningSpace* This,
+        BSTR *Name);
+
+    HRESULT (STDMETHODCALLTYPE *put_FriendlyName)(
+        IDVBTuningSpace* This,
+        BSTR Name);
+
+    HRESULT (STDMETHODCALLTYPE *get_CLSID)(
+        IDVBTuningSpace* This,
+        BSTR *SpaceCLSID);
+
+    HRESULT (STDMETHODCALLTYPE *get_NetworkType)(
+        IDVBTuningSpace* This,
+        BSTR *NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put_NetworkType)(
+        IDVBTuningSpace* This,
+        BSTR NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *get__NetworkType)(
+        IDVBTuningSpace* This,
+        GUID *NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put__NetworkType)(
+        IDVBTuningSpace* This,
+        REFCLSID NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTuneRequest)(
+        IDVBTuningSpace* This,
+        ITuneRequest **TuneRequest);
+
+    HRESULT (STDMETHODCALLTYPE *EnumCategoryGUIDs)(
+        IDVBTuningSpace* This,
+        IEnumGUID **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *EnumDeviceMonikers)(
+        IDVBTuningSpace* This,
+        IEnumMoniker **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *get_DefaultPreferredComponentTypes)(
+        IDVBTuningSpace* This,
+        IComponentTypes **ComponentTypes);
+
+    HRESULT (STDMETHODCALLTYPE *put_DefaultPreferredComponentTypes)(
+        IDVBTuningSpace* This,
+        IComponentTypes *NewComponentTypes);
+
+    HRESULT (STDMETHODCALLTYPE *get_FrequencyMapping)(
+        IDVBTuningSpace* This,
+        BSTR *pMapping);
+
+    HRESULT (STDMETHODCALLTYPE *put_FrequencyMapping)(
+        IDVBTuningSpace* This,
+        BSTR Mapping);
+
+    HRESULT (STDMETHODCALLTYPE *get_DefaultLocator)(
+        IDVBTuningSpace* This,
+        ILocator **LocatorVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_DefaultLocator)(
+        IDVBTuningSpace* This,
+        ILocator *LocatorVal);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IDVBTuningSpace* This,
+        ITuningSpace **NewTS);
+
+    /*** IDVBTuningSpace methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_SystemType)(
+        IDVBTuningSpace* This,
+        DVBSystemType *SysType);
+
+    HRESULT (STDMETHODCALLTYPE *put_SystemType)(
+        IDVBTuningSpace* This,
+        DVBSystemType SysType);
 
     END_INTERFACE
+} IDVBTuningSpaceVtbl;
+interface IDVBTuningSpace {
+    CONST_VTBL IDVBTuningSpaceVtbl* lpVtbl;
 };
+
 #ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDVBTuningSpace_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDVBTuningSpace_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDVBTuningSpace_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IDVBTuningSpace_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IDVBTuningSpace_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IDVBTuningSpace_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IDVBTuningSpace_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ITuningSpace methods ***/
+#define IDVBTuningSpace_get_UniqueName(This,Name) (This)->lpVtbl->get_UniqueName(This,Name)
+#define IDVBTuningSpace_put_UniqueName(This,Name) (This)->lpVtbl->put_UniqueName(This,Name)
+#define IDVBTuningSpace_get_FriendlyName(This,Name) (This)->lpVtbl->get_FriendlyName(This,Name)
+#define IDVBTuningSpace_put_FriendlyName(This,Name) (This)->lpVtbl->put_FriendlyName(This,Name)
+#define IDVBTuningSpace_get_CLSID(This,SpaceCLSID) (This)->lpVtbl->get_CLSID(This,SpaceCLSID)
+#define IDVBTuningSpace_get_NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->get_NetworkType(This,NetworkTypeGuid)
+#define IDVBTuningSpace_put_NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->put_NetworkType(This,NetworkTypeGuid)
+#define IDVBTuningSpace_get__NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->get__NetworkType(This,NetworkTypeGuid)
+#define IDVBTuningSpace_put__NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->put__NetworkType(This,NetworkTypeGuid)
+#define IDVBTuningSpace_CreateTuneRequest(This,TuneRequest) (This)->lpVtbl->CreateTuneRequest(This,TuneRequest)
+#define IDVBTuningSpace_EnumCategoryGUIDs(This,ppEnum) (This)->lpVtbl->EnumCategoryGUIDs(This,ppEnum)
+#define IDVBTuningSpace_EnumDeviceMonikers(This,ppEnum) (This)->lpVtbl->EnumDeviceMonikers(This,ppEnum)
+#define IDVBTuningSpace_get_DefaultPreferredComponentTypes(This,ComponentTypes) (This)->lpVtbl->get_DefaultPreferredComponentTypes(This,ComponentTypes)
+#define IDVBTuningSpace_put_DefaultPreferredComponentTypes(This,NewComponentTypes) (This)->lpVtbl->put_DefaultPreferredComponentTypes(This,NewComponentTypes)
+#define IDVBTuningSpace_get_FrequencyMapping(This,pMapping) (This)->lpVtbl->get_FrequencyMapping(This,pMapping)
+#define IDVBTuningSpace_put_FrequencyMapping(This,Mapping) (This)->lpVtbl->put_FrequencyMapping(This,Mapping)
+#define IDVBTuningSpace_get_DefaultLocator(This,LocatorVal) (This)->lpVtbl->get_DefaultLocator(This,LocatorVal)
+#define IDVBTuningSpace_put_DefaultLocator(This,LocatorVal) (This)->lpVtbl->put_DefaultLocator(This,LocatorVal)
+#define IDVBTuningSpace_Clone(This,NewTS) (This)->lpVtbl->Clone(This,NewTS)
+/*** IDVBTuningSpace methods ***/
+#define IDVBTuningSpace_get_SystemType(This,SysType) (This)->lpVtbl->get_SystemType(This,SysType)
+#define IDVBTuningSpace_put_SystemType(This,SysType) (This)->lpVtbl->put_SystemType(This,SysType)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDVBTuningSpace_QueryInterface(IDVBTuningSpace* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDVBTuningSpace_AddRef(IDVBTuningSpace* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDVBTuningSpace_Release(IDVBTuningSpace* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IDVBTuningSpace_GetTypeInfoCount(IDVBTuningSpace* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace_GetTypeInfo(IDVBTuningSpace* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace_GetIDsOfNames(IDVBTuningSpace* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace_Invoke(IDVBTuningSpace* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ITuningSpace methods ***/
+static FORCEINLINE HRESULT IDVBTuningSpace_get_UniqueName(IDVBTuningSpace* This,BSTR *Name) {
+    return This->lpVtbl->get_UniqueName(This,Name);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace_put_UniqueName(IDVBTuningSpace* This,BSTR Name) {
+    return This->lpVtbl->put_UniqueName(This,Name);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace_get_FriendlyName(IDVBTuningSpace* This,BSTR *Name) {
+    return This->lpVtbl->get_FriendlyName(This,Name);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace_put_FriendlyName(IDVBTuningSpace* This,BSTR Name) {
+    return This->lpVtbl->put_FriendlyName(This,Name);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace_get_CLSID(IDVBTuningSpace* This,BSTR *SpaceCLSID) {
+    return This->lpVtbl->get_CLSID(This,SpaceCLSID);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace_get_NetworkType(IDVBTuningSpace* This,BSTR *NetworkTypeGuid) {
+    return This->lpVtbl->get_NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace_put_NetworkType(IDVBTuningSpace* This,BSTR NetworkTypeGuid) {
+    return This->lpVtbl->put_NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace_get__NetworkType(IDVBTuningSpace* This,GUID *NetworkTypeGuid) {
+    return This->lpVtbl->get__NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace_put__NetworkType(IDVBTuningSpace* This,REFCLSID NetworkTypeGuid) {
+    return This->lpVtbl->put__NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace_CreateTuneRequest(IDVBTuningSpace* This,ITuneRequest **TuneRequest) {
+    return This->lpVtbl->CreateTuneRequest(This,TuneRequest);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace_EnumCategoryGUIDs(IDVBTuningSpace* This,IEnumGUID **ppEnum) {
+    return This->lpVtbl->EnumCategoryGUIDs(This,ppEnum);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace_EnumDeviceMonikers(IDVBTuningSpace* This,IEnumMoniker **ppEnum) {
+    return This->lpVtbl->EnumDeviceMonikers(This,ppEnum);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace_get_DefaultPreferredComponentTypes(IDVBTuningSpace* This,IComponentTypes **ComponentTypes) {
+    return This->lpVtbl->get_DefaultPreferredComponentTypes(This,ComponentTypes);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace_put_DefaultPreferredComponentTypes(IDVBTuningSpace* This,IComponentTypes *NewComponentTypes) {
+    return This->lpVtbl->put_DefaultPreferredComponentTypes(This,NewComponentTypes);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace_get_FrequencyMapping(IDVBTuningSpace* This,BSTR *pMapping) {
+    return This->lpVtbl->get_FrequencyMapping(This,pMapping);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace_put_FrequencyMapping(IDVBTuningSpace* This,BSTR Mapping) {
+    return This->lpVtbl->put_FrequencyMapping(This,Mapping);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace_get_DefaultLocator(IDVBTuningSpace* This,ILocator **LocatorVal) {
+    return This->lpVtbl->get_DefaultLocator(This,LocatorVal);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace_put_DefaultLocator(IDVBTuningSpace* This,ILocator *LocatorVal) {
+    return This->lpVtbl->put_DefaultLocator(This,LocatorVal);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace_Clone(IDVBTuningSpace* This,ITuningSpace **NewTS) {
+    return This->lpVtbl->Clone(This,NewTS);
+}
+/*** IDVBTuningSpace methods ***/
+static FORCEINLINE HRESULT IDVBTuningSpace_get_SystemType(IDVBTuningSpace* This,DVBSystemType *SysType) {
+    return This->lpVtbl->get_SystemType(This,SysType);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace_put_SystemType(IDVBTuningSpace* This,DVBSystemType SysType) {
+    return This->lpVtbl->put_SystemType(This,SysType);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IDVBTuningSpace_get_SystemType_Proxy(
+    IDVBTuningSpace* This,
+    DVBSystemType *SysType);
+void __RPC_STUB IDVBTuningSpace_get_SystemType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBTuningSpace_put_SystemType_Proxy(
+    IDVBTuningSpace* This,
+    DVBSystemType SysType);
+void __RPC_STUB IDVBTuningSpace_put_SystemType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IDVBTuningSpace_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDVBTuningSpace2 interface
+ */
+#ifndef __IDVBTuningSpace2_INTERFACE_DEFINED__
+#define __IDVBTuningSpace2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDVBTuningSpace2, 0x843188b4, 0xce62, 0x43db, 0x96,0x6b, 0x81,0x45,0xa0,0x94,0xe0,0x40);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("843188b4-ce62-43db-966b-8145a094e040")
+IDVBTuningSpace2 : public IDVBTuningSpace
+{
+    virtual HRESULT STDMETHODCALLTYPE get_NetworkID(
+        LONG *NetworkID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_NetworkID(
+        LONG NetworkID) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDVBTuningSpace2, 0x843188b4, 0xce62, 0x43db, 0x96,0x6b, 0x81,0x45,0xa0,0x94,0xe0,0x40)
+#endif
+#else
+typedef struct IDVBTuningSpace2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDVBTuningSpace2* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDVBTuningSpace2* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDVBTuningSpace2* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IDVBTuningSpace2* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IDVBTuningSpace2* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IDVBTuningSpace2* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IDVBTuningSpace2* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ITuningSpace methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_UniqueName)(
+        IDVBTuningSpace2* This,
+        BSTR *Name);
+
+    HRESULT (STDMETHODCALLTYPE *put_UniqueName)(
+        IDVBTuningSpace2* This,
+        BSTR Name);
+
+    HRESULT (STDMETHODCALLTYPE *get_FriendlyName)(
+        IDVBTuningSpace2* This,
+        BSTR *Name);
+
+    HRESULT (STDMETHODCALLTYPE *put_FriendlyName)(
+        IDVBTuningSpace2* This,
+        BSTR Name);
+
+    HRESULT (STDMETHODCALLTYPE *get_CLSID)(
+        IDVBTuningSpace2* This,
+        BSTR *SpaceCLSID);
+
+    HRESULT (STDMETHODCALLTYPE *get_NetworkType)(
+        IDVBTuningSpace2* This,
+        BSTR *NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put_NetworkType)(
+        IDVBTuningSpace2* This,
+        BSTR NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *get__NetworkType)(
+        IDVBTuningSpace2* This,
+        GUID *NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put__NetworkType)(
+        IDVBTuningSpace2* This,
+        REFCLSID NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTuneRequest)(
+        IDVBTuningSpace2* This,
+        ITuneRequest **TuneRequest);
+
+    HRESULT (STDMETHODCALLTYPE *EnumCategoryGUIDs)(
+        IDVBTuningSpace2* This,
+        IEnumGUID **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *EnumDeviceMonikers)(
+        IDVBTuningSpace2* This,
+        IEnumMoniker **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *get_DefaultPreferredComponentTypes)(
+        IDVBTuningSpace2* This,
+        IComponentTypes **ComponentTypes);
+
+    HRESULT (STDMETHODCALLTYPE *put_DefaultPreferredComponentTypes)(
+        IDVBTuningSpace2* This,
+        IComponentTypes *NewComponentTypes);
+
+    HRESULT (STDMETHODCALLTYPE *get_FrequencyMapping)(
+        IDVBTuningSpace2* This,
+        BSTR *pMapping);
+
+    HRESULT (STDMETHODCALLTYPE *put_FrequencyMapping)(
+        IDVBTuningSpace2* This,
+        BSTR Mapping);
+
+    HRESULT (STDMETHODCALLTYPE *get_DefaultLocator)(
+        IDVBTuningSpace2* This,
+        ILocator **LocatorVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_DefaultLocator)(
+        IDVBTuningSpace2* This,
+        ILocator *LocatorVal);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IDVBTuningSpace2* This,
+        ITuningSpace **NewTS);
+
+    /*** IDVBTuningSpace methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_SystemType)(
+        IDVBTuningSpace2* This,
+        DVBSystemType *SysType);
+
+    HRESULT (STDMETHODCALLTYPE *put_SystemType)(
+        IDVBTuningSpace2* This,
+        DVBSystemType SysType);
+
+    /*** IDVBTuningSpace2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_NetworkID)(
+        IDVBTuningSpace2* This,
+        LONG *NetworkID);
+
+    HRESULT (STDMETHODCALLTYPE *put_NetworkID)(
+        IDVBTuningSpace2* This,
+        LONG NetworkID);
+
+    END_INTERFACE
+} IDVBTuningSpace2Vtbl;
+interface IDVBTuningSpace2 {
+    CONST_VTBL IDVBTuningSpace2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDVBTuningSpace2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDVBTuningSpace2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDVBTuningSpace2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IDVBTuningSpace2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IDVBTuningSpace2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IDVBTuningSpace2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IDVBTuningSpace2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ITuningSpace methods ***/
+#define IDVBTuningSpace2_get_UniqueName(This,Name) (This)->lpVtbl->get_UniqueName(This,Name)
+#define IDVBTuningSpace2_put_UniqueName(This,Name) (This)->lpVtbl->put_UniqueName(This,Name)
+#define IDVBTuningSpace2_get_FriendlyName(This,Name) (This)->lpVtbl->get_FriendlyName(This,Name)
+#define IDVBTuningSpace2_put_FriendlyName(This,Name) (This)->lpVtbl->put_FriendlyName(This,Name)
+#define IDVBTuningSpace2_get_CLSID(This,SpaceCLSID) (This)->lpVtbl->get_CLSID(This,SpaceCLSID)
+#define IDVBTuningSpace2_get_NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->get_NetworkType(This,NetworkTypeGuid)
+#define IDVBTuningSpace2_put_NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->put_NetworkType(This,NetworkTypeGuid)
+#define IDVBTuningSpace2_get__NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->get__NetworkType(This,NetworkTypeGuid)
+#define IDVBTuningSpace2_put__NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->put__NetworkType(This,NetworkTypeGuid)
+#define IDVBTuningSpace2_CreateTuneRequest(This,TuneRequest) (This)->lpVtbl->CreateTuneRequest(This,TuneRequest)
+#define IDVBTuningSpace2_EnumCategoryGUIDs(This,ppEnum) (This)->lpVtbl->EnumCategoryGUIDs(This,ppEnum)
+#define IDVBTuningSpace2_EnumDeviceMonikers(This,ppEnum) (This)->lpVtbl->EnumDeviceMonikers(This,ppEnum)
+#define IDVBTuningSpace2_get_DefaultPreferredComponentTypes(This,ComponentTypes) (This)->lpVtbl->get_DefaultPreferredComponentTypes(This,ComponentTypes)
+#define IDVBTuningSpace2_put_DefaultPreferredComponentTypes(This,NewComponentTypes) (This)->lpVtbl->put_DefaultPreferredComponentTypes(This,NewComponentTypes)
+#define IDVBTuningSpace2_get_FrequencyMapping(This,pMapping) (This)->lpVtbl->get_FrequencyMapping(This,pMapping)
+#define IDVBTuningSpace2_put_FrequencyMapping(This,Mapping) (This)->lpVtbl->put_FrequencyMapping(This,Mapping)
+#define IDVBTuningSpace2_get_DefaultLocator(This,LocatorVal) (This)->lpVtbl->get_DefaultLocator(This,LocatorVal)
+#define IDVBTuningSpace2_put_DefaultLocator(This,LocatorVal) (This)->lpVtbl->put_DefaultLocator(This,LocatorVal)
+#define IDVBTuningSpace2_Clone(This,NewTS) (This)->lpVtbl->Clone(This,NewTS)
+/*** IDVBTuningSpace methods ***/
+#define IDVBTuningSpace2_get_SystemType(This,SysType) (This)->lpVtbl->get_SystemType(This,SysType)
+#define IDVBTuningSpace2_put_SystemType(This,SysType) (This)->lpVtbl->put_SystemType(This,SysType)
+/*** IDVBTuningSpace2 methods ***/
+#define IDVBTuningSpace2_get_NetworkID(This,NetworkID) (This)->lpVtbl->get_NetworkID(This,NetworkID)
+#define IDVBTuningSpace2_put_NetworkID(This,NetworkID) (This)->lpVtbl->put_NetworkID(This,NetworkID)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDVBTuningSpace2_QueryInterface(IDVBTuningSpace2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDVBTuningSpace2_AddRef(IDVBTuningSpace2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDVBTuningSpace2_Release(IDVBTuningSpace2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IDVBTuningSpace2_GetTypeInfoCount(IDVBTuningSpace2* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace2_GetTypeInfo(IDVBTuningSpace2* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace2_GetIDsOfNames(IDVBTuningSpace2* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace2_Invoke(IDVBTuningSpace2* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ITuningSpace methods ***/
+static FORCEINLINE HRESULT IDVBTuningSpace2_get_UniqueName(IDVBTuningSpace2* This,BSTR *Name) {
+    return This->lpVtbl->get_UniqueName(This,Name);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace2_put_UniqueName(IDVBTuningSpace2* This,BSTR Name) {
+    return This->lpVtbl->put_UniqueName(This,Name);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace2_get_FriendlyName(IDVBTuningSpace2* This,BSTR *Name) {
+    return This->lpVtbl->get_FriendlyName(This,Name);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace2_put_FriendlyName(IDVBTuningSpace2* This,BSTR Name) {
+    return This->lpVtbl->put_FriendlyName(This,Name);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace2_get_CLSID(IDVBTuningSpace2* This,BSTR *SpaceCLSID) {
+    return This->lpVtbl->get_CLSID(This,SpaceCLSID);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace2_get_NetworkType(IDVBTuningSpace2* This,BSTR *NetworkTypeGuid) {
+    return This->lpVtbl->get_NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace2_put_NetworkType(IDVBTuningSpace2* This,BSTR NetworkTypeGuid) {
+    return This->lpVtbl->put_NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace2_get__NetworkType(IDVBTuningSpace2* This,GUID *NetworkTypeGuid) {
+    return This->lpVtbl->get__NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace2_put__NetworkType(IDVBTuningSpace2* This,REFCLSID NetworkTypeGuid) {
+    return This->lpVtbl->put__NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace2_CreateTuneRequest(IDVBTuningSpace2* This,ITuneRequest **TuneRequest) {
+    return This->lpVtbl->CreateTuneRequest(This,TuneRequest);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace2_EnumCategoryGUIDs(IDVBTuningSpace2* This,IEnumGUID **ppEnum) {
+    return This->lpVtbl->EnumCategoryGUIDs(This,ppEnum);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace2_EnumDeviceMonikers(IDVBTuningSpace2* This,IEnumMoniker **ppEnum) {
+    return This->lpVtbl->EnumDeviceMonikers(This,ppEnum);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace2_get_DefaultPreferredComponentTypes(IDVBTuningSpace2* This,IComponentTypes **ComponentTypes) {
+    return This->lpVtbl->get_DefaultPreferredComponentTypes(This,ComponentTypes);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace2_put_DefaultPreferredComponentTypes(IDVBTuningSpace2* This,IComponentTypes *NewComponentTypes) {
+    return This->lpVtbl->put_DefaultPreferredComponentTypes(This,NewComponentTypes);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace2_get_FrequencyMapping(IDVBTuningSpace2* This,BSTR *pMapping) {
+    return This->lpVtbl->get_FrequencyMapping(This,pMapping);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace2_put_FrequencyMapping(IDVBTuningSpace2* This,BSTR Mapping) {
+    return This->lpVtbl->put_FrequencyMapping(This,Mapping);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace2_get_DefaultLocator(IDVBTuningSpace2* This,ILocator **LocatorVal) {
+    return This->lpVtbl->get_DefaultLocator(This,LocatorVal);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace2_put_DefaultLocator(IDVBTuningSpace2* This,ILocator *LocatorVal) {
+    return This->lpVtbl->put_DefaultLocator(This,LocatorVal);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace2_Clone(IDVBTuningSpace2* This,ITuningSpace **NewTS) {
+    return This->lpVtbl->Clone(This,NewTS);
+}
+/*** IDVBTuningSpace methods ***/
+static FORCEINLINE HRESULT IDVBTuningSpace2_get_SystemType(IDVBTuningSpace2* This,DVBSystemType *SysType) {
+    return This->lpVtbl->get_SystemType(This,SysType);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace2_put_SystemType(IDVBTuningSpace2* This,DVBSystemType SysType) {
+    return This->lpVtbl->put_SystemType(This,SysType);
+}
+/*** IDVBTuningSpace2 methods ***/
+static FORCEINLINE HRESULT IDVBTuningSpace2_get_NetworkID(IDVBTuningSpace2* This,LONG *NetworkID) {
+    return This->lpVtbl->get_NetworkID(This,NetworkID);
+}
+static FORCEINLINE HRESULT IDVBTuningSpace2_put_NetworkID(IDVBTuningSpace2* This,LONG NetworkID) {
+    return This->lpVtbl->put_NetworkID(This,NetworkID);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IDVBTuningSpace2_get_NetworkID_Proxy(
+    IDVBTuningSpace2* This,
+    LONG *NetworkID);
+void __RPC_STUB IDVBTuningSpace2_get_NetworkID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBTuningSpace2_put_NetworkID_Proxy(
+    IDVBTuningSpace2* This,
+    LONG NetworkID);
+void __RPC_STUB IDVBTuningSpace2_put_NetworkID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IDVBTuningSpace2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDVBSTuningSpace interface
+ */
+#ifndef __IDVBSTuningSpace_INTERFACE_DEFINED__
+#define __IDVBSTuningSpace_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDVBSTuningSpace, 0xcdf7be60, 0xd954, 0x42fd, 0xa9,0x72, 0x78,0x97,0x19,0x58,0xe4,0x70);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("cdf7be60-d954-42fd-a972-78971958e470")
+IDVBSTuningSpace : public IDVBTuningSpace2
+{
+    virtual HRESULT STDMETHODCALLTYPE get_LowOscillator(
+        LONG *LowOscillator) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_LowOscillator(
+        LONG LowOscillator) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_HighOscillator(
+        LONG *HighOscillator) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_HighOscillator(
+        LONG HighOscillator) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_LNBSwitch(
+        LONG *LNBSwitch) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_LNBSwitch(
+        LONG LNBSwitch) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_InputRange(
+        BSTR *InputRange) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_InputRange(
+        BSTR InputRange) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SpectralInversion(
+        SpectralInversion *SpectralInversionVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_SpectralInversion(
+        SpectralInversion SpectralInversionVal) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDVBSTuningSpace, 0xcdf7be60, 0xd954, 0x42fd, 0xa9,0x72, 0x78,0x97,0x19,0x58,0xe4,0x70)
+#endif
+#else
+typedef struct IDVBSTuningSpaceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDVBSTuningSpace* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDVBSTuningSpace* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDVBSTuningSpace* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IDVBSTuningSpace* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IDVBSTuningSpace* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IDVBSTuningSpace* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IDVBSTuningSpace* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ITuningSpace methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_UniqueName)(
+        IDVBSTuningSpace* This,
+        BSTR *Name);
+
+    HRESULT (STDMETHODCALLTYPE *put_UniqueName)(
+        IDVBSTuningSpace* This,
+        BSTR Name);
+
+    HRESULT (STDMETHODCALLTYPE *get_FriendlyName)(
+        IDVBSTuningSpace* This,
+        BSTR *Name);
+
+    HRESULT (STDMETHODCALLTYPE *put_FriendlyName)(
+        IDVBSTuningSpace* This,
+        BSTR Name);
+
+    HRESULT (STDMETHODCALLTYPE *get_CLSID)(
+        IDVBSTuningSpace* This,
+        BSTR *SpaceCLSID);
+
+    HRESULT (STDMETHODCALLTYPE *get_NetworkType)(
+        IDVBSTuningSpace* This,
+        BSTR *NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put_NetworkType)(
+        IDVBSTuningSpace* This,
+        BSTR NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *get__NetworkType)(
+        IDVBSTuningSpace* This,
+        GUID *NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put__NetworkType)(
+        IDVBSTuningSpace* This,
+        REFCLSID NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTuneRequest)(
+        IDVBSTuningSpace* This,
+        ITuneRequest **TuneRequest);
+
+    HRESULT (STDMETHODCALLTYPE *EnumCategoryGUIDs)(
+        IDVBSTuningSpace* This,
+        IEnumGUID **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *EnumDeviceMonikers)(
+        IDVBSTuningSpace* This,
+        IEnumMoniker **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *get_DefaultPreferredComponentTypes)(
+        IDVBSTuningSpace* This,
+        IComponentTypes **ComponentTypes);
+
+    HRESULT (STDMETHODCALLTYPE *put_DefaultPreferredComponentTypes)(
+        IDVBSTuningSpace* This,
+        IComponentTypes *NewComponentTypes);
+
+    HRESULT (STDMETHODCALLTYPE *get_FrequencyMapping)(
+        IDVBSTuningSpace* This,
+        BSTR *pMapping);
+
+    HRESULT (STDMETHODCALLTYPE *put_FrequencyMapping)(
+        IDVBSTuningSpace* This,
+        BSTR Mapping);
+
+    HRESULT (STDMETHODCALLTYPE *get_DefaultLocator)(
+        IDVBSTuningSpace* This,
+        ILocator **LocatorVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_DefaultLocator)(
+        IDVBSTuningSpace* This,
+        ILocator *LocatorVal);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IDVBSTuningSpace* This,
+        ITuningSpace **NewTS);
+
+    /*** IDVBTuningSpace methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_SystemType)(
+        IDVBSTuningSpace* This,
+        DVBSystemType *SysType);
+
+    HRESULT (STDMETHODCALLTYPE *put_SystemType)(
+        IDVBSTuningSpace* This,
+        DVBSystemType SysType);
+
+    /*** IDVBTuningSpace2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_NetworkID)(
+        IDVBSTuningSpace* This,
+        LONG *NetworkID);
+
+    HRESULT (STDMETHODCALLTYPE *put_NetworkID)(
+        IDVBSTuningSpace* This,
+        LONG NetworkID);
+
+    /*** IDVBSTuningSpace methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_LowOscillator)(
+        IDVBSTuningSpace* This,
+        LONG *LowOscillator);
+
+    HRESULT (STDMETHODCALLTYPE *put_LowOscillator)(
+        IDVBSTuningSpace* This,
+        LONG LowOscillator);
+
+    HRESULT (STDMETHODCALLTYPE *get_HighOscillator)(
+        IDVBSTuningSpace* This,
+        LONG *HighOscillator);
+
+    HRESULT (STDMETHODCALLTYPE *put_HighOscillator)(
+        IDVBSTuningSpace* This,
+        LONG HighOscillator);
+
+    HRESULT (STDMETHODCALLTYPE *get_LNBSwitch)(
+        IDVBSTuningSpace* This,
+        LONG *LNBSwitch);
+
+    HRESULT (STDMETHODCALLTYPE *put_LNBSwitch)(
+        IDVBSTuningSpace* This,
+        LONG LNBSwitch);
+
+    HRESULT (STDMETHODCALLTYPE *get_InputRange)(
+        IDVBSTuningSpace* This,
+        BSTR *InputRange);
+
+    HRESULT (STDMETHODCALLTYPE *put_InputRange)(
+        IDVBSTuningSpace* This,
+        BSTR InputRange);
+
+    HRESULT (STDMETHODCALLTYPE *get_SpectralInversion)(
+        IDVBSTuningSpace* This,
+        SpectralInversion *SpectralInversionVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_SpectralInversion)(
+        IDVBSTuningSpace* This,
+        SpectralInversion SpectralInversionVal);
+
+    END_INTERFACE
+} IDVBSTuningSpaceVtbl;
+interface IDVBSTuningSpace {
+    CONST_VTBL IDVBSTuningSpaceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDVBSTuningSpace_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDVBSTuningSpace_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDVBSTuningSpace_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IDVBSTuningSpace_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IDVBSTuningSpace_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IDVBSTuningSpace_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IDVBSTuningSpace_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ITuningSpace methods ***/
+#define IDVBSTuningSpace_get_UniqueName(This,Name) (This)->lpVtbl->get_UniqueName(This,Name)
+#define IDVBSTuningSpace_put_UniqueName(This,Name) (This)->lpVtbl->put_UniqueName(This,Name)
+#define IDVBSTuningSpace_get_FriendlyName(This,Name) (This)->lpVtbl->get_FriendlyName(This,Name)
+#define IDVBSTuningSpace_put_FriendlyName(This,Name) (This)->lpVtbl->put_FriendlyName(This,Name)
+#define IDVBSTuningSpace_get_CLSID(This,SpaceCLSID) (This)->lpVtbl->get_CLSID(This,SpaceCLSID)
+#define IDVBSTuningSpace_get_NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->get_NetworkType(This,NetworkTypeGuid)
+#define IDVBSTuningSpace_put_NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->put_NetworkType(This,NetworkTypeGuid)
+#define IDVBSTuningSpace_get__NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->get__NetworkType(This,NetworkTypeGuid)
+#define IDVBSTuningSpace_put__NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->put__NetworkType(This,NetworkTypeGuid)
+#define IDVBSTuningSpace_CreateTuneRequest(This,TuneRequest) (This)->lpVtbl->CreateTuneRequest(This,TuneRequest)
+#define IDVBSTuningSpace_EnumCategoryGUIDs(This,ppEnum) (This)->lpVtbl->EnumCategoryGUIDs(This,ppEnum)
+#define IDVBSTuningSpace_EnumDeviceMonikers(This,ppEnum) (This)->lpVtbl->EnumDeviceMonikers(This,ppEnum)
+#define IDVBSTuningSpace_get_DefaultPreferredComponentTypes(This,ComponentTypes) (This)->lpVtbl->get_DefaultPreferredComponentTypes(This,ComponentTypes)
+#define IDVBSTuningSpace_put_DefaultPreferredComponentTypes(This,NewComponentTypes) (This)->lpVtbl->put_DefaultPreferredComponentTypes(This,NewComponentTypes)
+#define IDVBSTuningSpace_get_FrequencyMapping(This,pMapping) (This)->lpVtbl->get_FrequencyMapping(This,pMapping)
+#define IDVBSTuningSpace_put_FrequencyMapping(This,Mapping) (This)->lpVtbl->put_FrequencyMapping(This,Mapping)
+#define IDVBSTuningSpace_get_DefaultLocator(This,LocatorVal) (This)->lpVtbl->get_DefaultLocator(This,LocatorVal)
+#define IDVBSTuningSpace_put_DefaultLocator(This,LocatorVal) (This)->lpVtbl->put_DefaultLocator(This,LocatorVal)
+#define IDVBSTuningSpace_Clone(This,NewTS) (This)->lpVtbl->Clone(This,NewTS)
+/*** IDVBTuningSpace methods ***/
+#define IDVBSTuningSpace_get_SystemType(This,SysType) (This)->lpVtbl->get_SystemType(This,SysType)
+#define IDVBSTuningSpace_put_SystemType(This,SysType) (This)->lpVtbl->put_SystemType(This,SysType)
+/*** IDVBTuningSpace2 methods ***/
+#define IDVBSTuningSpace_get_NetworkID(This,NetworkID) (This)->lpVtbl->get_NetworkID(This,NetworkID)
+#define IDVBSTuningSpace_put_NetworkID(This,NetworkID) (This)->lpVtbl->put_NetworkID(This,NetworkID)
+/*** IDVBSTuningSpace methods ***/
+#define IDVBSTuningSpace_get_LowOscillator(This,LowOscillator) (This)->lpVtbl->get_LowOscillator(This,LowOscillator)
+#define IDVBSTuningSpace_put_LowOscillator(This,LowOscillator) (This)->lpVtbl->put_LowOscillator(This,LowOscillator)
+#define IDVBSTuningSpace_get_HighOscillator(This,HighOscillator) (This)->lpVtbl->get_HighOscillator(This,HighOscillator)
+#define IDVBSTuningSpace_put_HighOscillator(This,HighOscillator) (This)->lpVtbl->put_HighOscillator(This,HighOscillator)
+#define IDVBSTuningSpace_get_LNBSwitch(This,LNBSwitch) (This)->lpVtbl->get_LNBSwitch(This,LNBSwitch)
+#define IDVBSTuningSpace_put_LNBSwitch(This,LNBSwitch) (This)->lpVtbl->put_LNBSwitch(This,LNBSwitch)
+#define IDVBSTuningSpace_get_InputRange(This,InputRange) (This)->lpVtbl->get_InputRange(This,InputRange)
+#define IDVBSTuningSpace_put_InputRange(This,InputRange) (This)->lpVtbl->put_InputRange(This,InputRange)
+#define IDVBSTuningSpace_get_SpectralInversion(This,SpectralInversionVal) (This)->lpVtbl->get_SpectralInversion(This,SpectralInversionVal)
+#define IDVBSTuningSpace_put_SpectralInversion(This,SpectralInversionVal) (This)->lpVtbl->put_SpectralInversion(This,SpectralInversionVal)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDVBSTuningSpace_QueryInterface(IDVBSTuningSpace* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDVBSTuningSpace_AddRef(IDVBSTuningSpace* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDVBSTuningSpace_Release(IDVBSTuningSpace* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IDVBSTuningSpace_GetTypeInfoCount(IDVBSTuningSpace* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_GetTypeInfo(IDVBSTuningSpace* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_GetIDsOfNames(IDVBSTuningSpace* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_Invoke(IDVBSTuningSpace* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ITuningSpace methods ***/
+static FORCEINLINE HRESULT IDVBSTuningSpace_get_UniqueName(IDVBSTuningSpace* This,BSTR *Name) {
+    return This->lpVtbl->get_UniqueName(This,Name);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_put_UniqueName(IDVBSTuningSpace* This,BSTR Name) {
+    return This->lpVtbl->put_UniqueName(This,Name);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_get_FriendlyName(IDVBSTuningSpace* This,BSTR *Name) {
+    return This->lpVtbl->get_FriendlyName(This,Name);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_put_FriendlyName(IDVBSTuningSpace* This,BSTR Name) {
+    return This->lpVtbl->put_FriendlyName(This,Name);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_get_CLSID(IDVBSTuningSpace* This,BSTR *SpaceCLSID) {
+    return This->lpVtbl->get_CLSID(This,SpaceCLSID);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_get_NetworkType(IDVBSTuningSpace* This,BSTR *NetworkTypeGuid) {
+    return This->lpVtbl->get_NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_put_NetworkType(IDVBSTuningSpace* This,BSTR NetworkTypeGuid) {
+    return This->lpVtbl->put_NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_get__NetworkType(IDVBSTuningSpace* This,GUID *NetworkTypeGuid) {
+    return This->lpVtbl->get__NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_put__NetworkType(IDVBSTuningSpace* This,REFCLSID NetworkTypeGuid) {
+    return This->lpVtbl->put__NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_CreateTuneRequest(IDVBSTuningSpace* This,ITuneRequest **TuneRequest) {
+    return This->lpVtbl->CreateTuneRequest(This,TuneRequest);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_EnumCategoryGUIDs(IDVBSTuningSpace* This,IEnumGUID **ppEnum) {
+    return This->lpVtbl->EnumCategoryGUIDs(This,ppEnum);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_EnumDeviceMonikers(IDVBSTuningSpace* This,IEnumMoniker **ppEnum) {
+    return This->lpVtbl->EnumDeviceMonikers(This,ppEnum);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_get_DefaultPreferredComponentTypes(IDVBSTuningSpace* This,IComponentTypes **ComponentTypes) {
+    return This->lpVtbl->get_DefaultPreferredComponentTypes(This,ComponentTypes);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_put_DefaultPreferredComponentTypes(IDVBSTuningSpace* This,IComponentTypes *NewComponentTypes) {
+    return This->lpVtbl->put_DefaultPreferredComponentTypes(This,NewComponentTypes);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_get_FrequencyMapping(IDVBSTuningSpace* This,BSTR *pMapping) {
+    return This->lpVtbl->get_FrequencyMapping(This,pMapping);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_put_FrequencyMapping(IDVBSTuningSpace* This,BSTR Mapping) {
+    return This->lpVtbl->put_FrequencyMapping(This,Mapping);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_get_DefaultLocator(IDVBSTuningSpace* This,ILocator **LocatorVal) {
+    return This->lpVtbl->get_DefaultLocator(This,LocatorVal);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_put_DefaultLocator(IDVBSTuningSpace* This,ILocator *LocatorVal) {
+    return This->lpVtbl->put_DefaultLocator(This,LocatorVal);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_Clone(IDVBSTuningSpace* This,ITuningSpace **NewTS) {
+    return This->lpVtbl->Clone(This,NewTS);
+}
+/*** IDVBTuningSpace methods ***/
+static FORCEINLINE HRESULT IDVBSTuningSpace_get_SystemType(IDVBSTuningSpace* This,DVBSystemType *SysType) {
+    return This->lpVtbl->get_SystemType(This,SysType);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_put_SystemType(IDVBSTuningSpace* This,DVBSystemType SysType) {
+    return This->lpVtbl->put_SystemType(This,SysType);
+}
+/*** IDVBTuningSpace2 methods ***/
+static FORCEINLINE HRESULT IDVBSTuningSpace_get_NetworkID(IDVBSTuningSpace* This,LONG *NetworkID) {
+    return This->lpVtbl->get_NetworkID(This,NetworkID);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_put_NetworkID(IDVBSTuningSpace* This,LONG NetworkID) {
+    return This->lpVtbl->put_NetworkID(This,NetworkID);
+}
+/*** IDVBSTuningSpace methods ***/
+static FORCEINLINE HRESULT IDVBSTuningSpace_get_LowOscillator(IDVBSTuningSpace* This,LONG *LowOscillator) {
+    return This->lpVtbl->get_LowOscillator(This,LowOscillator);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_put_LowOscillator(IDVBSTuningSpace* This,LONG LowOscillator) {
+    return This->lpVtbl->put_LowOscillator(This,LowOscillator);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_get_HighOscillator(IDVBSTuningSpace* This,LONG *HighOscillator) {
+    return This->lpVtbl->get_HighOscillator(This,HighOscillator);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_put_HighOscillator(IDVBSTuningSpace* This,LONG HighOscillator) {
+    return This->lpVtbl->put_HighOscillator(This,HighOscillator);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_get_LNBSwitch(IDVBSTuningSpace* This,LONG *LNBSwitch) {
+    return This->lpVtbl->get_LNBSwitch(This,LNBSwitch);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_put_LNBSwitch(IDVBSTuningSpace* This,LONG LNBSwitch) {
+    return This->lpVtbl->put_LNBSwitch(This,LNBSwitch);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_get_InputRange(IDVBSTuningSpace* This,BSTR *InputRange) {
+    return This->lpVtbl->get_InputRange(This,InputRange);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_put_InputRange(IDVBSTuningSpace* This,BSTR InputRange) {
+    return This->lpVtbl->put_InputRange(This,InputRange);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_get_SpectralInversion(IDVBSTuningSpace* This,SpectralInversion *SpectralInversionVal) {
+    return This->lpVtbl->get_SpectralInversion(This,SpectralInversionVal);
+}
+static FORCEINLINE HRESULT IDVBSTuningSpace_put_SpectralInversion(IDVBSTuningSpace* This,SpectralInversion SpectralInversionVal) {
+    return This->lpVtbl->put_SpectralInversion(This,SpectralInversionVal);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IDVBSTuningSpace_get_LowOscillator_Proxy(
+    IDVBSTuningSpace* This,
+    LONG *LowOscillator);
+void __RPC_STUB IDVBSTuningSpace_get_LowOscillator_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSTuningSpace_put_LowOscillator_Proxy(
+    IDVBSTuningSpace* This,
+    LONG LowOscillator);
+void __RPC_STUB IDVBSTuningSpace_put_LowOscillator_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSTuningSpace_get_HighOscillator_Proxy(
+    IDVBSTuningSpace* This,
+    LONG *HighOscillator);
+void __RPC_STUB IDVBSTuningSpace_get_HighOscillator_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSTuningSpace_put_HighOscillator_Proxy(
+    IDVBSTuningSpace* This,
+    LONG HighOscillator);
+void __RPC_STUB IDVBSTuningSpace_put_HighOscillator_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSTuningSpace_get_LNBSwitch_Proxy(
+    IDVBSTuningSpace* This,
+    LONG *LNBSwitch);
+void __RPC_STUB IDVBSTuningSpace_get_LNBSwitch_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSTuningSpace_put_LNBSwitch_Proxy(
+    IDVBSTuningSpace* This,
+    LONG LNBSwitch);
+void __RPC_STUB IDVBSTuningSpace_put_LNBSwitch_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSTuningSpace_get_InputRange_Proxy(
+    IDVBSTuningSpace* This,
+    BSTR *InputRange);
+void __RPC_STUB IDVBSTuningSpace_get_InputRange_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSTuningSpace_put_InputRange_Proxy(
+    IDVBSTuningSpace* This,
+    BSTR InputRange);
+void __RPC_STUB IDVBSTuningSpace_put_InputRange_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSTuningSpace_get_SpectralInversion_Proxy(
+    IDVBSTuningSpace* This,
+    SpectralInversion *SpectralInversionVal);
+void __RPC_STUB IDVBSTuningSpace_get_SpectralInversion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSTuningSpace_put_SpectralInversion_Proxy(
+    IDVBSTuningSpace* This,
+    SpectralInversion SpectralInversionVal);
+void __RPC_STUB IDVBSTuningSpace_put_SpectralInversion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IDVBSTuningSpace_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAuxInTuningSpace interface
+ */
+#ifndef __IAuxInTuningSpace_INTERFACE_DEFINED__
+#define __IAuxInTuningSpace_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IAuxInTuningSpace, 0xe48244b8, 0x7e17, 0x4f76, 0xa7,0x63, 0x50,0x90,0xff,0x1e,0x2f,0x30);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("e48244b8-7e17-4f76-a763-5090ff1e2f30")
+IAuxInTuningSpace : public ITuningSpace
+{
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IAuxInTuningSpace, 0xe48244b8, 0x7e17, 0x4f76, 0xa7,0x63, 0x50,0x90,0xff,0x1e,0x2f,0x30)
+#endif
+#else
+typedef struct IAuxInTuningSpaceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IAuxInTuningSpace* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IAuxInTuningSpace* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IAuxInTuningSpace* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IAuxInTuningSpace* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IAuxInTuningSpace* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IAuxInTuningSpace* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IAuxInTuningSpace* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ITuningSpace methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_UniqueName)(
+        IAuxInTuningSpace* This,
+        BSTR *Name);
+
+    HRESULT (STDMETHODCALLTYPE *put_UniqueName)(
+        IAuxInTuningSpace* This,
+        BSTR Name);
+
+    HRESULT (STDMETHODCALLTYPE *get_FriendlyName)(
+        IAuxInTuningSpace* This,
+        BSTR *Name);
+
+    HRESULT (STDMETHODCALLTYPE *put_FriendlyName)(
+        IAuxInTuningSpace* This,
+        BSTR Name);
+
+    HRESULT (STDMETHODCALLTYPE *get_CLSID)(
+        IAuxInTuningSpace* This,
+        BSTR *SpaceCLSID);
+
+    HRESULT (STDMETHODCALLTYPE *get_NetworkType)(
+        IAuxInTuningSpace* This,
+        BSTR *NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put_NetworkType)(
+        IAuxInTuningSpace* This,
+        BSTR NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *get__NetworkType)(
+        IAuxInTuningSpace* This,
+        GUID *NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put__NetworkType)(
+        IAuxInTuningSpace* This,
+        REFCLSID NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTuneRequest)(
+        IAuxInTuningSpace* This,
+        ITuneRequest **TuneRequest);
+
+    HRESULT (STDMETHODCALLTYPE *EnumCategoryGUIDs)(
+        IAuxInTuningSpace* This,
+        IEnumGUID **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *EnumDeviceMonikers)(
+        IAuxInTuningSpace* This,
+        IEnumMoniker **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *get_DefaultPreferredComponentTypes)(
+        IAuxInTuningSpace* This,
+        IComponentTypes **ComponentTypes);
+
+    HRESULT (STDMETHODCALLTYPE *put_DefaultPreferredComponentTypes)(
+        IAuxInTuningSpace* This,
+        IComponentTypes *NewComponentTypes);
+
+    HRESULT (STDMETHODCALLTYPE *get_FrequencyMapping)(
+        IAuxInTuningSpace* This,
+        BSTR *pMapping);
+
+    HRESULT (STDMETHODCALLTYPE *put_FrequencyMapping)(
+        IAuxInTuningSpace* This,
+        BSTR Mapping);
+
+    HRESULT (STDMETHODCALLTYPE *get_DefaultLocator)(
+        IAuxInTuningSpace* This,
+        ILocator **LocatorVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_DefaultLocator)(
+        IAuxInTuningSpace* This,
+        ILocator *LocatorVal);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IAuxInTuningSpace* This,
+        ITuningSpace **NewTS);
+
+    END_INTERFACE
+} IAuxInTuningSpaceVtbl;
+interface IAuxInTuningSpace {
+    CONST_VTBL IAuxInTuningSpaceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IAuxInTuningSpace_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAuxInTuningSpace_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAuxInTuningSpace_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IAuxInTuningSpace_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IAuxInTuningSpace_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IAuxInTuningSpace_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IAuxInTuningSpace_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ITuningSpace methods ***/
+#define IAuxInTuningSpace_get_UniqueName(This,Name) (This)->lpVtbl->get_UniqueName(This,Name)
+#define IAuxInTuningSpace_put_UniqueName(This,Name) (This)->lpVtbl->put_UniqueName(This,Name)
+#define IAuxInTuningSpace_get_FriendlyName(This,Name) (This)->lpVtbl->get_FriendlyName(This,Name)
+#define IAuxInTuningSpace_put_FriendlyName(This,Name) (This)->lpVtbl->put_FriendlyName(This,Name)
+#define IAuxInTuningSpace_get_CLSID(This,SpaceCLSID) (This)->lpVtbl->get_CLSID(This,SpaceCLSID)
+#define IAuxInTuningSpace_get_NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->get_NetworkType(This,NetworkTypeGuid)
+#define IAuxInTuningSpace_put_NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->put_NetworkType(This,NetworkTypeGuid)
+#define IAuxInTuningSpace_get__NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->get__NetworkType(This,NetworkTypeGuid)
+#define IAuxInTuningSpace_put__NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->put__NetworkType(This,NetworkTypeGuid)
+#define IAuxInTuningSpace_CreateTuneRequest(This,TuneRequest) (This)->lpVtbl->CreateTuneRequest(This,TuneRequest)
+#define IAuxInTuningSpace_EnumCategoryGUIDs(This,ppEnum) (This)->lpVtbl->EnumCategoryGUIDs(This,ppEnum)
+#define IAuxInTuningSpace_EnumDeviceMonikers(This,ppEnum) (This)->lpVtbl->EnumDeviceMonikers(This,ppEnum)
+#define IAuxInTuningSpace_get_DefaultPreferredComponentTypes(This,ComponentTypes) (This)->lpVtbl->get_DefaultPreferredComponentTypes(This,ComponentTypes)
+#define IAuxInTuningSpace_put_DefaultPreferredComponentTypes(This,NewComponentTypes) (This)->lpVtbl->put_DefaultPreferredComponentTypes(This,NewComponentTypes)
+#define IAuxInTuningSpace_get_FrequencyMapping(This,pMapping) (This)->lpVtbl->get_FrequencyMapping(This,pMapping)
+#define IAuxInTuningSpace_put_FrequencyMapping(This,Mapping) (This)->lpVtbl->put_FrequencyMapping(This,Mapping)
+#define IAuxInTuningSpace_get_DefaultLocator(This,LocatorVal) (This)->lpVtbl->get_DefaultLocator(This,LocatorVal)
+#define IAuxInTuningSpace_put_DefaultLocator(This,LocatorVal) (This)->lpVtbl->put_DefaultLocator(This,LocatorVal)
+#define IAuxInTuningSpace_Clone(This,NewTS) (This)->lpVtbl->Clone(This,NewTS)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IAuxInTuningSpace_QueryInterface(IAuxInTuningSpace* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IAuxInTuningSpace_AddRef(IAuxInTuningSpace* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IAuxInTuningSpace_Release(IAuxInTuningSpace* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IAuxInTuningSpace_GetTypeInfoCount(IAuxInTuningSpace* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace_GetTypeInfo(IAuxInTuningSpace* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace_GetIDsOfNames(IAuxInTuningSpace* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace_Invoke(IAuxInTuningSpace* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ITuningSpace methods ***/
+static FORCEINLINE HRESULT IAuxInTuningSpace_get_UniqueName(IAuxInTuningSpace* This,BSTR *Name) {
+    return This->lpVtbl->get_UniqueName(This,Name);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace_put_UniqueName(IAuxInTuningSpace* This,BSTR Name) {
+    return This->lpVtbl->put_UniqueName(This,Name);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace_get_FriendlyName(IAuxInTuningSpace* This,BSTR *Name) {
+    return This->lpVtbl->get_FriendlyName(This,Name);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace_put_FriendlyName(IAuxInTuningSpace* This,BSTR Name) {
+    return This->lpVtbl->put_FriendlyName(This,Name);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace_get_CLSID(IAuxInTuningSpace* This,BSTR *SpaceCLSID) {
+    return This->lpVtbl->get_CLSID(This,SpaceCLSID);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace_get_NetworkType(IAuxInTuningSpace* This,BSTR *NetworkTypeGuid) {
+    return This->lpVtbl->get_NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace_put_NetworkType(IAuxInTuningSpace* This,BSTR NetworkTypeGuid) {
+    return This->lpVtbl->put_NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace_get__NetworkType(IAuxInTuningSpace* This,GUID *NetworkTypeGuid) {
+    return This->lpVtbl->get__NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace_put__NetworkType(IAuxInTuningSpace* This,REFCLSID NetworkTypeGuid) {
+    return This->lpVtbl->put__NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace_CreateTuneRequest(IAuxInTuningSpace* This,ITuneRequest **TuneRequest) {
+    return This->lpVtbl->CreateTuneRequest(This,TuneRequest);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace_EnumCategoryGUIDs(IAuxInTuningSpace* This,IEnumGUID **ppEnum) {
+    return This->lpVtbl->EnumCategoryGUIDs(This,ppEnum);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace_EnumDeviceMonikers(IAuxInTuningSpace* This,IEnumMoniker **ppEnum) {
+    return This->lpVtbl->EnumDeviceMonikers(This,ppEnum);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace_get_DefaultPreferredComponentTypes(IAuxInTuningSpace* This,IComponentTypes **ComponentTypes) {
+    return This->lpVtbl->get_DefaultPreferredComponentTypes(This,ComponentTypes);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace_put_DefaultPreferredComponentTypes(IAuxInTuningSpace* This,IComponentTypes *NewComponentTypes) {
+    return This->lpVtbl->put_DefaultPreferredComponentTypes(This,NewComponentTypes);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace_get_FrequencyMapping(IAuxInTuningSpace* This,BSTR *pMapping) {
+    return This->lpVtbl->get_FrequencyMapping(This,pMapping);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace_put_FrequencyMapping(IAuxInTuningSpace* This,BSTR Mapping) {
+    return This->lpVtbl->put_FrequencyMapping(This,Mapping);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace_get_DefaultLocator(IAuxInTuningSpace* This,ILocator **LocatorVal) {
+    return This->lpVtbl->get_DefaultLocator(This,LocatorVal);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace_put_DefaultLocator(IAuxInTuningSpace* This,ILocator *LocatorVal) {
+    return This->lpVtbl->put_DefaultLocator(This,LocatorVal);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace_Clone(IAuxInTuningSpace* This,ITuningSpace **NewTS) {
+    return This->lpVtbl->Clone(This,NewTS);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IAuxInTuningSpace_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAuxInTuningSpace2 interface
+ */
+#ifndef __IAuxInTuningSpace2_INTERFACE_DEFINED__
+#define __IAuxInTuningSpace2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IAuxInTuningSpace2, 0xb10931ed, 0x8bfe, 0x4ab0, 0x9d,0xce, 0xe4,0x69,0xc2,0x9a,0x97,0x29);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("b10931ed-8bfe-4ab0-9dce-e469c29a9729")
+IAuxInTuningSpace2 : public IAuxInTuningSpace
+{
+    virtual HRESULT STDMETHODCALLTYPE get_CountryCode(
+        LONG *CountryCodeVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_CountryCode(
+        LONG NewCountryCodeVal) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IAuxInTuningSpace2, 0xb10931ed, 0x8bfe, 0x4ab0, 0x9d,0xce, 0xe4,0x69,0xc2,0x9a,0x97,0x29)
+#endif
+#else
+typedef struct IAuxInTuningSpace2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IAuxInTuningSpace2* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IAuxInTuningSpace2* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IAuxInTuningSpace2* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IAuxInTuningSpace2* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IAuxInTuningSpace2* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IAuxInTuningSpace2* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IAuxInTuningSpace2* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ITuningSpace methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_UniqueName)(
+        IAuxInTuningSpace2* This,
+        BSTR *Name);
+
+    HRESULT (STDMETHODCALLTYPE *put_UniqueName)(
+        IAuxInTuningSpace2* This,
+        BSTR Name);
+
+    HRESULT (STDMETHODCALLTYPE *get_FriendlyName)(
+        IAuxInTuningSpace2* This,
+        BSTR *Name);
+
+    HRESULT (STDMETHODCALLTYPE *put_FriendlyName)(
+        IAuxInTuningSpace2* This,
+        BSTR Name);
+
+    HRESULT (STDMETHODCALLTYPE *get_CLSID)(
+        IAuxInTuningSpace2* This,
+        BSTR *SpaceCLSID);
+
+    HRESULT (STDMETHODCALLTYPE *get_NetworkType)(
+        IAuxInTuningSpace2* This,
+        BSTR *NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put_NetworkType)(
+        IAuxInTuningSpace2* This,
+        BSTR NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *get__NetworkType)(
+        IAuxInTuningSpace2* This,
+        GUID *NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put__NetworkType)(
+        IAuxInTuningSpace2* This,
+        REFCLSID NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTuneRequest)(
+        IAuxInTuningSpace2* This,
+        ITuneRequest **TuneRequest);
+
+    HRESULT (STDMETHODCALLTYPE *EnumCategoryGUIDs)(
+        IAuxInTuningSpace2* This,
+        IEnumGUID **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *EnumDeviceMonikers)(
+        IAuxInTuningSpace2* This,
+        IEnumMoniker **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *get_DefaultPreferredComponentTypes)(
+        IAuxInTuningSpace2* This,
+        IComponentTypes **ComponentTypes);
+
+    HRESULT (STDMETHODCALLTYPE *put_DefaultPreferredComponentTypes)(
+        IAuxInTuningSpace2* This,
+        IComponentTypes *NewComponentTypes);
+
+    HRESULT (STDMETHODCALLTYPE *get_FrequencyMapping)(
+        IAuxInTuningSpace2* This,
+        BSTR *pMapping);
+
+    HRESULT (STDMETHODCALLTYPE *put_FrequencyMapping)(
+        IAuxInTuningSpace2* This,
+        BSTR Mapping);
+
+    HRESULT (STDMETHODCALLTYPE *get_DefaultLocator)(
+        IAuxInTuningSpace2* This,
+        ILocator **LocatorVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_DefaultLocator)(
+        IAuxInTuningSpace2* This,
+        ILocator *LocatorVal);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IAuxInTuningSpace2* This,
+        ITuningSpace **NewTS);
+
+    /*** IAuxInTuningSpace2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_CountryCode)(
+        IAuxInTuningSpace2* This,
+        LONG *CountryCodeVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_CountryCode)(
+        IAuxInTuningSpace2* This,
+        LONG NewCountryCodeVal);
+
+    END_INTERFACE
+} IAuxInTuningSpace2Vtbl;
+interface IAuxInTuningSpace2 {
+    CONST_VTBL IAuxInTuningSpace2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IAuxInTuningSpace2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAuxInTuningSpace2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAuxInTuningSpace2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IAuxInTuningSpace2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IAuxInTuningSpace2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IAuxInTuningSpace2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IAuxInTuningSpace2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ITuningSpace methods ***/
+#define IAuxInTuningSpace2_get_UniqueName(This,Name) (This)->lpVtbl->get_UniqueName(This,Name)
+#define IAuxInTuningSpace2_put_UniqueName(This,Name) (This)->lpVtbl->put_UniqueName(This,Name)
+#define IAuxInTuningSpace2_get_FriendlyName(This,Name) (This)->lpVtbl->get_FriendlyName(This,Name)
+#define IAuxInTuningSpace2_put_FriendlyName(This,Name) (This)->lpVtbl->put_FriendlyName(This,Name)
+#define IAuxInTuningSpace2_get_CLSID(This,SpaceCLSID) (This)->lpVtbl->get_CLSID(This,SpaceCLSID)
+#define IAuxInTuningSpace2_get_NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->get_NetworkType(This,NetworkTypeGuid)
+#define IAuxInTuningSpace2_put_NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->put_NetworkType(This,NetworkTypeGuid)
+#define IAuxInTuningSpace2_get__NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->get__NetworkType(This,NetworkTypeGuid)
+#define IAuxInTuningSpace2_put__NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->put__NetworkType(This,NetworkTypeGuid)
+#define IAuxInTuningSpace2_CreateTuneRequest(This,TuneRequest) (This)->lpVtbl->CreateTuneRequest(This,TuneRequest)
+#define IAuxInTuningSpace2_EnumCategoryGUIDs(This,ppEnum) (This)->lpVtbl->EnumCategoryGUIDs(This,ppEnum)
+#define IAuxInTuningSpace2_EnumDeviceMonikers(This,ppEnum) (This)->lpVtbl->EnumDeviceMonikers(This,ppEnum)
+#define IAuxInTuningSpace2_get_DefaultPreferredComponentTypes(This,ComponentTypes) (This)->lpVtbl->get_DefaultPreferredComponentTypes(This,ComponentTypes)
+#define IAuxInTuningSpace2_put_DefaultPreferredComponentTypes(This,NewComponentTypes) (This)->lpVtbl->put_DefaultPreferredComponentTypes(This,NewComponentTypes)
+#define IAuxInTuningSpace2_get_FrequencyMapping(This,pMapping) (This)->lpVtbl->get_FrequencyMapping(This,pMapping)
+#define IAuxInTuningSpace2_put_FrequencyMapping(This,Mapping) (This)->lpVtbl->put_FrequencyMapping(This,Mapping)
+#define IAuxInTuningSpace2_get_DefaultLocator(This,LocatorVal) (This)->lpVtbl->get_DefaultLocator(This,LocatorVal)
+#define IAuxInTuningSpace2_put_DefaultLocator(This,LocatorVal) (This)->lpVtbl->put_DefaultLocator(This,LocatorVal)
+#define IAuxInTuningSpace2_Clone(This,NewTS) (This)->lpVtbl->Clone(This,NewTS)
+/*** IAuxInTuningSpace2 methods ***/
+#define IAuxInTuningSpace2_get_CountryCode(This,CountryCodeVal) (This)->lpVtbl->get_CountryCode(This,CountryCodeVal)
+#define IAuxInTuningSpace2_put_CountryCode(This,NewCountryCodeVal) (This)->lpVtbl->put_CountryCode(This,NewCountryCodeVal)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IAuxInTuningSpace2_QueryInterface(IAuxInTuningSpace2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IAuxInTuningSpace2_AddRef(IAuxInTuningSpace2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IAuxInTuningSpace2_Release(IAuxInTuningSpace2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IAuxInTuningSpace2_GetTypeInfoCount(IAuxInTuningSpace2* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace2_GetTypeInfo(IAuxInTuningSpace2* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace2_GetIDsOfNames(IAuxInTuningSpace2* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace2_Invoke(IAuxInTuningSpace2* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ITuningSpace methods ***/
+static FORCEINLINE HRESULT IAuxInTuningSpace2_get_UniqueName(IAuxInTuningSpace2* This,BSTR *Name) {
+    return This->lpVtbl->get_UniqueName(This,Name);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace2_put_UniqueName(IAuxInTuningSpace2* This,BSTR Name) {
+    return This->lpVtbl->put_UniqueName(This,Name);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace2_get_FriendlyName(IAuxInTuningSpace2* This,BSTR *Name) {
+    return This->lpVtbl->get_FriendlyName(This,Name);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace2_put_FriendlyName(IAuxInTuningSpace2* This,BSTR Name) {
+    return This->lpVtbl->put_FriendlyName(This,Name);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace2_get_CLSID(IAuxInTuningSpace2* This,BSTR *SpaceCLSID) {
+    return This->lpVtbl->get_CLSID(This,SpaceCLSID);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace2_get_NetworkType(IAuxInTuningSpace2* This,BSTR *NetworkTypeGuid) {
+    return This->lpVtbl->get_NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace2_put_NetworkType(IAuxInTuningSpace2* This,BSTR NetworkTypeGuid) {
+    return This->lpVtbl->put_NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace2_get__NetworkType(IAuxInTuningSpace2* This,GUID *NetworkTypeGuid) {
+    return This->lpVtbl->get__NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace2_put__NetworkType(IAuxInTuningSpace2* This,REFCLSID NetworkTypeGuid) {
+    return This->lpVtbl->put__NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace2_CreateTuneRequest(IAuxInTuningSpace2* This,ITuneRequest **TuneRequest) {
+    return This->lpVtbl->CreateTuneRequest(This,TuneRequest);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace2_EnumCategoryGUIDs(IAuxInTuningSpace2* This,IEnumGUID **ppEnum) {
+    return This->lpVtbl->EnumCategoryGUIDs(This,ppEnum);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace2_EnumDeviceMonikers(IAuxInTuningSpace2* This,IEnumMoniker **ppEnum) {
+    return This->lpVtbl->EnumDeviceMonikers(This,ppEnum);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace2_get_DefaultPreferredComponentTypes(IAuxInTuningSpace2* This,IComponentTypes **ComponentTypes) {
+    return This->lpVtbl->get_DefaultPreferredComponentTypes(This,ComponentTypes);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace2_put_DefaultPreferredComponentTypes(IAuxInTuningSpace2* This,IComponentTypes *NewComponentTypes) {
+    return This->lpVtbl->put_DefaultPreferredComponentTypes(This,NewComponentTypes);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace2_get_FrequencyMapping(IAuxInTuningSpace2* This,BSTR *pMapping) {
+    return This->lpVtbl->get_FrequencyMapping(This,pMapping);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace2_put_FrequencyMapping(IAuxInTuningSpace2* This,BSTR Mapping) {
+    return This->lpVtbl->put_FrequencyMapping(This,Mapping);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace2_get_DefaultLocator(IAuxInTuningSpace2* This,ILocator **LocatorVal) {
+    return This->lpVtbl->get_DefaultLocator(This,LocatorVal);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace2_put_DefaultLocator(IAuxInTuningSpace2* This,ILocator *LocatorVal) {
+    return This->lpVtbl->put_DefaultLocator(This,LocatorVal);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace2_Clone(IAuxInTuningSpace2* This,ITuningSpace **NewTS) {
+    return This->lpVtbl->Clone(This,NewTS);
+}
+/*** IAuxInTuningSpace2 methods ***/
+static FORCEINLINE HRESULT IAuxInTuningSpace2_get_CountryCode(IAuxInTuningSpace2* This,LONG *CountryCodeVal) {
+    return This->lpVtbl->get_CountryCode(This,CountryCodeVal);
+}
+static FORCEINLINE HRESULT IAuxInTuningSpace2_put_CountryCode(IAuxInTuningSpace2* This,LONG NewCountryCodeVal) {
+    return This->lpVtbl->put_CountryCode(This,NewCountryCodeVal);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IAuxInTuningSpace2_get_CountryCode_Proxy(
+    IAuxInTuningSpace2* This,
+    LONG *CountryCodeVal);
+void __RPC_STUB IAuxInTuningSpace2_get_CountryCode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAuxInTuningSpace2_put_CountryCode_Proxy(
+    IAuxInTuningSpace2* This,
+    LONG NewCountryCodeVal);
+void __RPC_STUB IAuxInTuningSpace2_put_CountryCode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IAuxInTuningSpace2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAnalogTVTuningSpace interface
+ */
+#ifndef __IAnalogTVTuningSpace_INTERFACE_DEFINED__
+#define __IAnalogTVTuningSpace_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IAnalogTVTuningSpace, 0x2a6e293c, 0x2595, 0x11d3, 0xb6,0x4c, 0x00,0xc0,0x4f,0x79,0x49,0x8e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("2a6e293c-2595-11d3-b64c-00c04f79498e")
+IAnalogTVTuningSpace : public ITuningSpace
+{
+    virtual HRESULT STDMETHODCALLTYPE get_MinChannel(
+        LONG *MinChannelVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_MinChannel(
+        LONG NewMinChannelVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_MaxChannel(
+        LONG *MaxChannelVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_MaxChannel(
+        LONG NewMaxChannelVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_InputType(
+        TunerInputType *InputTypeVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_InputType(
+        TunerInputType NewInputTypeVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_CountryCode(
+        LONG *CountryCodeVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_CountryCode(
+        LONG NewCountryCodeVal) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IAnalogTVTuningSpace, 0x2a6e293c, 0x2595, 0x11d3, 0xb6,0x4c, 0x00,0xc0,0x4f,0x79,0x49,0x8e)
+#endif
+#else
+typedef struct IAnalogTVTuningSpaceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IAnalogTVTuningSpace* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IAnalogTVTuningSpace* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IAnalogTVTuningSpace* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IAnalogTVTuningSpace* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IAnalogTVTuningSpace* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IAnalogTVTuningSpace* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IAnalogTVTuningSpace* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ITuningSpace methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_UniqueName)(
+        IAnalogTVTuningSpace* This,
+        BSTR *Name);
+
+    HRESULT (STDMETHODCALLTYPE *put_UniqueName)(
+        IAnalogTVTuningSpace* This,
+        BSTR Name);
+
+    HRESULT (STDMETHODCALLTYPE *get_FriendlyName)(
+        IAnalogTVTuningSpace* This,
+        BSTR *Name);
+
+    HRESULT (STDMETHODCALLTYPE *put_FriendlyName)(
+        IAnalogTVTuningSpace* This,
+        BSTR Name);
+
+    HRESULT (STDMETHODCALLTYPE *get_CLSID)(
+        IAnalogTVTuningSpace* This,
+        BSTR *SpaceCLSID);
+
+    HRESULT (STDMETHODCALLTYPE *get_NetworkType)(
+        IAnalogTVTuningSpace* This,
+        BSTR *NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put_NetworkType)(
+        IAnalogTVTuningSpace* This,
+        BSTR NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *get__NetworkType)(
+        IAnalogTVTuningSpace* This,
+        GUID *NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put__NetworkType)(
+        IAnalogTVTuningSpace* This,
+        REFCLSID NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTuneRequest)(
+        IAnalogTVTuningSpace* This,
+        ITuneRequest **TuneRequest);
+
+    HRESULT (STDMETHODCALLTYPE *EnumCategoryGUIDs)(
+        IAnalogTVTuningSpace* This,
+        IEnumGUID **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *EnumDeviceMonikers)(
+        IAnalogTVTuningSpace* This,
+        IEnumMoniker **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *get_DefaultPreferredComponentTypes)(
+        IAnalogTVTuningSpace* This,
+        IComponentTypes **ComponentTypes);
+
+    HRESULT (STDMETHODCALLTYPE *put_DefaultPreferredComponentTypes)(
+        IAnalogTVTuningSpace* This,
+        IComponentTypes *NewComponentTypes);
+
+    HRESULT (STDMETHODCALLTYPE *get_FrequencyMapping)(
+        IAnalogTVTuningSpace* This,
+        BSTR *pMapping);
+
+    HRESULT (STDMETHODCALLTYPE *put_FrequencyMapping)(
+        IAnalogTVTuningSpace* This,
+        BSTR Mapping);
+
+    HRESULT (STDMETHODCALLTYPE *get_DefaultLocator)(
+        IAnalogTVTuningSpace* This,
+        ILocator **LocatorVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_DefaultLocator)(
+        IAnalogTVTuningSpace* This,
+        ILocator *LocatorVal);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IAnalogTVTuningSpace* This,
+        ITuningSpace **NewTS);
+
+    /*** IAnalogTVTuningSpace methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_MinChannel)(
+        IAnalogTVTuningSpace* This,
+        LONG *MinChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_MinChannel)(
+        IAnalogTVTuningSpace* This,
+        LONG NewMinChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_MaxChannel)(
+        IAnalogTVTuningSpace* This,
+        LONG *MaxChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_MaxChannel)(
+        IAnalogTVTuningSpace* This,
+        LONG NewMaxChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_InputType)(
+        IAnalogTVTuningSpace* This,
+        TunerInputType *InputTypeVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_InputType)(
+        IAnalogTVTuningSpace* This,
+        TunerInputType NewInputTypeVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_CountryCode)(
+        IAnalogTVTuningSpace* This,
+        LONG *CountryCodeVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_CountryCode)(
+        IAnalogTVTuningSpace* This,
+        LONG NewCountryCodeVal);
+
+    END_INTERFACE
+} IAnalogTVTuningSpaceVtbl;
+interface IAnalogTVTuningSpace {
+    CONST_VTBL IAnalogTVTuningSpaceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IAnalogTVTuningSpace_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAnalogTVTuningSpace_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAnalogTVTuningSpace_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IAnalogTVTuningSpace_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IAnalogTVTuningSpace_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IAnalogTVTuningSpace_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IAnalogTVTuningSpace_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ITuningSpace methods ***/
+#define IAnalogTVTuningSpace_get_UniqueName(This,Name) (This)->lpVtbl->get_UniqueName(This,Name)
+#define IAnalogTVTuningSpace_put_UniqueName(This,Name) (This)->lpVtbl->put_UniqueName(This,Name)
+#define IAnalogTVTuningSpace_get_FriendlyName(This,Name) (This)->lpVtbl->get_FriendlyName(This,Name)
+#define IAnalogTVTuningSpace_put_FriendlyName(This,Name) (This)->lpVtbl->put_FriendlyName(This,Name)
+#define IAnalogTVTuningSpace_get_CLSID(This,SpaceCLSID) (This)->lpVtbl->get_CLSID(This,SpaceCLSID)
+#define IAnalogTVTuningSpace_get_NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->get_NetworkType(This,NetworkTypeGuid)
+#define IAnalogTVTuningSpace_put_NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->put_NetworkType(This,NetworkTypeGuid)
+#define IAnalogTVTuningSpace_get__NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->get__NetworkType(This,NetworkTypeGuid)
+#define IAnalogTVTuningSpace_put__NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->put__NetworkType(This,NetworkTypeGuid)
+#define IAnalogTVTuningSpace_CreateTuneRequest(This,TuneRequest) (This)->lpVtbl->CreateTuneRequest(This,TuneRequest)
+#define IAnalogTVTuningSpace_EnumCategoryGUIDs(This,ppEnum) (This)->lpVtbl->EnumCategoryGUIDs(This,ppEnum)
+#define IAnalogTVTuningSpace_EnumDeviceMonikers(This,ppEnum) (This)->lpVtbl->EnumDeviceMonikers(This,ppEnum)
+#define IAnalogTVTuningSpace_get_DefaultPreferredComponentTypes(This,ComponentTypes) (This)->lpVtbl->get_DefaultPreferredComponentTypes(This,ComponentTypes)
+#define IAnalogTVTuningSpace_put_DefaultPreferredComponentTypes(This,NewComponentTypes) (This)->lpVtbl->put_DefaultPreferredComponentTypes(This,NewComponentTypes)
+#define IAnalogTVTuningSpace_get_FrequencyMapping(This,pMapping) (This)->lpVtbl->get_FrequencyMapping(This,pMapping)
+#define IAnalogTVTuningSpace_put_FrequencyMapping(This,Mapping) (This)->lpVtbl->put_FrequencyMapping(This,Mapping)
+#define IAnalogTVTuningSpace_get_DefaultLocator(This,LocatorVal) (This)->lpVtbl->get_DefaultLocator(This,LocatorVal)
+#define IAnalogTVTuningSpace_put_DefaultLocator(This,LocatorVal) (This)->lpVtbl->put_DefaultLocator(This,LocatorVal)
+#define IAnalogTVTuningSpace_Clone(This,NewTS) (This)->lpVtbl->Clone(This,NewTS)
+/*** IAnalogTVTuningSpace methods ***/
+#define IAnalogTVTuningSpace_get_MinChannel(This,MinChannelVal) (This)->lpVtbl->get_MinChannel(This,MinChannelVal)
+#define IAnalogTVTuningSpace_put_MinChannel(This,NewMinChannelVal) (This)->lpVtbl->put_MinChannel(This,NewMinChannelVal)
+#define IAnalogTVTuningSpace_get_MaxChannel(This,MaxChannelVal) (This)->lpVtbl->get_MaxChannel(This,MaxChannelVal)
+#define IAnalogTVTuningSpace_put_MaxChannel(This,NewMaxChannelVal) (This)->lpVtbl->put_MaxChannel(This,NewMaxChannelVal)
+#define IAnalogTVTuningSpace_get_InputType(This,InputTypeVal) (This)->lpVtbl->get_InputType(This,InputTypeVal)
+#define IAnalogTVTuningSpace_put_InputType(This,NewInputTypeVal) (This)->lpVtbl->put_InputType(This,NewInputTypeVal)
+#define IAnalogTVTuningSpace_get_CountryCode(This,CountryCodeVal) (This)->lpVtbl->get_CountryCode(This,CountryCodeVal)
+#define IAnalogTVTuningSpace_put_CountryCode(This,NewCountryCodeVal) (This)->lpVtbl->put_CountryCode(This,NewCountryCodeVal)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_QueryInterface(IAnalogTVTuningSpace* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IAnalogTVTuningSpace_AddRef(IAnalogTVTuningSpace* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IAnalogTVTuningSpace_Release(IAnalogTVTuningSpace* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_GetTypeInfoCount(IAnalogTVTuningSpace* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_GetTypeInfo(IAnalogTVTuningSpace* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_GetIDsOfNames(IAnalogTVTuningSpace* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_Invoke(IAnalogTVTuningSpace* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ITuningSpace methods ***/
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_get_UniqueName(IAnalogTVTuningSpace* This,BSTR *Name) {
+    return This->lpVtbl->get_UniqueName(This,Name);
+}
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_put_UniqueName(IAnalogTVTuningSpace* This,BSTR Name) {
+    return This->lpVtbl->put_UniqueName(This,Name);
+}
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_get_FriendlyName(IAnalogTVTuningSpace* This,BSTR *Name) {
+    return This->lpVtbl->get_FriendlyName(This,Name);
+}
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_put_FriendlyName(IAnalogTVTuningSpace* This,BSTR Name) {
+    return This->lpVtbl->put_FriendlyName(This,Name);
+}
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_get_CLSID(IAnalogTVTuningSpace* This,BSTR *SpaceCLSID) {
+    return This->lpVtbl->get_CLSID(This,SpaceCLSID);
+}
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_get_NetworkType(IAnalogTVTuningSpace* This,BSTR *NetworkTypeGuid) {
+    return This->lpVtbl->get_NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_put_NetworkType(IAnalogTVTuningSpace* This,BSTR NetworkTypeGuid) {
+    return This->lpVtbl->put_NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_get__NetworkType(IAnalogTVTuningSpace* This,GUID *NetworkTypeGuid) {
+    return This->lpVtbl->get__NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_put__NetworkType(IAnalogTVTuningSpace* This,REFCLSID NetworkTypeGuid) {
+    return This->lpVtbl->put__NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_CreateTuneRequest(IAnalogTVTuningSpace* This,ITuneRequest **TuneRequest) {
+    return This->lpVtbl->CreateTuneRequest(This,TuneRequest);
+}
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_EnumCategoryGUIDs(IAnalogTVTuningSpace* This,IEnumGUID **ppEnum) {
+    return This->lpVtbl->EnumCategoryGUIDs(This,ppEnum);
+}
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_EnumDeviceMonikers(IAnalogTVTuningSpace* This,IEnumMoniker **ppEnum) {
+    return This->lpVtbl->EnumDeviceMonikers(This,ppEnum);
+}
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_get_DefaultPreferredComponentTypes(IAnalogTVTuningSpace* This,IComponentTypes **ComponentTypes) {
+    return This->lpVtbl->get_DefaultPreferredComponentTypes(This,ComponentTypes);
+}
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_put_DefaultPreferredComponentTypes(IAnalogTVTuningSpace* This,IComponentTypes *NewComponentTypes) {
+    return This->lpVtbl->put_DefaultPreferredComponentTypes(This,NewComponentTypes);
+}
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_get_FrequencyMapping(IAnalogTVTuningSpace* This,BSTR *pMapping) {
+    return This->lpVtbl->get_FrequencyMapping(This,pMapping);
+}
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_put_FrequencyMapping(IAnalogTVTuningSpace* This,BSTR Mapping) {
+    return This->lpVtbl->put_FrequencyMapping(This,Mapping);
+}
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_get_DefaultLocator(IAnalogTVTuningSpace* This,ILocator **LocatorVal) {
+    return This->lpVtbl->get_DefaultLocator(This,LocatorVal);
+}
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_put_DefaultLocator(IAnalogTVTuningSpace* This,ILocator *LocatorVal) {
+    return This->lpVtbl->put_DefaultLocator(This,LocatorVal);
+}
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_Clone(IAnalogTVTuningSpace* This,ITuningSpace **NewTS) {
+    return This->lpVtbl->Clone(This,NewTS);
+}
+/*** IAnalogTVTuningSpace methods ***/
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_get_MinChannel(IAnalogTVTuningSpace* This,LONG *MinChannelVal) {
+    return This->lpVtbl->get_MinChannel(This,MinChannelVal);
+}
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_put_MinChannel(IAnalogTVTuningSpace* This,LONG NewMinChannelVal) {
+    return This->lpVtbl->put_MinChannel(This,NewMinChannelVal);
+}
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_get_MaxChannel(IAnalogTVTuningSpace* This,LONG *MaxChannelVal) {
+    return This->lpVtbl->get_MaxChannel(This,MaxChannelVal);
+}
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_put_MaxChannel(IAnalogTVTuningSpace* This,LONG NewMaxChannelVal) {
+    return This->lpVtbl->put_MaxChannel(This,NewMaxChannelVal);
+}
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_get_InputType(IAnalogTVTuningSpace* This,TunerInputType *InputTypeVal) {
+    return This->lpVtbl->get_InputType(This,InputTypeVal);
+}
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_put_InputType(IAnalogTVTuningSpace* This,TunerInputType NewInputTypeVal) {
+    return This->lpVtbl->put_InputType(This,NewInputTypeVal);
+}
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_get_CountryCode(IAnalogTVTuningSpace* This,LONG *CountryCodeVal) {
+    return This->lpVtbl->get_CountryCode(This,CountryCodeVal);
+}
+static FORCEINLINE HRESULT IAnalogTVTuningSpace_put_CountryCode(IAnalogTVTuningSpace* This,LONG NewCountryCodeVal) {
+    return This->lpVtbl->put_CountryCode(This,NewCountryCodeVal);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IAnalogTVTuningSpace_get_MinChannel_Proxy(
+    IAnalogTVTuningSpace* This,
+    LONG *MinChannelVal);
+void __RPC_STUB IAnalogTVTuningSpace_get_MinChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAnalogTVTuningSpace_put_MinChannel_Proxy(
+    IAnalogTVTuningSpace* This,
+    LONG NewMinChannelVal);
+void __RPC_STUB IAnalogTVTuningSpace_put_MinChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAnalogTVTuningSpace_get_MaxChannel_Proxy(
+    IAnalogTVTuningSpace* This,
+    LONG *MaxChannelVal);
+void __RPC_STUB IAnalogTVTuningSpace_get_MaxChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAnalogTVTuningSpace_put_MaxChannel_Proxy(
+    IAnalogTVTuningSpace* This,
+    LONG NewMaxChannelVal);
+void __RPC_STUB IAnalogTVTuningSpace_put_MaxChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAnalogTVTuningSpace_get_InputType_Proxy(
+    IAnalogTVTuningSpace* This,
+    TunerInputType *InputTypeVal);
+void __RPC_STUB IAnalogTVTuningSpace_get_InputType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAnalogTVTuningSpace_put_InputType_Proxy(
+    IAnalogTVTuningSpace* This,
+    TunerInputType NewInputTypeVal);
+void __RPC_STUB IAnalogTVTuningSpace_put_InputType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAnalogTVTuningSpace_get_CountryCode_Proxy(
+    IAnalogTVTuningSpace* This,
+    LONG *CountryCodeVal);
+void __RPC_STUB IAnalogTVTuningSpace_get_CountryCode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAnalogTVTuningSpace_put_CountryCode_Proxy(
+    IAnalogTVTuningSpace* This,
+    LONG NewCountryCodeVal);
+void __RPC_STUB IAnalogTVTuningSpace_put_CountryCode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IAnalogTVTuningSpace_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IATSCTuningSpace interface
+ */
+#ifndef __IATSCTuningSpace_INTERFACE_DEFINED__
+#define __IATSCTuningSpace_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IATSCTuningSpace, 0x0369b4e2, 0x45b6, 0x11d3, 0xb6,0x50, 0x00,0xc0,0x4f,0x79,0x49,0x8e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("0369b4e2-45b6-11d3-b650-00c04f79498e")
+IATSCTuningSpace : public IAnalogTVTuningSpace
+{
+    virtual HRESULT STDMETHODCALLTYPE get_MinMinorChannel(
+        LONG *MinMinorChannelVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_MinMinorChannel(
+        LONG NewMinMinorChannelVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_MaxMinorChannel(
+        LONG *MaxMinorChannelVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_MaxMinorChannel(
+        LONG NewMaxMinorChannelVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_MinPhysicalChannel(
+        LONG *MinPhysicalChannelVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_MinPhysicalChannel(
+        LONG NewMinPhysicalChannelVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_MaxPhysicalChannel(
+        LONG *MaxPhysicalChannelVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_MaxPhysicalChannel(
+        LONG NewMaxPhysicalChannelVal) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IATSCTuningSpace, 0x0369b4e2, 0x45b6, 0x11d3, 0xb6,0x50, 0x00,0xc0,0x4f,0x79,0x49,0x8e)
+#endif
+#else
+typedef struct IATSCTuningSpaceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IATSCTuningSpace* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IATSCTuningSpace* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IATSCTuningSpace* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IATSCTuningSpace* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IATSCTuningSpace* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IATSCTuningSpace* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IATSCTuningSpace* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ITuningSpace methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_UniqueName)(
+        IATSCTuningSpace* This,
+        BSTR *Name);
+
+    HRESULT (STDMETHODCALLTYPE *put_UniqueName)(
+        IATSCTuningSpace* This,
+        BSTR Name);
+
+    HRESULT (STDMETHODCALLTYPE *get_FriendlyName)(
+        IATSCTuningSpace* This,
+        BSTR *Name);
+
+    HRESULT (STDMETHODCALLTYPE *put_FriendlyName)(
+        IATSCTuningSpace* This,
+        BSTR Name);
+
+    HRESULT (STDMETHODCALLTYPE *get_CLSID)(
+        IATSCTuningSpace* This,
+        BSTR *SpaceCLSID);
+
+    HRESULT (STDMETHODCALLTYPE *get_NetworkType)(
+        IATSCTuningSpace* This,
+        BSTR *NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put_NetworkType)(
+        IATSCTuningSpace* This,
+        BSTR NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *get__NetworkType)(
+        IATSCTuningSpace* This,
+        GUID *NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put__NetworkType)(
+        IATSCTuningSpace* This,
+        REFCLSID NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTuneRequest)(
+        IATSCTuningSpace* This,
+        ITuneRequest **TuneRequest);
+
+    HRESULT (STDMETHODCALLTYPE *EnumCategoryGUIDs)(
+        IATSCTuningSpace* This,
+        IEnumGUID **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *EnumDeviceMonikers)(
+        IATSCTuningSpace* This,
+        IEnumMoniker **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *get_DefaultPreferredComponentTypes)(
+        IATSCTuningSpace* This,
+        IComponentTypes **ComponentTypes);
+
+    HRESULT (STDMETHODCALLTYPE *put_DefaultPreferredComponentTypes)(
+        IATSCTuningSpace* This,
+        IComponentTypes *NewComponentTypes);
+
+    HRESULT (STDMETHODCALLTYPE *get_FrequencyMapping)(
+        IATSCTuningSpace* This,
+        BSTR *pMapping);
+
+    HRESULT (STDMETHODCALLTYPE *put_FrequencyMapping)(
+        IATSCTuningSpace* This,
+        BSTR Mapping);
+
+    HRESULT (STDMETHODCALLTYPE *get_DefaultLocator)(
+        IATSCTuningSpace* This,
+        ILocator **LocatorVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_DefaultLocator)(
+        IATSCTuningSpace* This,
+        ILocator *LocatorVal);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IATSCTuningSpace* This,
+        ITuningSpace **NewTS);
+
+    /*** IAnalogTVTuningSpace methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_MinChannel)(
+        IATSCTuningSpace* This,
+        LONG *MinChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_MinChannel)(
+        IATSCTuningSpace* This,
+        LONG NewMinChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_MaxChannel)(
+        IATSCTuningSpace* This,
+        LONG *MaxChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_MaxChannel)(
+        IATSCTuningSpace* This,
+        LONG NewMaxChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_InputType)(
+        IATSCTuningSpace* This,
+        TunerInputType *InputTypeVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_InputType)(
+        IATSCTuningSpace* This,
+        TunerInputType NewInputTypeVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_CountryCode)(
+        IATSCTuningSpace* This,
+        LONG *CountryCodeVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_CountryCode)(
+        IATSCTuningSpace* This,
+        LONG NewCountryCodeVal);
+
+    /*** IATSCTuningSpace methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_MinMinorChannel)(
+        IATSCTuningSpace* This,
+        LONG *MinMinorChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_MinMinorChannel)(
+        IATSCTuningSpace* This,
+        LONG NewMinMinorChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_MaxMinorChannel)(
+        IATSCTuningSpace* This,
+        LONG *MaxMinorChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_MaxMinorChannel)(
+        IATSCTuningSpace* This,
+        LONG NewMaxMinorChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_MinPhysicalChannel)(
+        IATSCTuningSpace* This,
+        LONG *MinPhysicalChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_MinPhysicalChannel)(
+        IATSCTuningSpace* This,
+        LONG NewMinPhysicalChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_MaxPhysicalChannel)(
+        IATSCTuningSpace* This,
+        LONG *MaxPhysicalChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_MaxPhysicalChannel)(
+        IATSCTuningSpace* This,
+        LONG NewMaxPhysicalChannelVal);
+
+    END_INTERFACE
+} IATSCTuningSpaceVtbl;
+interface IATSCTuningSpace {
+    CONST_VTBL IATSCTuningSpaceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IATSCTuningSpace_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IATSCTuningSpace_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IATSCTuningSpace_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IATSCTuningSpace_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IATSCTuningSpace_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IATSCTuningSpace_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IATSCTuningSpace_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ITuningSpace methods ***/
+#define IATSCTuningSpace_get_UniqueName(This,Name) (This)->lpVtbl->get_UniqueName(This,Name)
+#define IATSCTuningSpace_put_UniqueName(This,Name) (This)->lpVtbl->put_UniqueName(This,Name)
+#define IATSCTuningSpace_get_FriendlyName(This,Name) (This)->lpVtbl->get_FriendlyName(This,Name)
+#define IATSCTuningSpace_put_FriendlyName(This,Name) (This)->lpVtbl->put_FriendlyName(This,Name)
+#define IATSCTuningSpace_get_CLSID(This,SpaceCLSID) (This)->lpVtbl->get_CLSID(This,SpaceCLSID)
+#define IATSCTuningSpace_get_NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->get_NetworkType(This,NetworkTypeGuid)
+#define IATSCTuningSpace_put_NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->put_NetworkType(This,NetworkTypeGuid)
+#define IATSCTuningSpace_get__NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->get__NetworkType(This,NetworkTypeGuid)
+#define IATSCTuningSpace_put__NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->put__NetworkType(This,NetworkTypeGuid)
+#define IATSCTuningSpace_CreateTuneRequest(This,TuneRequest) (This)->lpVtbl->CreateTuneRequest(This,TuneRequest)
+#define IATSCTuningSpace_EnumCategoryGUIDs(This,ppEnum) (This)->lpVtbl->EnumCategoryGUIDs(This,ppEnum)
+#define IATSCTuningSpace_EnumDeviceMonikers(This,ppEnum) (This)->lpVtbl->EnumDeviceMonikers(This,ppEnum)
+#define IATSCTuningSpace_get_DefaultPreferredComponentTypes(This,ComponentTypes) (This)->lpVtbl->get_DefaultPreferredComponentTypes(This,ComponentTypes)
+#define IATSCTuningSpace_put_DefaultPreferredComponentTypes(This,NewComponentTypes) (This)->lpVtbl->put_DefaultPreferredComponentTypes(This,NewComponentTypes)
+#define IATSCTuningSpace_get_FrequencyMapping(This,pMapping) (This)->lpVtbl->get_FrequencyMapping(This,pMapping)
+#define IATSCTuningSpace_put_FrequencyMapping(This,Mapping) (This)->lpVtbl->put_FrequencyMapping(This,Mapping)
+#define IATSCTuningSpace_get_DefaultLocator(This,LocatorVal) (This)->lpVtbl->get_DefaultLocator(This,LocatorVal)
+#define IATSCTuningSpace_put_DefaultLocator(This,LocatorVal) (This)->lpVtbl->put_DefaultLocator(This,LocatorVal)
+#define IATSCTuningSpace_Clone(This,NewTS) (This)->lpVtbl->Clone(This,NewTS)
+/*** IAnalogTVTuningSpace methods ***/
+#define IATSCTuningSpace_get_MinChannel(This,MinChannelVal) (This)->lpVtbl->get_MinChannel(This,MinChannelVal)
+#define IATSCTuningSpace_put_MinChannel(This,NewMinChannelVal) (This)->lpVtbl->put_MinChannel(This,NewMinChannelVal)
+#define IATSCTuningSpace_get_MaxChannel(This,MaxChannelVal) (This)->lpVtbl->get_MaxChannel(This,MaxChannelVal)
+#define IATSCTuningSpace_put_MaxChannel(This,NewMaxChannelVal) (This)->lpVtbl->put_MaxChannel(This,NewMaxChannelVal)
+#define IATSCTuningSpace_get_InputType(This,InputTypeVal) (This)->lpVtbl->get_InputType(This,InputTypeVal)
+#define IATSCTuningSpace_put_InputType(This,NewInputTypeVal) (This)->lpVtbl->put_InputType(This,NewInputTypeVal)
+#define IATSCTuningSpace_get_CountryCode(This,CountryCodeVal) (This)->lpVtbl->get_CountryCode(This,CountryCodeVal)
+#define IATSCTuningSpace_put_CountryCode(This,NewCountryCodeVal) (This)->lpVtbl->put_CountryCode(This,NewCountryCodeVal)
+/*** IATSCTuningSpace methods ***/
+#define IATSCTuningSpace_get_MinMinorChannel(This,MinMinorChannelVal) (This)->lpVtbl->get_MinMinorChannel(This,MinMinorChannelVal)
+#define IATSCTuningSpace_put_MinMinorChannel(This,NewMinMinorChannelVal) (This)->lpVtbl->put_MinMinorChannel(This,NewMinMinorChannelVal)
+#define IATSCTuningSpace_get_MaxMinorChannel(This,MaxMinorChannelVal) (This)->lpVtbl->get_MaxMinorChannel(This,MaxMinorChannelVal)
+#define IATSCTuningSpace_put_MaxMinorChannel(This,NewMaxMinorChannelVal) (This)->lpVtbl->put_MaxMinorChannel(This,NewMaxMinorChannelVal)
+#define IATSCTuningSpace_get_MinPhysicalChannel(This,MinPhysicalChannelVal) (This)->lpVtbl->get_MinPhysicalChannel(This,MinPhysicalChannelVal)
+#define IATSCTuningSpace_put_MinPhysicalChannel(This,NewMinPhysicalChannelVal) (This)->lpVtbl->put_MinPhysicalChannel(This,NewMinPhysicalChannelVal)
+#define IATSCTuningSpace_get_MaxPhysicalChannel(This,MaxPhysicalChannelVal) (This)->lpVtbl->get_MaxPhysicalChannel(This,MaxPhysicalChannelVal)
+#define IATSCTuningSpace_put_MaxPhysicalChannel(This,NewMaxPhysicalChannelVal) (This)->lpVtbl->put_MaxPhysicalChannel(This,NewMaxPhysicalChannelVal)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IATSCTuningSpace_QueryInterface(IATSCTuningSpace* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IATSCTuningSpace_AddRef(IATSCTuningSpace* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IATSCTuningSpace_Release(IATSCTuningSpace* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IATSCTuningSpace_GetTypeInfoCount(IATSCTuningSpace* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_GetTypeInfo(IATSCTuningSpace* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_GetIDsOfNames(IATSCTuningSpace* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_Invoke(IATSCTuningSpace* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ITuningSpace methods ***/
+static FORCEINLINE HRESULT IATSCTuningSpace_get_UniqueName(IATSCTuningSpace* This,BSTR *Name) {
+    return This->lpVtbl->get_UniqueName(This,Name);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_put_UniqueName(IATSCTuningSpace* This,BSTR Name) {
+    return This->lpVtbl->put_UniqueName(This,Name);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_get_FriendlyName(IATSCTuningSpace* This,BSTR *Name) {
+    return This->lpVtbl->get_FriendlyName(This,Name);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_put_FriendlyName(IATSCTuningSpace* This,BSTR Name) {
+    return This->lpVtbl->put_FriendlyName(This,Name);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_get_CLSID(IATSCTuningSpace* This,BSTR *SpaceCLSID) {
+    return This->lpVtbl->get_CLSID(This,SpaceCLSID);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_get_NetworkType(IATSCTuningSpace* This,BSTR *NetworkTypeGuid) {
+    return This->lpVtbl->get_NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_put_NetworkType(IATSCTuningSpace* This,BSTR NetworkTypeGuid) {
+    return This->lpVtbl->put_NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_get__NetworkType(IATSCTuningSpace* This,GUID *NetworkTypeGuid) {
+    return This->lpVtbl->get__NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_put__NetworkType(IATSCTuningSpace* This,REFCLSID NetworkTypeGuid) {
+    return This->lpVtbl->put__NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_CreateTuneRequest(IATSCTuningSpace* This,ITuneRequest **TuneRequest) {
+    return This->lpVtbl->CreateTuneRequest(This,TuneRequest);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_EnumCategoryGUIDs(IATSCTuningSpace* This,IEnumGUID **ppEnum) {
+    return This->lpVtbl->EnumCategoryGUIDs(This,ppEnum);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_EnumDeviceMonikers(IATSCTuningSpace* This,IEnumMoniker **ppEnum) {
+    return This->lpVtbl->EnumDeviceMonikers(This,ppEnum);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_get_DefaultPreferredComponentTypes(IATSCTuningSpace* This,IComponentTypes **ComponentTypes) {
+    return This->lpVtbl->get_DefaultPreferredComponentTypes(This,ComponentTypes);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_put_DefaultPreferredComponentTypes(IATSCTuningSpace* This,IComponentTypes *NewComponentTypes) {
+    return This->lpVtbl->put_DefaultPreferredComponentTypes(This,NewComponentTypes);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_get_FrequencyMapping(IATSCTuningSpace* This,BSTR *pMapping) {
+    return This->lpVtbl->get_FrequencyMapping(This,pMapping);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_put_FrequencyMapping(IATSCTuningSpace* This,BSTR Mapping) {
+    return This->lpVtbl->put_FrequencyMapping(This,Mapping);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_get_DefaultLocator(IATSCTuningSpace* This,ILocator **LocatorVal) {
+    return This->lpVtbl->get_DefaultLocator(This,LocatorVal);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_put_DefaultLocator(IATSCTuningSpace* This,ILocator *LocatorVal) {
+    return This->lpVtbl->put_DefaultLocator(This,LocatorVal);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_Clone(IATSCTuningSpace* This,ITuningSpace **NewTS) {
+    return This->lpVtbl->Clone(This,NewTS);
+}
+/*** IAnalogTVTuningSpace methods ***/
+static FORCEINLINE HRESULT IATSCTuningSpace_get_MinChannel(IATSCTuningSpace* This,LONG *MinChannelVal) {
+    return This->lpVtbl->get_MinChannel(This,MinChannelVal);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_put_MinChannel(IATSCTuningSpace* This,LONG NewMinChannelVal) {
+    return This->lpVtbl->put_MinChannel(This,NewMinChannelVal);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_get_MaxChannel(IATSCTuningSpace* This,LONG *MaxChannelVal) {
+    return This->lpVtbl->get_MaxChannel(This,MaxChannelVal);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_put_MaxChannel(IATSCTuningSpace* This,LONG NewMaxChannelVal) {
+    return This->lpVtbl->put_MaxChannel(This,NewMaxChannelVal);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_get_InputType(IATSCTuningSpace* This,TunerInputType *InputTypeVal) {
+    return This->lpVtbl->get_InputType(This,InputTypeVal);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_put_InputType(IATSCTuningSpace* This,TunerInputType NewInputTypeVal) {
+    return This->lpVtbl->put_InputType(This,NewInputTypeVal);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_get_CountryCode(IATSCTuningSpace* This,LONG *CountryCodeVal) {
+    return This->lpVtbl->get_CountryCode(This,CountryCodeVal);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_put_CountryCode(IATSCTuningSpace* This,LONG NewCountryCodeVal) {
+    return This->lpVtbl->put_CountryCode(This,NewCountryCodeVal);
+}
+/*** IATSCTuningSpace methods ***/
+static FORCEINLINE HRESULT IATSCTuningSpace_get_MinMinorChannel(IATSCTuningSpace* This,LONG *MinMinorChannelVal) {
+    return This->lpVtbl->get_MinMinorChannel(This,MinMinorChannelVal);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_put_MinMinorChannel(IATSCTuningSpace* This,LONG NewMinMinorChannelVal) {
+    return This->lpVtbl->put_MinMinorChannel(This,NewMinMinorChannelVal);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_get_MaxMinorChannel(IATSCTuningSpace* This,LONG *MaxMinorChannelVal) {
+    return This->lpVtbl->get_MaxMinorChannel(This,MaxMinorChannelVal);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_put_MaxMinorChannel(IATSCTuningSpace* This,LONG NewMaxMinorChannelVal) {
+    return This->lpVtbl->put_MaxMinorChannel(This,NewMaxMinorChannelVal);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_get_MinPhysicalChannel(IATSCTuningSpace* This,LONG *MinPhysicalChannelVal) {
+    return This->lpVtbl->get_MinPhysicalChannel(This,MinPhysicalChannelVal);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_put_MinPhysicalChannel(IATSCTuningSpace* This,LONG NewMinPhysicalChannelVal) {
+    return This->lpVtbl->put_MinPhysicalChannel(This,NewMinPhysicalChannelVal);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_get_MaxPhysicalChannel(IATSCTuningSpace* This,LONG *MaxPhysicalChannelVal) {
+    return This->lpVtbl->get_MaxPhysicalChannel(This,MaxPhysicalChannelVal);
+}
+static FORCEINLINE HRESULT IATSCTuningSpace_put_MaxPhysicalChannel(IATSCTuningSpace* This,LONG NewMaxPhysicalChannelVal) {
+    return This->lpVtbl->put_MaxPhysicalChannel(This,NewMaxPhysicalChannelVal);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IATSCTuningSpace_get_MinMinorChannel_Proxy(
+    IATSCTuningSpace* This,
+    LONG *MinMinorChannelVal);
+void __RPC_STUB IATSCTuningSpace_get_MinMinorChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IATSCTuningSpace_put_MinMinorChannel_Proxy(
+    IATSCTuningSpace* This,
+    LONG NewMinMinorChannelVal);
+void __RPC_STUB IATSCTuningSpace_put_MinMinorChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IATSCTuningSpace_get_MaxMinorChannel_Proxy(
+    IATSCTuningSpace* This,
+    LONG *MaxMinorChannelVal);
+void __RPC_STUB IATSCTuningSpace_get_MaxMinorChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IATSCTuningSpace_put_MaxMinorChannel_Proxy(
+    IATSCTuningSpace* This,
+    LONG NewMaxMinorChannelVal);
+void __RPC_STUB IATSCTuningSpace_put_MaxMinorChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IATSCTuningSpace_get_MinPhysicalChannel_Proxy(
+    IATSCTuningSpace* This,
+    LONG *MinPhysicalChannelVal);
+void __RPC_STUB IATSCTuningSpace_get_MinPhysicalChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IATSCTuningSpace_put_MinPhysicalChannel_Proxy(
+    IATSCTuningSpace* This,
+    LONG NewMinPhysicalChannelVal);
+void __RPC_STUB IATSCTuningSpace_put_MinPhysicalChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IATSCTuningSpace_get_MaxPhysicalChannel_Proxy(
+    IATSCTuningSpace* This,
+    LONG *MaxPhysicalChannelVal);
+void __RPC_STUB IATSCTuningSpace_get_MaxPhysicalChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IATSCTuningSpace_put_MaxPhysicalChannel_Proxy(
+    IATSCTuningSpace* This,
+    LONG NewMaxPhysicalChannelVal);
+void __RPC_STUB IATSCTuningSpace_put_MaxPhysicalChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IATSCTuningSpace_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDigitalCableTuningSpace interface
+ */
+#ifndef __IDigitalCableTuningSpace_INTERFACE_DEFINED__
+#define __IDigitalCableTuningSpace_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDigitalCableTuningSpace, 0x013f9f9c, 0xb449, 0x4ec7, 0xa6,0xd2, 0x9d,0x4f,0x2f,0xc7,0x0a,0xe5);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("013f9f9c-b449-4ec7-a6d2-9d4f2fc70ae5")
+IDigitalCableTuningSpace : public IATSCTuningSpace
+{
+    virtual HRESULT STDMETHODCALLTYPE get_MinMajorChannel(
+        LONG *MinMajorChannelVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_MinMajorChannel(
+        LONG NewMinMajorChannelVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_MaxMajorChannel(
+        LONG *MaxMajorChannelVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_MaxMajorChannel(
+        LONG NewMaxMajorChannelVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_MinSourceID(
+        LONG *MinSourceIDVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_MinSourceID(
+        LONG NewMinSourceIDVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_MaxSourceID(
+        LONG *MaxSourceIDVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_MaxSourceID(
+        LONG NewMaxSourceIDVal) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDigitalCableTuningSpace, 0x013f9f9c, 0xb449, 0x4ec7, 0xa6,0xd2, 0x9d,0x4f,0x2f,0xc7,0x0a,0xe5)
+#endif
+#else
+typedef struct IDigitalCableTuningSpaceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDigitalCableTuningSpace* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDigitalCableTuningSpace* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDigitalCableTuningSpace* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IDigitalCableTuningSpace* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IDigitalCableTuningSpace* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IDigitalCableTuningSpace* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IDigitalCableTuningSpace* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ITuningSpace methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_UniqueName)(
+        IDigitalCableTuningSpace* This,
+        BSTR *Name);
+
+    HRESULT (STDMETHODCALLTYPE *put_UniqueName)(
+        IDigitalCableTuningSpace* This,
+        BSTR Name);
+
+    HRESULT (STDMETHODCALLTYPE *get_FriendlyName)(
+        IDigitalCableTuningSpace* This,
+        BSTR *Name);
+
+    HRESULT (STDMETHODCALLTYPE *put_FriendlyName)(
+        IDigitalCableTuningSpace* This,
+        BSTR Name);
+
+    HRESULT (STDMETHODCALLTYPE *get_CLSID)(
+        IDigitalCableTuningSpace* This,
+        BSTR *SpaceCLSID);
+
+    HRESULT (STDMETHODCALLTYPE *get_NetworkType)(
+        IDigitalCableTuningSpace* This,
+        BSTR *NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put_NetworkType)(
+        IDigitalCableTuningSpace* This,
+        BSTR NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *get__NetworkType)(
+        IDigitalCableTuningSpace* This,
+        GUID *NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put__NetworkType)(
+        IDigitalCableTuningSpace* This,
+        REFCLSID NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTuneRequest)(
+        IDigitalCableTuningSpace* This,
+        ITuneRequest **TuneRequest);
+
+    HRESULT (STDMETHODCALLTYPE *EnumCategoryGUIDs)(
+        IDigitalCableTuningSpace* This,
+        IEnumGUID **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *EnumDeviceMonikers)(
+        IDigitalCableTuningSpace* This,
+        IEnumMoniker **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *get_DefaultPreferredComponentTypes)(
+        IDigitalCableTuningSpace* This,
+        IComponentTypes **ComponentTypes);
+
+    HRESULT (STDMETHODCALLTYPE *put_DefaultPreferredComponentTypes)(
+        IDigitalCableTuningSpace* This,
+        IComponentTypes *NewComponentTypes);
+
+    HRESULT (STDMETHODCALLTYPE *get_FrequencyMapping)(
+        IDigitalCableTuningSpace* This,
+        BSTR *pMapping);
+
+    HRESULT (STDMETHODCALLTYPE *put_FrequencyMapping)(
+        IDigitalCableTuningSpace* This,
+        BSTR Mapping);
+
+    HRESULT (STDMETHODCALLTYPE *get_DefaultLocator)(
+        IDigitalCableTuningSpace* This,
+        ILocator **LocatorVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_DefaultLocator)(
+        IDigitalCableTuningSpace* This,
+        ILocator *LocatorVal);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IDigitalCableTuningSpace* This,
+        ITuningSpace **NewTS);
+
+    /*** IAnalogTVTuningSpace methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_MinChannel)(
+        IDigitalCableTuningSpace* This,
+        LONG *MinChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_MinChannel)(
+        IDigitalCableTuningSpace* This,
+        LONG NewMinChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_MaxChannel)(
+        IDigitalCableTuningSpace* This,
+        LONG *MaxChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_MaxChannel)(
+        IDigitalCableTuningSpace* This,
+        LONG NewMaxChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_InputType)(
+        IDigitalCableTuningSpace* This,
+        TunerInputType *InputTypeVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_InputType)(
+        IDigitalCableTuningSpace* This,
+        TunerInputType NewInputTypeVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_CountryCode)(
+        IDigitalCableTuningSpace* This,
+        LONG *CountryCodeVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_CountryCode)(
+        IDigitalCableTuningSpace* This,
+        LONG NewCountryCodeVal);
+
+    /*** IATSCTuningSpace methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_MinMinorChannel)(
+        IDigitalCableTuningSpace* This,
+        LONG *MinMinorChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_MinMinorChannel)(
+        IDigitalCableTuningSpace* This,
+        LONG NewMinMinorChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_MaxMinorChannel)(
+        IDigitalCableTuningSpace* This,
+        LONG *MaxMinorChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_MaxMinorChannel)(
+        IDigitalCableTuningSpace* This,
+        LONG NewMaxMinorChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_MinPhysicalChannel)(
+        IDigitalCableTuningSpace* This,
+        LONG *MinPhysicalChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_MinPhysicalChannel)(
+        IDigitalCableTuningSpace* This,
+        LONG NewMinPhysicalChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_MaxPhysicalChannel)(
+        IDigitalCableTuningSpace* This,
+        LONG *MaxPhysicalChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_MaxPhysicalChannel)(
+        IDigitalCableTuningSpace* This,
+        LONG NewMaxPhysicalChannelVal);
+
+    /*** IDigitalCableTuningSpace methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_MinMajorChannel)(
+        IDigitalCableTuningSpace* This,
+        LONG *MinMajorChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_MinMajorChannel)(
+        IDigitalCableTuningSpace* This,
+        LONG NewMinMajorChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_MaxMajorChannel)(
+        IDigitalCableTuningSpace* This,
+        LONG *MaxMajorChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_MaxMajorChannel)(
+        IDigitalCableTuningSpace* This,
+        LONG NewMaxMajorChannelVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_MinSourceID)(
+        IDigitalCableTuningSpace* This,
+        LONG *MinSourceIDVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_MinSourceID)(
+        IDigitalCableTuningSpace* This,
+        LONG NewMinSourceIDVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_MaxSourceID)(
+        IDigitalCableTuningSpace* This,
+        LONG *MaxSourceIDVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_MaxSourceID)(
+        IDigitalCableTuningSpace* This,
+        LONG NewMaxSourceIDVal);
+
+    END_INTERFACE
+} IDigitalCableTuningSpaceVtbl;
+interface IDigitalCableTuningSpace {
+    CONST_VTBL IDigitalCableTuningSpaceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDigitalCableTuningSpace_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDigitalCableTuningSpace_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDigitalCableTuningSpace_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IDigitalCableTuningSpace_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IDigitalCableTuningSpace_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IDigitalCableTuningSpace_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IDigitalCableTuningSpace_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ITuningSpace methods ***/
+#define IDigitalCableTuningSpace_get_UniqueName(This,Name) (This)->lpVtbl->get_UniqueName(This,Name)
+#define IDigitalCableTuningSpace_put_UniqueName(This,Name) (This)->lpVtbl->put_UniqueName(This,Name)
+#define IDigitalCableTuningSpace_get_FriendlyName(This,Name) (This)->lpVtbl->get_FriendlyName(This,Name)
+#define IDigitalCableTuningSpace_put_FriendlyName(This,Name) (This)->lpVtbl->put_FriendlyName(This,Name)
+#define IDigitalCableTuningSpace_get_CLSID(This,SpaceCLSID) (This)->lpVtbl->get_CLSID(This,SpaceCLSID)
+#define IDigitalCableTuningSpace_get_NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->get_NetworkType(This,NetworkTypeGuid)
+#define IDigitalCableTuningSpace_put_NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->put_NetworkType(This,NetworkTypeGuid)
+#define IDigitalCableTuningSpace_get__NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->get__NetworkType(This,NetworkTypeGuid)
+#define IDigitalCableTuningSpace_put__NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->put__NetworkType(This,NetworkTypeGuid)
+#define IDigitalCableTuningSpace_CreateTuneRequest(This,TuneRequest) (This)->lpVtbl->CreateTuneRequest(This,TuneRequest)
+#define IDigitalCableTuningSpace_EnumCategoryGUIDs(This,ppEnum) (This)->lpVtbl->EnumCategoryGUIDs(This,ppEnum)
+#define IDigitalCableTuningSpace_EnumDeviceMonikers(This,ppEnum) (This)->lpVtbl->EnumDeviceMonikers(This,ppEnum)
+#define IDigitalCableTuningSpace_get_DefaultPreferredComponentTypes(This,ComponentTypes) (This)->lpVtbl->get_DefaultPreferredComponentTypes(This,ComponentTypes)
+#define IDigitalCableTuningSpace_put_DefaultPreferredComponentTypes(This,NewComponentTypes) (This)->lpVtbl->put_DefaultPreferredComponentTypes(This,NewComponentTypes)
+#define IDigitalCableTuningSpace_get_FrequencyMapping(This,pMapping) (This)->lpVtbl->get_FrequencyMapping(This,pMapping)
+#define IDigitalCableTuningSpace_put_FrequencyMapping(This,Mapping) (This)->lpVtbl->put_FrequencyMapping(This,Mapping)
+#define IDigitalCableTuningSpace_get_DefaultLocator(This,LocatorVal) (This)->lpVtbl->get_DefaultLocator(This,LocatorVal)
+#define IDigitalCableTuningSpace_put_DefaultLocator(This,LocatorVal) (This)->lpVtbl->put_DefaultLocator(This,LocatorVal)
+#define IDigitalCableTuningSpace_Clone(This,NewTS) (This)->lpVtbl->Clone(This,NewTS)
+/*** IAnalogTVTuningSpace methods ***/
+#define IDigitalCableTuningSpace_get_MinChannel(This,MinChannelVal) (This)->lpVtbl->get_MinChannel(This,MinChannelVal)
+#define IDigitalCableTuningSpace_put_MinChannel(This,NewMinChannelVal) (This)->lpVtbl->put_MinChannel(This,NewMinChannelVal)
+#define IDigitalCableTuningSpace_get_MaxChannel(This,MaxChannelVal) (This)->lpVtbl->get_MaxChannel(This,MaxChannelVal)
+#define IDigitalCableTuningSpace_put_MaxChannel(This,NewMaxChannelVal) (This)->lpVtbl->put_MaxChannel(This,NewMaxChannelVal)
+#define IDigitalCableTuningSpace_get_InputType(This,InputTypeVal) (This)->lpVtbl->get_InputType(This,InputTypeVal)
+#define IDigitalCableTuningSpace_put_InputType(This,NewInputTypeVal) (This)->lpVtbl->put_InputType(This,NewInputTypeVal)
+#define IDigitalCableTuningSpace_get_CountryCode(This,CountryCodeVal) (This)->lpVtbl->get_CountryCode(This,CountryCodeVal)
+#define IDigitalCableTuningSpace_put_CountryCode(This,NewCountryCodeVal) (This)->lpVtbl->put_CountryCode(This,NewCountryCodeVal)
+/*** IATSCTuningSpace methods ***/
+#define IDigitalCableTuningSpace_get_MinMinorChannel(This,MinMinorChannelVal) (This)->lpVtbl->get_MinMinorChannel(This,MinMinorChannelVal)
+#define IDigitalCableTuningSpace_put_MinMinorChannel(This,NewMinMinorChannelVal) (This)->lpVtbl->put_MinMinorChannel(This,NewMinMinorChannelVal)
+#define IDigitalCableTuningSpace_get_MaxMinorChannel(This,MaxMinorChannelVal) (This)->lpVtbl->get_MaxMinorChannel(This,MaxMinorChannelVal)
+#define IDigitalCableTuningSpace_put_MaxMinorChannel(This,NewMaxMinorChannelVal) (This)->lpVtbl->put_MaxMinorChannel(This,NewMaxMinorChannelVal)
+#define IDigitalCableTuningSpace_get_MinPhysicalChannel(This,MinPhysicalChannelVal) (This)->lpVtbl->get_MinPhysicalChannel(This,MinPhysicalChannelVal)
+#define IDigitalCableTuningSpace_put_MinPhysicalChannel(This,NewMinPhysicalChannelVal) (This)->lpVtbl->put_MinPhysicalChannel(This,NewMinPhysicalChannelVal)
+#define IDigitalCableTuningSpace_get_MaxPhysicalChannel(This,MaxPhysicalChannelVal) (This)->lpVtbl->get_MaxPhysicalChannel(This,MaxPhysicalChannelVal)
+#define IDigitalCableTuningSpace_put_MaxPhysicalChannel(This,NewMaxPhysicalChannelVal) (This)->lpVtbl->put_MaxPhysicalChannel(This,NewMaxPhysicalChannelVal)
+/*** IDigitalCableTuningSpace methods ***/
+#define IDigitalCableTuningSpace_get_MinMajorChannel(This,MinMajorChannelVal) (This)->lpVtbl->get_MinMajorChannel(This,MinMajorChannelVal)
+#define IDigitalCableTuningSpace_put_MinMajorChannel(This,NewMinMajorChannelVal) (This)->lpVtbl->put_MinMajorChannel(This,NewMinMajorChannelVal)
+#define IDigitalCableTuningSpace_get_MaxMajorChannel(This,MaxMajorChannelVal) (This)->lpVtbl->get_MaxMajorChannel(This,MaxMajorChannelVal)
+#define IDigitalCableTuningSpace_put_MaxMajorChannel(This,NewMaxMajorChannelVal) (This)->lpVtbl->put_MaxMajorChannel(This,NewMaxMajorChannelVal)
+#define IDigitalCableTuningSpace_get_MinSourceID(This,MinSourceIDVal) (This)->lpVtbl->get_MinSourceID(This,MinSourceIDVal)
+#define IDigitalCableTuningSpace_put_MinSourceID(This,NewMinSourceIDVal) (This)->lpVtbl->put_MinSourceID(This,NewMinSourceIDVal)
+#define IDigitalCableTuningSpace_get_MaxSourceID(This,MaxSourceIDVal) (This)->lpVtbl->get_MaxSourceID(This,MaxSourceIDVal)
+#define IDigitalCableTuningSpace_put_MaxSourceID(This,NewMaxSourceIDVal) (This)->lpVtbl->put_MaxSourceID(This,NewMaxSourceIDVal)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_QueryInterface(IDigitalCableTuningSpace* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDigitalCableTuningSpace_AddRef(IDigitalCableTuningSpace* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDigitalCableTuningSpace_Release(IDigitalCableTuningSpace* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_GetTypeInfoCount(IDigitalCableTuningSpace* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_GetTypeInfo(IDigitalCableTuningSpace* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_GetIDsOfNames(IDigitalCableTuningSpace* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_Invoke(IDigitalCableTuningSpace* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ITuningSpace methods ***/
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_get_UniqueName(IDigitalCableTuningSpace* This,BSTR *Name) {
+    return This->lpVtbl->get_UniqueName(This,Name);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_put_UniqueName(IDigitalCableTuningSpace* This,BSTR Name) {
+    return This->lpVtbl->put_UniqueName(This,Name);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_get_FriendlyName(IDigitalCableTuningSpace* This,BSTR *Name) {
+    return This->lpVtbl->get_FriendlyName(This,Name);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_put_FriendlyName(IDigitalCableTuningSpace* This,BSTR Name) {
+    return This->lpVtbl->put_FriendlyName(This,Name);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_get_CLSID(IDigitalCableTuningSpace* This,BSTR *SpaceCLSID) {
+    return This->lpVtbl->get_CLSID(This,SpaceCLSID);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_get_NetworkType(IDigitalCableTuningSpace* This,BSTR *NetworkTypeGuid) {
+    return This->lpVtbl->get_NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_put_NetworkType(IDigitalCableTuningSpace* This,BSTR NetworkTypeGuid) {
+    return This->lpVtbl->put_NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_get__NetworkType(IDigitalCableTuningSpace* This,GUID *NetworkTypeGuid) {
+    return This->lpVtbl->get__NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_put__NetworkType(IDigitalCableTuningSpace* This,REFCLSID NetworkTypeGuid) {
+    return This->lpVtbl->put__NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_CreateTuneRequest(IDigitalCableTuningSpace* This,ITuneRequest **TuneRequest) {
+    return This->lpVtbl->CreateTuneRequest(This,TuneRequest);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_EnumCategoryGUIDs(IDigitalCableTuningSpace* This,IEnumGUID **ppEnum) {
+    return This->lpVtbl->EnumCategoryGUIDs(This,ppEnum);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_EnumDeviceMonikers(IDigitalCableTuningSpace* This,IEnumMoniker **ppEnum) {
+    return This->lpVtbl->EnumDeviceMonikers(This,ppEnum);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_get_DefaultPreferredComponentTypes(IDigitalCableTuningSpace* This,IComponentTypes **ComponentTypes) {
+    return This->lpVtbl->get_DefaultPreferredComponentTypes(This,ComponentTypes);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_put_DefaultPreferredComponentTypes(IDigitalCableTuningSpace* This,IComponentTypes *NewComponentTypes) {
+    return This->lpVtbl->put_DefaultPreferredComponentTypes(This,NewComponentTypes);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_get_FrequencyMapping(IDigitalCableTuningSpace* This,BSTR *pMapping) {
+    return This->lpVtbl->get_FrequencyMapping(This,pMapping);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_put_FrequencyMapping(IDigitalCableTuningSpace* This,BSTR Mapping) {
+    return This->lpVtbl->put_FrequencyMapping(This,Mapping);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_get_DefaultLocator(IDigitalCableTuningSpace* This,ILocator **LocatorVal) {
+    return This->lpVtbl->get_DefaultLocator(This,LocatorVal);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_put_DefaultLocator(IDigitalCableTuningSpace* This,ILocator *LocatorVal) {
+    return This->lpVtbl->put_DefaultLocator(This,LocatorVal);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_Clone(IDigitalCableTuningSpace* This,ITuningSpace **NewTS) {
+    return This->lpVtbl->Clone(This,NewTS);
+}
+/*** IAnalogTVTuningSpace methods ***/
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_get_MinChannel(IDigitalCableTuningSpace* This,LONG *MinChannelVal) {
+    return This->lpVtbl->get_MinChannel(This,MinChannelVal);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_put_MinChannel(IDigitalCableTuningSpace* This,LONG NewMinChannelVal) {
+    return This->lpVtbl->put_MinChannel(This,NewMinChannelVal);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_get_MaxChannel(IDigitalCableTuningSpace* This,LONG *MaxChannelVal) {
+    return This->lpVtbl->get_MaxChannel(This,MaxChannelVal);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_put_MaxChannel(IDigitalCableTuningSpace* This,LONG NewMaxChannelVal) {
+    return This->lpVtbl->put_MaxChannel(This,NewMaxChannelVal);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_get_InputType(IDigitalCableTuningSpace* This,TunerInputType *InputTypeVal) {
+    return This->lpVtbl->get_InputType(This,InputTypeVal);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_put_InputType(IDigitalCableTuningSpace* This,TunerInputType NewInputTypeVal) {
+    return This->lpVtbl->put_InputType(This,NewInputTypeVal);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_get_CountryCode(IDigitalCableTuningSpace* This,LONG *CountryCodeVal) {
+    return This->lpVtbl->get_CountryCode(This,CountryCodeVal);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_put_CountryCode(IDigitalCableTuningSpace* This,LONG NewCountryCodeVal) {
+    return This->lpVtbl->put_CountryCode(This,NewCountryCodeVal);
+}
+/*** IATSCTuningSpace methods ***/
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_get_MinMinorChannel(IDigitalCableTuningSpace* This,LONG *MinMinorChannelVal) {
+    return This->lpVtbl->get_MinMinorChannel(This,MinMinorChannelVal);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_put_MinMinorChannel(IDigitalCableTuningSpace* This,LONG NewMinMinorChannelVal) {
+    return This->lpVtbl->put_MinMinorChannel(This,NewMinMinorChannelVal);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_get_MaxMinorChannel(IDigitalCableTuningSpace* This,LONG *MaxMinorChannelVal) {
+    return This->lpVtbl->get_MaxMinorChannel(This,MaxMinorChannelVal);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_put_MaxMinorChannel(IDigitalCableTuningSpace* This,LONG NewMaxMinorChannelVal) {
+    return This->lpVtbl->put_MaxMinorChannel(This,NewMaxMinorChannelVal);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_get_MinPhysicalChannel(IDigitalCableTuningSpace* This,LONG *MinPhysicalChannelVal) {
+    return This->lpVtbl->get_MinPhysicalChannel(This,MinPhysicalChannelVal);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_put_MinPhysicalChannel(IDigitalCableTuningSpace* This,LONG NewMinPhysicalChannelVal) {
+    return This->lpVtbl->put_MinPhysicalChannel(This,NewMinPhysicalChannelVal);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_get_MaxPhysicalChannel(IDigitalCableTuningSpace* This,LONG *MaxPhysicalChannelVal) {
+    return This->lpVtbl->get_MaxPhysicalChannel(This,MaxPhysicalChannelVal);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_put_MaxPhysicalChannel(IDigitalCableTuningSpace* This,LONG NewMaxPhysicalChannelVal) {
+    return This->lpVtbl->put_MaxPhysicalChannel(This,NewMaxPhysicalChannelVal);
+}
+/*** IDigitalCableTuningSpace methods ***/
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_get_MinMajorChannel(IDigitalCableTuningSpace* This,LONG *MinMajorChannelVal) {
+    return This->lpVtbl->get_MinMajorChannel(This,MinMajorChannelVal);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_put_MinMajorChannel(IDigitalCableTuningSpace* This,LONG NewMinMajorChannelVal) {
+    return This->lpVtbl->put_MinMajorChannel(This,NewMinMajorChannelVal);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_get_MaxMajorChannel(IDigitalCableTuningSpace* This,LONG *MaxMajorChannelVal) {
+    return This->lpVtbl->get_MaxMajorChannel(This,MaxMajorChannelVal);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_put_MaxMajorChannel(IDigitalCableTuningSpace* This,LONG NewMaxMajorChannelVal) {
+    return This->lpVtbl->put_MaxMajorChannel(This,NewMaxMajorChannelVal);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_get_MinSourceID(IDigitalCableTuningSpace* This,LONG *MinSourceIDVal) {
+    return This->lpVtbl->get_MinSourceID(This,MinSourceIDVal);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_put_MinSourceID(IDigitalCableTuningSpace* This,LONG NewMinSourceIDVal) {
+    return This->lpVtbl->put_MinSourceID(This,NewMinSourceIDVal);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_get_MaxSourceID(IDigitalCableTuningSpace* This,LONG *MaxSourceIDVal) {
+    return This->lpVtbl->get_MaxSourceID(This,MaxSourceIDVal);
+}
+static FORCEINLINE HRESULT IDigitalCableTuningSpace_put_MaxSourceID(IDigitalCableTuningSpace* This,LONG NewMaxSourceIDVal) {
+    return This->lpVtbl->put_MaxSourceID(This,NewMaxSourceIDVal);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IDigitalCableTuningSpace_get_MinMajorChannel_Proxy(
+    IDigitalCableTuningSpace* This,
+    LONG *MinMajorChannelVal);
+void __RPC_STUB IDigitalCableTuningSpace_get_MinMajorChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDigitalCableTuningSpace_put_MinMajorChannel_Proxy(
+    IDigitalCableTuningSpace* This,
+    LONG NewMinMajorChannelVal);
+void __RPC_STUB IDigitalCableTuningSpace_put_MinMajorChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDigitalCableTuningSpace_get_MaxMajorChannel_Proxy(
+    IDigitalCableTuningSpace* This,
+    LONG *MaxMajorChannelVal);
+void __RPC_STUB IDigitalCableTuningSpace_get_MaxMajorChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDigitalCableTuningSpace_put_MaxMajorChannel_Proxy(
+    IDigitalCableTuningSpace* This,
+    LONG NewMaxMajorChannelVal);
+void __RPC_STUB IDigitalCableTuningSpace_put_MaxMajorChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDigitalCableTuningSpace_get_MinSourceID_Proxy(
+    IDigitalCableTuningSpace* This,
+    LONG *MinSourceIDVal);
+void __RPC_STUB IDigitalCableTuningSpace_get_MinSourceID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDigitalCableTuningSpace_put_MinSourceID_Proxy(
+    IDigitalCableTuningSpace* This,
+    LONG NewMinSourceIDVal);
+void __RPC_STUB IDigitalCableTuningSpace_put_MinSourceID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDigitalCableTuningSpace_get_MaxSourceID_Proxy(
+    IDigitalCableTuningSpace* This,
+    LONG *MaxSourceIDVal);
+void __RPC_STUB IDigitalCableTuningSpace_get_MaxSourceID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDigitalCableTuningSpace_put_MaxSourceID_Proxy(
+    IDigitalCableTuningSpace* This,
+    LONG NewMaxSourceIDVal);
+void __RPC_STUB IDigitalCableTuningSpace_put_MaxSourceID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IDigitalCableTuningSpace_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAnalogRadioTuningSpace interface
+ */
+#ifndef __IAnalogRadioTuningSpace_INTERFACE_DEFINED__
+#define __IAnalogRadioTuningSpace_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IAnalogRadioTuningSpace, 0x2a6e293b, 0x2595, 0x11d3, 0xb6,0x4c, 0x00,0xc0,0x4f,0x79,0x49,0x8e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("2a6e293b-2595-11d3-b64c-00c04f79498e")
+IAnalogRadioTuningSpace : public ITuningSpace
+{
+    virtual HRESULT STDMETHODCALLTYPE get_MinFrequency(
+        LONG *MinFrequencyVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_MinFrequency(
+        LONG NewMinFrequencyVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_MaxFrequency(
+        LONG *MaxFrequencyVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_MaxFrequency(
+        LONG NewMaxFrequencyVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Step(
+        LONG *StepVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Step(
+        LONG NewStepVal) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IAnalogRadioTuningSpace, 0x2a6e293b, 0x2595, 0x11d3, 0xb6,0x4c, 0x00,0xc0,0x4f,0x79,0x49,0x8e)
+#endif
+#else
+typedef struct IAnalogRadioTuningSpaceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IAnalogRadioTuningSpace* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IAnalogRadioTuningSpace* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IAnalogRadioTuningSpace* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IAnalogRadioTuningSpace* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IAnalogRadioTuningSpace* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IAnalogRadioTuningSpace* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IAnalogRadioTuningSpace* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ITuningSpace methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_UniqueName)(
+        IAnalogRadioTuningSpace* This,
+        BSTR *Name);
+
+    HRESULT (STDMETHODCALLTYPE *put_UniqueName)(
+        IAnalogRadioTuningSpace* This,
+        BSTR Name);
+
+    HRESULT (STDMETHODCALLTYPE *get_FriendlyName)(
+        IAnalogRadioTuningSpace* This,
+        BSTR *Name);
+
+    HRESULT (STDMETHODCALLTYPE *put_FriendlyName)(
+        IAnalogRadioTuningSpace* This,
+        BSTR Name);
+
+    HRESULT (STDMETHODCALLTYPE *get_CLSID)(
+        IAnalogRadioTuningSpace* This,
+        BSTR *SpaceCLSID);
+
+    HRESULT (STDMETHODCALLTYPE *get_NetworkType)(
+        IAnalogRadioTuningSpace* This,
+        BSTR *NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put_NetworkType)(
+        IAnalogRadioTuningSpace* This,
+        BSTR NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *get__NetworkType)(
+        IAnalogRadioTuningSpace* This,
+        GUID *NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put__NetworkType)(
+        IAnalogRadioTuningSpace* This,
+        REFCLSID NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTuneRequest)(
+        IAnalogRadioTuningSpace* This,
+        ITuneRequest **TuneRequest);
+
+    HRESULT (STDMETHODCALLTYPE *EnumCategoryGUIDs)(
+        IAnalogRadioTuningSpace* This,
+        IEnumGUID **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *EnumDeviceMonikers)(
+        IAnalogRadioTuningSpace* This,
+        IEnumMoniker **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *get_DefaultPreferredComponentTypes)(
+        IAnalogRadioTuningSpace* This,
+        IComponentTypes **ComponentTypes);
+
+    HRESULT (STDMETHODCALLTYPE *put_DefaultPreferredComponentTypes)(
+        IAnalogRadioTuningSpace* This,
+        IComponentTypes *NewComponentTypes);
+
+    HRESULT (STDMETHODCALLTYPE *get_FrequencyMapping)(
+        IAnalogRadioTuningSpace* This,
+        BSTR *pMapping);
+
+    HRESULT (STDMETHODCALLTYPE *put_FrequencyMapping)(
+        IAnalogRadioTuningSpace* This,
+        BSTR Mapping);
+
+    HRESULT (STDMETHODCALLTYPE *get_DefaultLocator)(
+        IAnalogRadioTuningSpace* This,
+        ILocator **LocatorVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_DefaultLocator)(
+        IAnalogRadioTuningSpace* This,
+        ILocator *LocatorVal);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IAnalogRadioTuningSpace* This,
+        ITuningSpace **NewTS);
+
+    /*** IAnalogRadioTuningSpace methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_MinFrequency)(
+        IAnalogRadioTuningSpace* This,
+        LONG *MinFrequencyVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_MinFrequency)(
+        IAnalogRadioTuningSpace* This,
+        LONG NewMinFrequencyVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_MaxFrequency)(
+        IAnalogRadioTuningSpace* This,
+        LONG *MaxFrequencyVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_MaxFrequency)(
+        IAnalogRadioTuningSpace* This,
+        LONG NewMaxFrequencyVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_Step)(
+        IAnalogRadioTuningSpace* This,
+        LONG *StepVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_Step)(
+        IAnalogRadioTuningSpace* This,
+        LONG NewStepVal);
+
+    END_INTERFACE
+} IAnalogRadioTuningSpaceVtbl;
+interface IAnalogRadioTuningSpace {
+    CONST_VTBL IAnalogRadioTuningSpaceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IAnalogRadioTuningSpace_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAnalogRadioTuningSpace_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAnalogRadioTuningSpace_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IAnalogRadioTuningSpace_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IAnalogRadioTuningSpace_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IAnalogRadioTuningSpace_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IAnalogRadioTuningSpace_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ITuningSpace methods ***/
+#define IAnalogRadioTuningSpace_get_UniqueName(This,Name) (This)->lpVtbl->get_UniqueName(This,Name)
+#define IAnalogRadioTuningSpace_put_UniqueName(This,Name) (This)->lpVtbl->put_UniqueName(This,Name)
+#define IAnalogRadioTuningSpace_get_FriendlyName(This,Name) (This)->lpVtbl->get_FriendlyName(This,Name)
+#define IAnalogRadioTuningSpace_put_FriendlyName(This,Name) (This)->lpVtbl->put_FriendlyName(This,Name)
+#define IAnalogRadioTuningSpace_get_CLSID(This,SpaceCLSID) (This)->lpVtbl->get_CLSID(This,SpaceCLSID)
+#define IAnalogRadioTuningSpace_get_NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->get_NetworkType(This,NetworkTypeGuid)
+#define IAnalogRadioTuningSpace_put_NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->put_NetworkType(This,NetworkTypeGuid)
+#define IAnalogRadioTuningSpace_get__NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->get__NetworkType(This,NetworkTypeGuid)
+#define IAnalogRadioTuningSpace_put__NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->put__NetworkType(This,NetworkTypeGuid)
+#define IAnalogRadioTuningSpace_CreateTuneRequest(This,TuneRequest) (This)->lpVtbl->CreateTuneRequest(This,TuneRequest)
+#define IAnalogRadioTuningSpace_EnumCategoryGUIDs(This,ppEnum) (This)->lpVtbl->EnumCategoryGUIDs(This,ppEnum)
+#define IAnalogRadioTuningSpace_EnumDeviceMonikers(This,ppEnum) (This)->lpVtbl->EnumDeviceMonikers(This,ppEnum)
+#define IAnalogRadioTuningSpace_get_DefaultPreferredComponentTypes(This,ComponentTypes) (This)->lpVtbl->get_DefaultPreferredComponentTypes(This,ComponentTypes)
+#define IAnalogRadioTuningSpace_put_DefaultPreferredComponentTypes(This,NewComponentTypes) (This)->lpVtbl->put_DefaultPreferredComponentTypes(This,NewComponentTypes)
+#define IAnalogRadioTuningSpace_get_FrequencyMapping(This,pMapping) (This)->lpVtbl->get_FrequencyMapping(This,pMapping)
+#define IAnalogRadioTuningSpace_put_FrequencyMapping(This,Mapping) (This)->lpVtbl->put_FrequencyMapping(This,Mapping)
+#define IAnalogRadioTuningSpace_get_DefaultLocator(This,LocatorVal) (This)->lpVtbl->get_DefaultLocator(This,LocatorVal)
+#define IAnalogRadioTuningSpace_put_DefaultLocator(This,LocatorVal) (This)->lpVtbl->put_DefaultLocator(This,LocatorVal)
+#define IAnalogRadioTuningSpace_Clone(This,NewTS) (This)->lpVtbl->Clone(This,NewTS)
+/*** IAnalogRadioTuningSpace methods ***/
+#define IAnalogRadioTuningSpace_get_MinFrequency(This,MinFrequencyVal) (This)->lpVtbl->get_MinFrequency(This,MinFrequencyVal)
+#define IAnalogRadioTuningSpace_put_MinFrequency(This,NewMinFrequencyVal) (This)->lpVtbl->put_MinFrequency(This,NewMinFrequencyVal)
+#define IAnalogRadioTuningSpace_get_MaxFrequency(This,MaxFrequencyVal) (This)->lpVtbl->get_MaxFrequency(This,MaxFrequencyVal)
+#define IAnalogRadioTuningSpace_put_MaxFrequency(This,NewMaxFrequencyVal) (This)->lpVtbl->put_MaxFrequency(This,NewMaxFrequencyVal)
+#define IAnalogRadioTuningSpace_get_Step(This,StepVal) (This)->lpVtbl->get_Step(This,StepVal)
+#define IAnalogRadioTuningSpace_put_Step(This,NewStepVal) (This)->lpVtbl->put_Step(This,NewStepVal)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_QueryInterface(IAnalogRadioTuningSpace* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IAnalogRadioTuningSpace_AddRef(IAnalogRadioTuningSpace* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IAnalogRadioTuningSpace_Release(IAnalogRadioTuningSpace* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_GetTypeInfoCount(IAnalogRadioTuningSpace* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_GetTypeInfo(IAnalogRadioTuningSpace* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_GetIDsOfNames(IAnalogRadioTuningSpace* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_Invoke(IAnalogRadioTuningSpace* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ITuningSpace methods ***/
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_get_UniqueName(IAnalogRadioTuningSpace* This,BSTR *Name) {
+    return This->lpVtbl->get_UniqueName(This,Name);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_put_UniqueName(IAnalogRadioTuningSpace* This,BSTR Name) {
+    return This->lpVtbl->put_UniqueName(This,Name);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_get_FriendlyName(IAnalogRadioTuningSpace* This,BSTR *Name) {
+    return This->lpVtbl->get_FriendlyName(This,Name);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_put_FriendlyName(IAnalogRadioTuningSpace* This,BSTR Name) {
+    return This->lpVtbl->put_FriendlyName(This,Name);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_get_CLSID(IAnalogRadioTuningSpace* This,BSTR *SpaceCLSID) {
+    return This->lpVtbl->get_CLSID(This,SpaceCLSID);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_get_NetworkType(IAnalogRadioTuningSpace* This,BSTR *NetworkTypeGuid) {
+    return This->lpVtbl->get_NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_put_NetworkType(IAnalogRadioTuningSpace* This,BSTR NetworkTypeGuid) {
+    return This->lpVtbl->put_NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_get__NetworkType(IAnalogRadioTuningSpace* This,GUID *NetworkTypeGuid) {
+    return This->lpVtbl->get__NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_put__NetworkType(IAnalogRadioTuningSpace* This,REFCLSID NetworkTypeGuid) {
+    return This->lpVtbl->put__NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_CreateTuneRequest(IAnalogRadioTuningSpace* This,ITuneRequest **TuneRequest) {
+    return This->lpVtbl->CreateTuneRequest(This,TuneRequest);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_EnumCategoryGUIDs(IAnalogRadioTuningSpace* This,IEnumGUID **ppEnum) {
+    return This->lpVtbl->EnumCategoryGUIDs(This,ppEnum);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_EnumDeviceMonikers(IAnalogRadioTuningSpace* This,IEnumMoniker **ppEnum) {
+    return This->lpVtbl->EnumDeviceMonikers(This,ppEnum);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_get_DefaultPreferredComponentTypes(IAnalogRadioTuningSpace* This,IComponentTypes **ComponentTypes) {
+    return This->lpVtbl->get_DefaultPreferredComponentTypes(This,ComponentTypes);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_put_DefaultPreferredComponentTypes(IAnalogRadioTuningSpace* This,IComponentTypes *NewComponentTypes) {
+    return This->lpVtbl->put_DefaultPreferredComponentTypes(This,NewComponentTypes);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_get_FrequencyMapping(IAnalogRadioTuningSpace* This,BSTR *pMapping) {
+    return This->lpVtbl->get_FrequencyMapping(This,pMapping);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_put_FrequencyMapping(IAnalogRadioTuningSpace* This,BSTR Mapping) {
+    return This->lpVtbl->put_FrequencyMapping(This,Mapping);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_get_DefaultLocator(IAnalogRadioTuningSpace* This,ILocator **LocatorVal) {
+    return This->lpVtbl->get_DefaultLocator(This,LocatorVal);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_put_DefaultLocator(IAnalogRadioTuningSpace* This,ILocator *LocatorVal) {
+    return This->lpVtbl->put_DefaultLocator(This,LocatorVal);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_Clone(IAnalogRadioTuningSpace* This,ITuningSpace **NewTS) {
+    return This->lpVtbl->Clone(This,NewTS);
+}
+/*** IAnalogRadioTuningSpace methods ***/
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_get_MinFrequency(IAnalogRadioTuningSpace* This,LONG *MinFrequencyVal) {
+    return This->lpVtbl->get_MinFrequency(This,MinFrequencyVal);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_put_MinFrequency(IAnalogRadioTuningSpace* This,LONG NewMinFrequencyVal) {
+    return This->lpVtbl->put_MinFrequency(This,NewMinFrequencyVal);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_get_MaxFrequency(IAnalogRadioTuningSpace* This,LONG *MaxFrequencyVal) {
+    return This->lpVtbl->get_MaxFrequency(This,MaxFrequencyVal);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_put_MaxFrequency(IAnalogRadioTuningSpace* This,LONG NewMaxFrequencyVal) {
+    return This->lpVtbl->put_MaxFrequency(This,NewMaxFrequencyVal);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_get_Step(IAnalogRadioTuningSpace* This,LONG *StepVal) {
+    return This->lpVtbl->get_Step(This,StepVal);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace_put_Step(IAnalogRadioTuningSpace* This,LONG NewStepVal) {
+    return This->lpVtbl->put_Step(This,NewStepVal);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IAnalogRadioTuningSpace_get_MinFrequency_Proxy(
+    IAnalogRadioTuningSpace* This,
+    LONG *MinFrequencyVal);
+void __RPC_STUB IAnalogRadioTuningSpace_get_MinFrequency_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAnalogRadioTuningSpace_put_MinFrequency_Proxy(
+    IAnalogRadioTuningSpace* This,
+    LONG NewMinFrequencyVal);
+void __RPC_STUB IAnalogRadioTuningSpace_put_MinFrequency_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAnalogRadioTuningSpace_get_MaxFrequency_Proxy(
+    IAnalogRadioTuningSpace* This,
+    LONG *MaxFrequencyVal);
+void __RPC_STUB IAnalogRadioTuningSpace_get_MaxFrequency_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAnalogRadioTuningSpace_put_MaxFrequency_Proxy(
+    IAnalogRadioTuningSpace* This,
+    LONG NewMaxFrequencyVal);
+void __RPC_STUB IAnalogRadioTuningSpace_put_MaxFrequency_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAnalogRadioTuningSpace_get_Step_Proxy(
+    IAnalogRadioTuningSpace* This,
+    LONG *StepVal);
+void __RPC_STUB IAnalogRadioTuningSpace_get_Step_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAnalogRadioTuningSpace_put_Step_Proxy(
+    IAnalogRadioTuningSpace* This,
+    LONG NewStepVal);
+void __RPC_STUB IAnalogRadioTuningSpace_put_Step_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IAnalogRadioTuningSpace_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAnalogRadioTuningSpace2 interface
+ */
+#ifndef __IAnalogRadioTuningSpace2_INTERFACE_DEFINED__
+#define __IAnalogRadioTuningSpace2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IAnalogRadioTuningSpace2, 0x39dd45da, 0x2da8, 0x46ba, 0x8a,0x8a, 0x87,0xe2,0xb7,0x3d,0x98,0x3a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("39dd45da-2da8-46ba-8a8a-87e2b73d983a")
+IAnalogRadioTuningSpace2 : public IAnalogRadioTuningSpace
+{
+    virtual HRESULT STDMETHODCALLTYPE get_CountryCode(
+        LONG *CountryCodeVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_CountryCode(
+        LONG NewCountryCodeVal) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IAnalogRadioTuningSpace2, 0x39dd45da, 0x2da8, 0x46ba, 0x8a,0x8a, 0x87,0xe2,0xb7,0x3d,0x98,0x3a)
+#endif
+#else
+typedef struct IAnalogRadioTuningSpace2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IAnalogRadioTuningSpace2* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IAnalogRadioTuningSpace2* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IAnalogRadioTuningSpace2* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IAnalogRadioTuningSpace2* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IAnalogRadioTuningSpace2* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IAnalogRadioTuningSpace2* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IAnalogRadioTuningSpace2* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ITuningSpace methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_UniqueName)(
+        IAnalogRadioTuningSpace2* This,
+        BSTR *Name);
+
+    HRESULT (STDMETHODCALLTYPE *put_UniqueName)(
+        IAnalogRadioTuningSpace2* This,
+        BSTR Name);
+
+    HRESULT (STDMETHODCALLTYPE *get_FriendlyName)(
+        IAnalogRadioTuningSpace2* This,
+        BSTR *Name);
+
+    HRESULT (STDMETHODCALLTYPE *put_FriendlyName)(
+        IAnalogRadioTuningSpace2* This,
+        BSTR Name);
+
+    HRESULT (STDMETHODCALLTYPE *get_CLSID)(
+        IAnalogRadioTuningSpace2* This,
+        BSTR *SpaceCLSID);
+
+    HRESULT (STDMETHODCALLTYPE *get_NetworkType)(
+        IAnalogRadioTuningSpace2* This,
+        BSTR *NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put_NetworkType)(
+        IAnalogRadioTuningSpace2* This,
+        BSTR NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *get__NetworkType)(
+        IAnalogRadioTuningSpace2* This,
+        GUID *NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put__NetworkType)(
+        IAnalogRadioTuningSpace2* This,
+        REFCLSID NetworkTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTuneRequest)(
+        IAnalogRadioTuningSpace2* This,
+        ITuneRequest **TuneRequest);
+
+    HRESULT (STDMETHODCALLTYPE *EnumCategoryGUIDs)(
+        IAnalogRadioTuningSpace2* This,
+        IEnumGUID **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *EnumDeviceMonikers)(
+        IAnalogRadioTuningSpace2* This,
+        IEnumMoniker **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *get_DefaultPreferredComponentTypes)(
+        IAnalogRadioTuningSpace2* This,
+        IComponentTypes **ComponentTypes);
+
+    HRESULT (STDMETHODCALLTYPE *put_DefaultPreferredComponentTypes)(
+        IAnalogRadioTuningSpace2* This,
+        IComponentTypes *NewComponentTypes);
+
+    HRESULT (STDMETHODCALLTYPE *get_FrequencyMapping)(
+        IAnalogRadioTuningSpace2* This,
+        BSTR *pMapping);
+
+    HRESULT (STDMETHODCALLTYPE *put_FrequencyMapping)(
+        IAnalogRadioTuningSpace2* This,
+        BSTR Mapping);
+
+    HRESULT (STDMETHODCALLTYPE *get_DefaultLocator)(
+        IAnalogRadioTuningSpace2* This,
+        ILocator **LocatorVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_DefaultLocator)(
+        IAnalogRadioTuningSpace2* This,
+        ILocator *LocatorVal);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IAnalogRadioTuningSpace2* This,
+        ITuningSpace **NewTS);
+
+    /*** IAnalogRadioTuningSpace methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_MinFrequency)(
+        IAnalogRadioTuningSpace2* This,
+        LONG *MinFrequencyVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_MinFrequency)(
+        IAnalogRadioTuningSpace2* This,
+        LONG NewMinFrequencyVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_MaxFrequency)(
+        IAnalogRadioTuningSpace2* This,
+        LONG *MaxFrequencyVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_MaxFrequency)(
+        IAnalogRadioTuningSpace2* This,
+        LONG NewMaxFrequencyVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_Step)(
+        IAnalogRadioTuningSpace2* This,
+        LONG *StepVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_Step)(
+        IAnalogRadioTuningSpace2* This,
+        LONG NewStepVal);
+
+    /*** IAnalogRadioTuningSpace2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_CountryCode)(
+        IAnalogRadioTuningSpace2* This,
+        LONG *CountryCodeVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_CountryCode)(
+        IAnalogRadioTuningSpace2* This,
+        LONG NewCountryCodeVal);
+
+    END_INTERFACE
+} IAnalogRadioTuningSpace2Vtbl;
+interface IAnalogRadioTuningSpace2 {
+    CONST_VTBL IAnalogRadioTuningSpace2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IAnalogRadioTuningSpace2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAnalogRadioTuningSpace2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAnalogRadioTuningSpace2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IAnalogRadioTuningSpace2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IAnalogRadioTuningSpace2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IAnalogRadioTuningSpace2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IAnalogRadioTuningSpace2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ITuningSpace methods ***/
+#define IAnalogRadioTuningSpace2_get_UniqueName(This,Name) (This)->lpVtbl->get_UniqueName(This,Name)
+#define IAnalogRadioTuningSpace2_put_UniqueName(This,Name) (This)->lpVtbl->put_UniqueName(This,Name)
+#define IAnalogRadioTuningSpace2_get_FriendlyName(This,Name) (This)->lpVtbl->get_FriendlyName(This,Name)
+#define IAnalogRadioTuningSpace2_put_FriendlyName(This,Name) (This)->lpVtbl->put_FriendlyName(This,Name)
+#define IAnalogRadioTuningSpace2_get_CLSID(This,SpaceCLSID) (This)->lpVtbl->get_CLSID(This,SpaceCLSID)
+#define IAnalogRadioTuningSpace2_get_NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->get_NetworkType(This,NetworkTypeGuid)
+#define IAnalogRadioTuningSpace2_put_NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->put_NetworkType(This,NetworkTypeGuid)
+#define IAnalogRadioTuningSpace2_get__NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->get__NetworkType(This,NetworkTypeGuid)
+#define IAnalogRadioTuningSpace2_put__NetworkType(This,NetworkTypeGuid) (This)->lpVtbl->put__NetworkType(This,NetworkTypeGuid)
+#define IAnalogRadioTuningSpace2_CreateTuneRequest(This,TuneRequest) (This)->lpVtbl->CreateTuneRequest(This,TuneRequest)
+#define IAnalogRadioTuningSpace2_EnumCategoryGUIDs(This,ppEnum) (This)->lpVtbl->EnumCategoryGUIDs(This,ppEnum)
+#define IAnalogRadioTuningSpace2_EnumDeviceMonikers(This,ppEnum) (This)->lpVtbl->EnumDeviceMonikers(This,ppEnum)
+#define IAnalogRadioTuningSpace2_get_DefaultPreferredComponentTypes(This,ComponentTypes) (This)->lpVtbl->get_DefaultPreferredComponentTypes(This,ComponentTypes)
+#define IAnalogRadioTuningSpace2_put_DefaultPreferredComponentTypes(This,NewComponentTypes) (This)->lpVtbl->put_DefaultPreferredComponentTypes(This,NewComponentTypes)
+#define IAnalogRadioTuningSpace2_get_FrequencyMapping(This,pMapping) (This)->lpVtbl->get_FrequencyMapping(This,pMapping)
+#define IAnalogRadioTuningSpace2_put_FrequencyMapping(This,Mapping) (This)->lpVtbl->put_FrequencyMapping(This,Mapping)
+#define IAnalogRadioTuningSpace2_get_DefaultLocator(This,LocatorVal) (This)->lpVtbl->get_DefaultLocator(This,LocatorVal)
+#define IAnalogRadioTuningSpace2_put_DefaultLocator(This,LocatorVal) (This)->lpVtbl->put_DefaultLocator(This,LocatorVal)
+#define IAnalogRadioTuningSpace2_Clone(This,NewTS) (This)->lpVtbl->Clone(This,NewTS)
+/*** IAnalogRadioTuningSpace methods ***/
+#define IAnalogRadioTuningSpace2_get_MinFrequency(This,MinFrequencyVal) (This)->lpVtbl->get_MinFrequency(This,MinFrequencyVal)
+#define IAnalogRadioTuningSpace2_put_MinFrequency(This,NewMinFrequencyVal) (This)->lpVtbl->put_MinFrequency(This,NewMinFrequencyVal)
+#define IAnalogRadioTuningSpace2_get_MaxFrequency(This,MaxFrequencyVal) (This)->lpVtbl->get_MaxFrequency(This,MaxFrequencyVal)
+#define IAnalogRadioTuningSpace2_put_MaxFrequency(This,NewMaxFrequencyVal) (This)->lpVtbl->put_MaxFrequency(This,NewMaxFrequencyVal)
+#define IAnalogRadioTuningSpace2_get_Step(This,StepVal) (This)->lpVtbl->get_Step(This,StepVal)
+#define IAnalogRadioTuningSpace2_put_Step(This,NewStepVal) (This)->lpVtbl->put_Step(This,NewStepVal)
+/*** IAnalogRadioTuningSpace2 methods ***/
+#define IAnalogRadioTuningSpace2_get_CountryCode(This,CountryCodeVal) (This)->lpVtbl->get_CountryCode(This,CountryCodeVal)
+#define IAnalogRadioTuningSpace2_put_CountryCode(This,NewCountryCodeVal) (This)->lpVtbl->put_CountryCode(This,NewCountryCodeVal)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_QueryInterface(IAnalogRadioTuningSpace2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IAnalogRadioTuningSpace2_AddRef(IAnalogRadioTuningSpace2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IAnalogRadioTuningSpace2_Release(IAnalogRadioTuningSpace2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_GetTypeInfoCount(IAnalogRadioTuningSpace2* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_GetTypeInfo(IAnalogRadioTuningSpace2* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_GetIDsOfNames(IAnalogRadioTuningSpace2* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_Invoke(IAnalogRadioTuningSpace2* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ITuningSpace methods ***/
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_get_UniqueName(IAnalogRadioTuningSpace2* This,BSTR *Name) {
+    return This->lpVtbl->get_UniqueName(This,Name);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_put_UniqueName(IAnalogRadioTuningSpace2* This,BSTR Name) {
+    return This->lpVtbl->put_UniqueName(This,Name);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_get_FriendlyName(IAnalogRadioTuningSpace2* This,BSTR *Name) {
+    return This->lpVtbl->get_FriendlyName(This,Name);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_put_FriendlyName(IAnalogRadioTuningSpace2* This,BSTR Name) {
+    return This->lpVtbl->put_FriendlyName(This,Name);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_get_CLSID(IAnalogRadioTuningSpace2* This,BSTR *SpaceCLSID) {
+    return This->lpVtbl->get_CLSID(This,SpaceCLSID);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_get_NetworkType(IAnalogRadioTuningSpace2* This,BSTR *NetworkTypeGuid) {
+    return This->lpVtbl->get_NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_put_NetworkType(IAnalogRadioTuningSpace2* This,BSTR NetworkTypeGuid) {
+    return This->lpVtbl->put_NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_get__NetworkType(IAnalogRadioTuningSpace2* This,GUID *NetworkTypeGuid) {
+    return This->lpVtbl->get__NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_put__NetworkType(IAnalogRadioTuningSpace2* This,REFCLSID NetworkTypeGuid) {
+    return This->lpVtbl->put__NetworkType(This,NetworkTypeGuid);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_CreateTuneRequest(IAnalogRadioTuningSpace2* This,ITuneRequest **TuneRequest) {
+    return This->lpVtbl->CreateTuneRequest(This,TuneRequest);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_EnumCategoryGUIDs(IAnalogRadioTuningSpace2* This,IEnumGUID **ppEnum) {
+    return This->lpVtbl->EnumCategoryGUIDs(This,ppEnum);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_EnumDeviceMonikers(IAnalogRadioTuningSpace2* This,IEnumMoniker **ppEnum) {
+    return This->lpVtbl->EnumDeviceMonikers(This,ppEnum);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_get_DefaultPreferredComponentTypes(IAnalogRadioTuningSpace2* This,IComponentTypes **ComponentTypes) {
+    return This->lpVtbl->get_DefaultPreferredComponentTypes(This,ComponentTypes);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_put_DefaultPreferredComponentTypes(IAnalogRadioTuningSpace2* This,IComponentTypes *NewComponentTypes) {
+    return This->lpVtbl->put_DefaultPreferredComponentTypes(This,NewComponentTypes);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_get_FrequencyMapping(IAnalogRadioTuningSpace2* This,BSTR *pMapping) {
+    return This->lpVtbl->get_FrequencyMapping(This,pMapping);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_put_FrequencyMapping(IAnalogRadioTuningSpace2* This,BSTR Mapping) {
+    return This->lpVtbl->put_FrequencyMapping(This,Mapping);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_get_DefaultLocator(IAnalogRadioTuningSpace2* This,ILocator **LocatorVal) {
+    return This->lpVtbl->get_DefaultLocator(This,LocatorVal);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_put_DefaultLocator(IAnalogRadioTuningSpace2* This,ILocator *LocatorVal) {
+    return This->lpVtbl->put_DefaultLocator(This,LocatorVal);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_Clone(IAnalogRadioTuningSpace2* This,ITuningSpace **NewTS) {
+    return This->lpVtbl->Clone(This,NewTS);
+}
+/*** IAnalogRadioTuningSpace methods ***/
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_get_MinFrequency(IAnalogRadioTuningSpace2* This,LONG *MinFrequencyVal) {
+    return This->lpVtbl->get_MinFrequency(This,MinFrequencyVal);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_put_MinFrequency(IAnalogRadioTuningSpace2* This,LONG NewMinFrequencyVal) {
+    return This->lpVtbl->put_MinFrequency(This,NewMinFrequencyVal);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_get_MaxFrequency(IAnalogRadioTuningSpace2* This,LONG *MaxFrequencyVal) {
+    return This->lpVtbl->get_MaxFrequency(This,MaxFrequencyVal);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_put_MaxFrequency(IAnalogRadioTuningSpace2* This,LONG NewMaxFrequencyVal) {
+    return This->lpVtbl->put_MaxFrequency(This,NewMaxFrequencyVal);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_get_Step(IAnalogRadioTuningSpace2* This,LONG *StepVal) {
+    return This->lpVtbl->get_Step(This,StepVal);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_put_Step(IAnalogRadioTuningSpace2* This,LONG NewStepVal) {
+    return This->lpVtbl->put_Step(This,NewStepVal);
+}
+/*** IAnalogRadioTuningSpace2 methods ***/
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_get_CountryCode(IAnalogRadioTuningSpace2* This,LONG *CountryCodeVal) {
+    return This->lpVtbl->get_CountryCode(This,CountryCodeVal);
+}
+static FORCEINLINE HRESULT IAnalogRadioTuningSpace2_put_CountryCode(IAnalogRadioTuningSpace2* This,LONG NewCountryCodeVal) {
+    return This->lpVtbl->put_CountryCode(This,NewCountryCodeVal);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IAnalogRadioTuningSpace2_get_CountryCode_Proxy(
+    IAnalogRadioTuningSpace2* This,
+    LONG *CountryCodeVal);
+void __RPC_STUB IAnalogRadioTuningSpace2_get_CountryCode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAnalogRadioTuningSpace2_put_CountryCode_Proxy(
+    IAnalogRadioTuningSpace2* This,
+    LONG NewCountryCodeVal);
+void __RPC_STUB IAnalogRadioTuningSpace2_put_CountryCode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IAnalogRadioTuningSpace2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITuneRequest interface
+ */
+#ifndef __ITuneRequest_INTERFACE_DEFINED__
+#define __ITuneRequest_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITuneRequest, 0x07ddc146, 0xfc3d, 0x11d2, 0x9d,0x8c, 0x00,0xc0,0x4f,0x72,0xd9,0x80);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("07ddc146-fc3d-11d2-9d8c-00c04f72d980")
+ITuneRequest : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_TuningSpace(
+        ITuningSpace **TuningSpace) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Components(
+        IComponents **Components) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        ITuneRequest **NewTuneRequest) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Locator(
+        ILocator **Locator) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Locator(
+        ILocator *Locator) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITuneRequest, 0x07ddc146, 0xfc3d, 0x11d2, 0x9d,0x8c, 0x00,0xc0,0x4f,0x72,0xd9,0x80)
+#endif
+#else
+typedef struct ITuneRequestVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITuneRequest* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITuneRequest* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITuneRequest* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        ITuneRequest* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        ITuneRequest* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        ITuneRequest* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        ITuneRequest* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ITuneRequest methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_TuningSpace)(
+        ITuneRequest* This,
+        ITuningSpace **TuningSpace);
+
+    HRESULT (STDMETHODCALLTYPE *get_Components)(
+        ITuneRequest* This,
+        IComponents **Components);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        ITuneRequest* This,
+        ITuneRequest **NewTuneRequest);
+
+    HRESULT (STDMETHODCALLTYPE *get_Locator)(
+        ITuneRequest* This,
+        ILocator **Locator);
+
+    HRESULT (STDMETHODCALLTYPE *put_Locator)(
+        ITuneRequest* This,
+        ILocator *Locator);
+
+    END_INTERFACE
+} ITuneRequestVtbl;
+interface ITuneRequest {
+    CONST_VTBL ITuneRequestVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ITuneRequest_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITuneRequest_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITuneRequest_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define ITuneRequest_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define ITuneRequest_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define ITuneRequest_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define ITuneRequest_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ITuneRequest methods ***/
+#define ITuneRequest_get_TuningSpace(This,TuningSpace) (This)->lpVtbl->get_TuningSpace(This,TuningSpace)
+#define ITuneRequest_get_Components(This,Components) (This)->lpVtbl->get_Components(This,Components)
+#define ITuneRequest_Clone(This,NewTuneRequest) (This)->lpVtbl->Clone(This,NewTuneRequest)
+#define ITuneRequest_get_Locator(This,Locator) (This)->lpVtbl->get_Locator(This,Locator)
+#define ITuneRequest_put_Locator(This,Locator) (This)->lpVtbl->put_Locator(This,Locator)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ITuneRequest_QueryInterface(ITuneRequest* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ITuneRequest_AddRef(ITuneRequest* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ITuneRequest_Release(ITuneRequest* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT ITuneRequest_GetTypeInfoCount(ITuneRequest* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT ITuneRequest_GetTypeInfo(ITuneRequest* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT ITuneRequest_GetIDsOfNames(ITuneRequest* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT ITuneRequest_Invoke(ITuneRequest* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ITuneRequest methods ***/
+static FORCEINLINE HRESULT ITuneRequest_get_TuningSpace(ITuneRequest* This,ITuningSpace **TuningSpace) {
+    return This->lpVtbl->get_TuningSpace(This,TuningSpace);
+}
+static FORCEINLINE HRESULT ITuneRequest_get_Components(ITuneRequest* This,IComponents **Components) {
+    return This->lpVtbl->get_Components(This,Components);
+}
+static FORCEINLINE HRESULT ITuneRequest_Clone(ITuneRequest* This,ITuneRequest **NewTuneRequest) {
+    return This->lpVtbl->Clone(This,NewTuneRequest);
+}
+static FORCEINLINE HRESULT ITuneRequest_get_Locator(ITuneRequest* This,ILocator **Locator) {
+    return This->lpVtbl->get_Locator(This,Locator);
+}
+static FORCEINLINE HRESULT ITuneRequest_put_Locator(ITuneRequest* This,ILocator *Locator) {
+    return This->lpVtbl->put_Locator(This,Locator);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITuneRequest_get_TuningSpace_Proxy(
+    ITuneRequest* This,
+    ITuningSpace **TuningSpace);
+void __RPC_STUB ITuneRequest_get_TuningSpace_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuneRequest_get_Components_Proxy(
+    ITuneRequest* This,
+    IComponents **Components);
+void __RPC_STUB ITuneRequest_get_Components_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuneRequest_Clone_Proxy(
+    ITuneRequest* This,
+    ITuneRequest **NewTuneRequest);
+void __RPC_STUB ITuneRequest_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuneRequest_get_Locator_Proxy(
+    ITuneRequest* This,
+    ILocator **Locator);
+void __RPC_STUB ITuneRequest_get_Locator_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuneRequest_put_Locator_Proxy(
+    ITuneRequest* This,
+    ILocator *Locator);
+void __RPC_STUB ITuneRequest_put_Locator_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ITuneRequest_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IChannelIDTuneRequest interface
+ */
+#ifndef __IChannelIDTuneRequest_INTERFACE_DEFINED__
+#define __IChannelIDTuneRequest_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IChannelIDTuneRequest, 0x156eff60, 0x86f4, 0x4e28, 0x89,0xfc, 0x10,0x97,0x99,0xfd,0x57,0xee);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("156eff60-86f4-4e28-89fc-109799fd57ee")
+IChannelIDTuneRequest : public ITuneRequest
+{
+    virtual HRESULT STDMETHODCALLTYPE get_ChannelID(
+        BSTR *ChannelID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_ChannelID(
+        BSTR ChannelID) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IChannelIDTuneRequest, 0x156eff60, 0x86f4, 0x4e28, 0x89,0xfc, 0x10,0x97,0x99,0xfd,0x57,0xee)
+#endif
+#else
+typedef struct IChannelIDTuneRequestVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IChannelIDTuneRequest* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IChannelIDTuneRequest* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IChannelIDTuneRequest* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IChannelIDTuneRequest* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IChannelIDTuneRequest* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IChannelIDTuneRequest* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IChannelIDTuneRequest* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ITuneRequest methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_TuningSpace)(
+        IChannelIDTuneRequest* This,
+        ITuningSpace **TuningSpace);
+
+    HRESULT (STDMETHODCALLTYPE *get_Components)(
+        IChannelIDTuneRequest* This,
+        IComponents **Components);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IChannelIDTuneRequest* This,
+        ITuneRequest **NewTuneRequest);
+
+    HRESULT (STDMETHODCALLTYPE *get_Locator)(
+        IChannelIDTuneRequest* This,
+        ILocator **Locator);
+
+    HRESULT (STDMETHODCALLTYPE *put_Locator)(
+        IChannelIDTuneRequest* This,
+        ILocator *Locator);
+
+    /*** IChannelIDTuneRequest methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_ChannelID)(
+        IChannelIDTuneRequest* This,
+        BSTR *ChannelID);
+
+    HRESULT (STDMETHODCALLTYPE *put_ChannelID)(
+        IChannelIDTuneRequest* This,
+        BSTR ChannelID);
+
+    END_INTERFACE
+} IChannelIDTuneRequestVtbl;
+interface IChannelIDTuneRequest {
+    CONST_VTBL IChannelIDTuneRequestVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IChannelIDTuneRequest_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IChannelIDTuneRequest_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IChannelIDTuneRequest_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IChannelIDTuneRequest_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IChannelIDTuneRequest_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IChannelIDTuneRequest_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IChannelIDTuneRequest_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ITuneRequest methods ***/
+#define IChannelIDTuneRequest_get_TuningSpace(This,TuningSpace) (This)->lpVtbl->get_TuningSpace(This,TuningSpace)
+#define IChannelIDTuneRequest_get_Components(This,Components) (This)->lpVtbl->get_Components(This,Components)
+#define IChannelIDTuneRequest_Clone(This,NewTuneRequest) (This)->lpVtbl->Clone(This,NewTuneRequest)
+#define IChannelIDTuneRequest_get_Locator(This,Locator) (This)->lpVtbl->get_Locator(This,Locator)
+#define IChannelIDTuneRequest_put_Locator(This,Locator) (This)->lpVtbl->put_Locator(This,Locator)
+/*** IChannelIDTuneRequest methods ***/
+#define IChannelIDTuneRequest_get_ChannelID(This,ChannelID) (This)->lpVtbl->get_ChannelID(This,ChannelID)
+#define IChannelIDTuneRequest_put_ChannelID(This,ChannelID) (This)->lpVtbl->put_ChannelID(This,ChannelID)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IChannelIDTuneRequest_QueryInterface(IChannelIDTuneRequest* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IChannelIDTuneRequest_AddRef(IChannelIDTuneRequest* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IChannelIDTuneRequest_Release(IChannelIDTuneRequest* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IChannelIDTuneRequest_GetTypeInfoCount(IChannelIDTuneRequest* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IChannelIDTuneRequest_GetTypeInfo(IChannelIDTuneRequest* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IChannelIDTuneRequest_GetIDsOfNames(IChannelIDTuneRequest* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IChannelIDTuneRequest_Invoke(IChannelIDTuneRequest* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ITuneRequest methods ***/
+static FORCEINLINE HRESULT IChannelIDTuneRequest_get_TuningSpace(IChannelIDTuneRequest* This,ITuningSpace **TuningSpace) {
+    return This->lpVtbl->get_TuningSpace(This,TuningSpace);
+}
+static FORCEINLINE HRESULT IChannelIDTuneRequest_get_Components(IChannelIDTuneRequest* This,IComponents **Components) {
+    return This->lpVtbl->get_Components(This,Components);
+}
+static FORCEINLINE HRESULT IChannelIDTuneRequest_Clone(IChannelIDTuneRequest* This,ITuneRequest **NewTuneRequest) {
+    return This->lpVtbl->Clone(This,NewTuneRequest);
+}
+static FORCEINLINE HRESULT IChannelIDTuneRequest_get_Locator(IChannelIDTuneRequest* This,ILocator **Locator) {
+    return This->lpVtbl->get_Locator(This,Locator);
+}
+static FORCEINLINE HRESULT IChannelIDTuneRequest_put_Locator(IChannelIDTuneRequest* This,ILocator *Locator) {
+    return This->lpVtbl->put_Locator(This,Locator);
+}
+/*** IChannelIDTuneRequest methods ***/
+static FORCEINLINE HRESULT IChannelIDTuneRequest_get_ChannelID(IChannelIDTuneRequest* This,BSTR *ChannelID) {
+    return This->lpVtbl->get_ChannelID(This,ChannelID);
+}
+static FORCEINLINE HRESULT IChannelIDTuneRequest_put_ChannelID(IChannelIDTuneRequest* This,BSTR ChannelID) {
+    return This->lpVtbl->put_ChannelID(This,ChannelID);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IChannelIDTuneRequest_get_ChannelID_Proxy(
+    IChannelIDTuneRequest* This,
+    BSTR *ChannelID);
+void __RPC_STUB IChannelIDTuneRequest_get_ChannelID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IChannelIDTuneRequest_put_ChannelID_Proxy(
+    IChannelIDTuneRequest* This,
+    BSTR ChannelID);
+void __RPC_STUB IChannelIDTuneRequest_put_ChannelID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IChannelIDTuneRequest_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IChannelTuneRequest interface
+ */
+#ifndef __IChannelTuneRequest_INTERFACE_DEFINED__
+#define __IChannelTuneRequest_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IChannelTuneRequest, 0x0369b4e0, 0x45b6, 0x11d3, 0xb6,0x50, 0x00,0xc0,0x4f,0x79,0x49,0x8e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("0369b4e0-45b6-11d3-b650-00c04f79498e")
+IChannelTuneRequest : public ITuneRequest
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Channel(
+        LONG *Channel) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Channel(
+        LONG Channel) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IChannelTuneRequest, 0x0369b4e0, 0x45b6, 0x11d3, 0xb6,0x50, 0x00,0xc0,0x4f,0x79,0x49,0x8e)
+#endif
+#else
+typedef struct IChannelTuneRequestVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IChannelTuneRequest* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IChannelTuneRequest* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IChannelTuneRequest* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IChannelTuneRequest* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IChannelTuneRequest* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IChannelTuneRequest* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IChannelTuneRequest* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ITuneRequest methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_TuningSpace)(
+        IChannelTuneRequest* This,
+        ITuningSpace **TuningSpace);
+
+    HRESULT (STDMETHODCALLTYPE *get_Components)(
+        IChannelTuneRequest* This,
+        IComponents **Components);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IChannelTuneRequest* This,
+        ITuneRequest **NewTuneRequest);
+
+    HRESULT (STDMETHODCALLTYPE *get_Locator)(
+        IChannelTuneRequest* This,
+        ILocator **Locator);
+
+    HRESULT (STDMETHODCALLTYPE *put_Locator)(
+        IChannelTuneRequest* This,
+        ILocator *Locator);
+
+    /*** IChannelTuneRequest methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Channel)(
+        IChannelTuneRequest* This,
+        LONG *Channel);
+
+    HRESULT (STDMETHODCALLTYPE *put_Channel)(
+        IChannelTuneRequest* This,
+        LONG Channel);
+
+    END_INTERFACE
+} IChannelTuneRequestVtbl;
+interface IChannelTuneRequest {
+    CONST_VTBL IChannelTuneRequestVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IChannelTuneRequest_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IChannelTuneRequest_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IChannelTuneRequest_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IChannelTuneRequest_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IChannelTuneRequest_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IChannelTuneRequest_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IChannelTuneRequest_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ITuneRequest methods ***/
+#define IChannelTuneRequest_get_TuningSpace(This,TuningSpace) (This)->lpVtbl->get_TuningSpace(This,TuningSpace)
+#define IChannelTuneRequest_get_Components(This,Components) (This)->lpVtbl->get_Components(This,Components)
+#define IChannelTuneRequest_Clone(This,NewTuneRequest) (This)->lpVtbl->Clone(This,NewTuneRequest)
+#define IChannelTuneRequest_get_Locator(This,Locator) (This)->lpVtbl->get_Locator(This,Locator)
+#define IChannelTuneRequest_put_Locator(This,Locator) (This)->lpVtbl->put_Locator(This,Locator)
+/*** IChannelTuneRequest methods ***/
+#define IChannelTuneRequest_get_Channel(This,Channel) (This)->lpVtbl->get_Channel(This,Channel)
+#define IChannelTuneRequest_put_Channel(This,Channel) (This)->lpVtbl->put_Channel(This,Channel)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IChannelTuneRequest_QueryInterface(IChannelTuneRequest* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IChannelTuneRequest_AddRef(IChannelTuneRequest* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IChannelTuneRequest_Release(IChannelTuneRequest* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IChannelTuneRequest_GetTypeInfoCount(IChannelTuneRequest* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IChannelTuneRequest_GetTypeInfo(IChannelTuneRequest* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IChannelTuneRequest_GetIDsOfNames(IChannelTuneRequest* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IChannelTuneRequest_Invoke(IChannelTuneRequest* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ITuneRequest methods ***/
+static FORCEINLINE HRESULT IChannelTuneRequest_get_TuningSpace(IChannelTuneRequest* This,ITuningSpace **TuningSpace) {
+    return This->lpVtbl->get_TuningSpace(This,TuningSpace);
+}
+static FORCEINLINE HRESULT IChannelTuneRequest_get_Components(IChannelTuneRequest* This,IComponents **Components) {
+    return This->lpVtbl->get_Components(This,Components);
+}
+static FORCEINLINE HRESULT IChannelTuneRequest_Clone(IChannelTuneRequest* This,ITuneRequest **NewTuneRequest) {
+    return This->lpVtbl->Clone(This,NewTuneRequest);
+}
+static FORCEINLINE HRESULT IChannelTuneRequest_get_Locator(IChannelTuneRequest* This,ILocator **Locator) {
+    return This->lpVtbl->get_Locator(This,Locator);
+}
+static FORCEINLINE HRESULT IChannelTuneRequest_put_Locator(IChannelTuneRequest* This,ILocator *Locator) {
+    return This->lpVtbl->put_Locator(This,Locator);
+}
+/*** IChannelTuneRequest methods ***/
+static FORCEINLINE HRESULT IChannelTuneRequest_get_Channel(IChannelTuneRequest* This,LONG *Channel) {
+    return This->lpVtbl->get_Channel(This,Channel);
+}
+static FORCEINLINE HRESULT IChannelTuneRequest_put_Channel(IChannelTuneRequest* This,LONG Channel) {
+    return This->lpVtbl->put_Channel(This,Channel);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IChannelTuneRequest_get_Channel_Proxy(
+    IChannelTuneRequest* This,
+    LONG *Channel);
+void __RPC_STUB IChannelTuneRequest_get_Channel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IChannelTuneRequest_put_Channel_Proxy(
+    IChannelTuneRequest* This,
+    LONG Channel);
+void __RPC_STUB IChannelTuneRequest_put_Channel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IChannelTuneRequest_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IATSCChannelTuneRequest interface
+ */
+#ifndef __IATSCChannelTuneRequest_INTERFACE_DEFINED__
+#define __IATSCChannelTuneRequest_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IATSCChannelTuneRequest, 0x0369b4e1, 0x45b6, 0x11d3, 0xb6,0x50, 0x00,0xc0,0x4f,0x79,0x49,0x8e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("0369b4e1-45b6-11d3-b650-00c04f79498e")
+IATSCChannelTuneRequest : public IChannelTuneRequest
+{
+    virtual HRESULT STDMETHODCALLTYPE get_MinorChannel(
+        LONG *MinorChannel) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_MinorChannel(
+        LONG MinorChannel) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IATSCChannelTuneRequest, 0x0369b4e1, 0x45b6, 0x11d3, 0xb6,0x50, 0x00,0xc0,0x4f,0x79,0x49,0x8e)
+#endif
+#else
+typedef struct IATSCChannelTuneRequestVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IATSCChannelTuneRequest* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IATSCChannelTuneRequest* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IATSCChannelTuneRequest* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IATSCChannelTuneRequest* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IATSCChannelTuneRequest* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IATSCChannelTuneRequest* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IATSCChannelTuneRequest* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ITuneRequest methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_TuningSpace)(
+        IATSCChannelTuneRequest* This,
+        ITuningSpace **TuningSpace);
+
+    HRESULT (STDMETHODCALLTYPE *get_Components)(
+        IATSCChannelTuneRequest* This,
+        IComponents **Components);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IATSCChannelTuneRequest* This,
+        ITuneRequest **NewTuneRequest);
+
+    HRESULT (STDMETHODCALLTYPE *get_Locator)(
+        IATSCChannelTuneRequest* This,
+        ILocator **Locator);
+
+    HRESULT (STDMETHODCALLTYPE *put_Locator)(
+        IATSCChannelTuneRequest* This,
+        ILocator *Locator);
+
+    /*** IChannelTuneRequest methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Channel)(
+        IATSCChannelTuneRequest* This,
+        LONG *Channel);
+
+    HRESULT (STDMETHODCALLTYPE *put_Channel)(
+        IATSCChannelTuneRequest* This,
+        LONG Channel);
+
+    /*** IATSCChannelTuneRequest methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_MinorChannel)(
+        IATSCChannelTuneRequest* This,
+        LONG *MinorChannel);
+
+    HRESULT (STDMETHODCALLTYPE *put_MinorChannel)(
+        IATSCChannelTuneRequest* This,
+        LONG MinorChannel);
+
+    END_INTERFACE
+} IATSCChannelTuneRequestVtbl;
+interface IATSCChannelTuneRequest {
+    CONST_VTBL IATSCChannelTuneRequestVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IATSCChannelTuneRequest_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IATSCChannelTuneRequest_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IATSCChannelTuneRequest_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IATSCChannelTuneRequest_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IATSCChannelTuneRequest_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IATSCChannelTuneRequest_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IATSCChannelTuneRequest_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ITuneRequest methods ***/
+#define IATSCChannelTuneRequest_get_TuningSpace(This,TuningSpace) (This)->lpVtbl->get_TuningSpace(This,TuningSpace)
+#define IATSCChannelTuneRequest_get_Components(This,Components) (This)->lpVtbl->get_Components(This,Components)
+#define IATSCChannelTuneRequest_Clone(This,NewTuneRequest) (This)->lpVtbl->Clone(This,NewTuneRequest)
+#define IATSCChannelTuneRequest_get_Locator(This,Locator) (This)->lpVtbl->get_Locator(This,Locator)
+#define IATSCChannelTuneRequest_put_Locator(This,Locator) (This)->lpVtbl->put_Locator(This,Locator)
+/*** IChannelTuneRequest methods ***/
+#define IATSCChannelTuneRequest_get_Channel(This,Channel) (This)->lpVtbl->get_Channel(This,Channel)
+#define IATSCChannelTuneRequest_put_Channel(This,Channel) (This)->lpVtbl->put_Channel(This,Channel)
+/*** IATSCChannelTuneRequest methods ***/
+#define IATSCChannelTuneRequest_get_MinorChannel(This,MinorChannel) (This)->lpVtbl->get_MinorChannel(This,MinorChannel)
+#define IATSCChannelTuneRequest_put_MinorChannel(This,MinorChannel) (This)->lpVtbl->put_MinorChannel(This,MinorChannel)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IATSCChannelTuneRequest_QueryInterface(IATSCChannelTuneRequest* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IATSCChannelTuneRequest_AddRef(IATSCChannelTuneRequest* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IATSCChannelTuneRequest_Release(IATSCChannelTuneRequest* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IATSCChannelTuneRequest_GetTypeInfoCount(IATSCChannelTuneRequest* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IATSCChannelTuneRequest_GetTypeInfo(IATSCChannelTuneRequest* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IATSCChannelTuneRequest_GetIDsOfNames(IATSCChannelTuneRequest* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IATSCChannelTuneRequest_Invoke(IATSCChannelTuneRequest* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ITuneRequest methods ***/
+static FORCEINLINE HRESULT IATSCChannelTuneRequest_get_TuningSpace(IATSCChannelTuneRequest* This,ITuningSpace **TuningSpace) {
+    return This->lpVtbl->get_TuningSpace(This,TuningSpace);
+}
+static FORCEINLINE HRESULT IATSCChannelTuneRequest_get_Components(IATSCChannelTuneRequest* This,IComponents **Components) {
+    return This->lpVtbl->get_Components(This,Components);
+}
+static FORCEINLINE HRESULT IATSCChannelTuneRequest_Clone(IATSCChannelTuneRequest* This,ITuneRequest **NewTuneRequest) {
+    return This->lpVtbl->Clone(This,NewTuneRequest);
+}
+static FORCEINLINE HRESULT IATSCChannelTuneRequest_get_Locator(IATSCChannelTuneRequest* This,ILocator **Locator) {
+    return This->lpVtbl->get_Locator(This,Locator);
+}
+static FORCEINLINE HRESULT IATSCChannelTuneRequest_put_Locator(IATSCChannelTuneRequest* This,ILocator *Locator) {
+    return This->lpVtbl->put_Locator(This,Locator);
+}
+/*** IChannelTuneRequest methods ***/
+static FORCEINLINE HRESULT IATSCChannelTuneRequest_get_Channel(IATSCChannelTuneRequest* This,LONG *Channel) {
+    return This->lpVtbl->get_Channel(This,Channel);
+}
+static FORCEINLINE HRESULT IATSCChannelTuneRequest_put_Channel(IATSCChannelTuneRequest* This,LONG Channel) {
+    return This->lpVtbl->put_Channel(This,Channel);
+}
+/*** IATSCChannelTuneRequest methods ***/
+static FORCEINLINE HRESULT IATSCChannelTuneRequest_get_MinorChannel(IATSCChannelTuneRequest* This,LONG *MinorChannel) {
+    return This->lpVtbl->get_MinorChannel(This,MinorChannel);
+}
+static FORCEINLINE HRESULT IATSCChannelTuneRequest_put_MinorChannel(IATSCChannelTuneRequest* This,LONG MinorChannel) {
+    return This->lpVtbl->put_MinorChannel(This,MinorChannel);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IATSCChannelTuneRequest_get_MinorChannel_Proxy(
+    IATSCChannelTuneRequest* This,
+    LONG *MinorChannel);
+void __RPC_STUB IATSCChannelTuneRequest_get_MinorChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IATSCChannelTuneRequest_put_MinorChannel_Proxy(
+    IATSCChannelTuneRequest* This,
+    LONG MinorChannel);
+void __RPC_STUB IATSCChannelTuneRequest_put_MinorChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IATSCChannelTuneRequest_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDigitalCableTuneRequest interface
+ */
+#ifndef __IDigitalCableTuneRequest_INTERFACE_DEFINED__
+#define __IDigitalCableTuneRequest_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDigitalCableTuneRequest, 0xbad7753b, 0x6b37, 0x4810, 0xae,0x57, 0x3c,0xe0,0xc4,0xa9,0xe6,0xcb);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("bad7753b-6b37-4810-ae57-3ce0c4a9e6cb")
+IDigitalCableTuneRequest : public IATSCChannelTuneRequest
+{
+    virtual HRESULT STDMETHODCALLTYPE get_MajorChannel(
+        LONG *pMajorChannel) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_MajorChannel(
+        LONG MajorChannel) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SourceID(
+        LONG *pSourceID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_SourceID(
+        LONG SourceID) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDigitalCableTuneRequest, 0xbad7753b, 0x6b37, 0x4810, 0xae,0x57, 0x3c,0xe0,0xc4,0xa9,0xe6,0xcb)
+#endif
+#else
+typedef struct IDigitalCableTuneRequestVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDigitalCableTuneRequest* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDigitalCableTuneRequest* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDigitalCableTuneRequest* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IDigitalCableTuneRequest* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IDigitalCableTuneRequest* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IDigitalCableTuneRequest* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IDigitalCableTuneRequest* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ITuneRequest methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_TuningSpace)(
+        IDigitalCableTuneRequest* This,
+        ITuningSpace **TuningSpace);
+
+    HRESULT (STDMETHODCALLTYPE *get_Components)(
+        IDigitalCableTuneRequest* This,
+        IComponents **Components);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IDigitalCableTuneRequest* This,
+        ITuneRequest **NewTuneRequest);
+
+    HRESULT (STDMETHODCALLTYPE *get_Locator)(
+        IDigitalCableTuneRequest* This,
+        ILocator **Locator);
+
+    HRESULT (STDMETHODCALLTYPE *put_Locator)(
+        IDigitalCableTuneRequest* This,
+        ILocator *Locator);
+
+    /*** IChannelTuneRequest methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Channel)(
+        IDigitalCableTuneRequest* This,
+        LONG *Channel);
+
+    HRESULT (STDMETHODCALLTYPE *put_Channel)(
+        IDigitalCableTuneRequest* This,
+        LONG Channel);
+
+    /*** IATSCChannelTuneRequest methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_MinorChannel)(
+        IDigitalCableTuneRequest* This,
+        LONG *MinorChannel);
+
+    HRESULT (STDMETHODCALLTYPE *put_MinorChannel)(
+        IDigitalCableTuneRequest* This,
+        LONG MinorChannel);
+
+    /*** IDigitalCableTuneRequest methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_MajorChannel)(
+        IDigitalCableTuneRequest* This,
+        LONG *pMajorChannel);
+
+    HRESULT (STDMETHODCALLTYPE *put_MajorChannel)(
+        IDigitalCableTuneRequest* This,
+        LONG MajorChannel);
+
+    HRESULT (STDMETHODCALLTYPE *get_SourceID)(
+        IDigitalCableTuneRequest* This,
+        LONG *pSourceID);
+
+    HRESULT (STDMETHODCALLTYPE *put_SourceID)(
+        IDigitalCableTuneRequest* This,
+        LONG SourceID);
+
+    END_INTERFACE
+} IDigitalCableTuneRequestVtbl;
+interface IDigitalCableTuneRequest {
+    CONST_VTBL IDigitalCableTuneRequestVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDigitalCableTuneRequest_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDigitalCableTuneRequest_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDigitalCableTuneRequest_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IDigitalCableTuneRequest_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IDigitalCableTuneRequest_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IDigitalCableTuneRequest_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IDigitalCableTuneRequest_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ITuneRequest methods ***/
+#define IDigitalCableTuneRequest_get_TuningSpace(This,TuningSpace) (This)->lpVtbl->get_TuningSpace(This,TuningSpace)
+#define IDigitalCableTuneRequest_get_Components(This,Components) (This)->lpVtbl->get_Components(This,Components)
+#define IDigitalCableTuneRequest_Clone(This,NewTuneRequest) (This)->lpVtbl->Clone(This,NewTuneRequest)
+#define IDigitalCableTuneRequest_get_Locator(This,Locator) (This)->lpVtbl->get_Locator(This,Locator)
+#define IDigitalCableTuneRequest_put_Locator(This,Locator) (This)->lpVtbl->put_Locator(This,Locator)
+/*** IChannelTuneRequest methods ***/
+#define IDigitalCableTuneRequest_get_Channel(This,Channel) (This)->lpVtbl->get_Channel(This,Channel)
+#define IDigitalCableTuneRequest_put_Channel(This,Channel) (This)->lpVtbl->put_Channel(This,Channel)
+/*** IATSCChannelTuneRequest methods ***/
+#define IDigitalCableTuneRequest_get_MinorChannel(This,MinorChannel) (This)->lpVtbl->get_MinorChannel(This,MinorChannel)
+#define IDigitalCableTuneRequest_put_MinorChannel(This,MinorChannel) (This)->lpVtbl->put_MinorChannel(This,MinorChannel)
+/*** IDigitalCableTuneRequest methods ***/
+#define IDigitalCableTuneRequest_get_MajorChannel(This,pMajorChannel) (This)->lpVtbl->get_MajorChannel(This,pMajorChannel)
+#define IDigitalCableTuneRequest_put_MajorChannel(This,MajorChannel) (This)->lpVtbl->put_MajorChannel(This,MajorChannel)
+#define IDigitalCableTuneRequest_get_SourceID(This,pSourceID) (This)->lpVtbl->get_SourceID(This,pSourceID)
+#define IDigitalCableTuneRequest_put_SourceID(This,SourceID) (This)->lpVtbl->put_SourceID(This,SourceID)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDigitalCableTuneRequest_QueryInterface(IDigitalCableTuneRequest* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDigitalCableTuneRequest_AddRef(IDigitalCableTuneRequest* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDigitalCableTuneRequest_Release(IDigitalCableTuneRequest* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IDigitalCableTuneRequest_GetTypeInfoCount(IDigitalCableTuneRequest* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IDigitalCableTuneRequest_GetTypeInfo(IDigitalCableTuneRequest* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IDigitalCableTuneRequest_GetIDsOfNames(IDigitalCableTuneRequest* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IDigitalCableTuneRequest_Invoke(IDigitalCableTuneRequest* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ITuneRequest methods ***/
+static FORCEINLINE HRESULT IDigitalCableTuneRequest_get_TuningSpace(IDigitalCableTuneRequest* This,ITuningSpace **TuningSpace) {
+    return This->lpVtbl->get_TuningSpace(This,TuningSpace);
+}
+static FORCEINLINE HRESULT IDigitalCableTuneRequest_get_Components(IDigitalCableTuneRequest* This,IComponents **Components) {
+    return This->lpVtbl->get_Components(This,Components);
+}
+static FORCEINLINE HRESULT IDigitalCableTuneRequest_Clone(IDigitalCableTuneRequest* This,ITuneRequest **NewTuneRequest) {
+    return This->lpVtbl->Clone(This,NewTuneRequest);
+}
+static FORCEINLINE HRESULT IDigitalCableTuneRequest_get_Locator(IDigitalCableTuneRequest* This,ILocator **Locator) {
+    return This->lpVtbl->get_Locator(This,Locator);
+}
+static FORCEINLINE HRESULT IDigitalCableTuneRequest_put_Locator(IDigitalCableTuneRequest* This,ILocator *Locator) {
+    return This->lpVtbl->put_Locator(This,Locator);
+}
+/*** IChannelTuneRequest methods ***/
+static FORCEINLINE HRESULT IDigitalCableTuneRequest_get_Channel(IDigitalCableTuneRequest* This,LONG *Channel) {
+    return This->lpVtbl->get_Channel(This,Channel);
+}
+static FORCEINLINE HRESULT IDigitalCableTuneRequest_put_Channel(IDigitalCableTuneRequest* This,LONG Channel) {
+    return This->lpVtbl->put_Channel(This,Channel);
+}
+/*** IATSCChannelTuneRequest methods ***/
+static FORCEINLINE HRESULT IDigitalCableTuneRequest_get_MinorChannel(IDigitalCableTuneRequest* This,LONG *MinorChannel) {
+    return This->lpVtbl->get_MinorChannel(This,MinorChannel);
+}
+static FORCEINLINE HRESULT IDigitalCableTuneRequest_put_MinorChannel(IDigitalCableTuneRequest* This,LONG MinorChannel) {
+    return This->lpVtbl->put_MinorChannel(This,MinorChannel);
+}
+/*** IDigitalCableTuneRequest methods ***/
+static FORCEINLINE HRESULT IDigitalCableTuneRequest_get_MajorChannel(IDigitalCableTuneRequest* This,LONG *pMajorChannel) {
+    return This->lpVtbl->get_MajorChannel(This,pMajorChannel);
+}
+static FORCEINLINE HRESULT IDigitalCableTuneRequest_put_MajorChannel(IDigitalCableTuneRequest* This,LONG MajorChannel) {
+    return This->lpVtbl->put_MajorChannel(This,MajorChannel);
+}
+static FORCEINLINE HRESULT IDigitalCableTuneRequest_get_SourceID(IDigitalCableTuneRequest* This,LONG *pSourceID) {
+    return This->lpVtbl->get_SourceID(This,pSourceID);
+}
+static FORCEINLINE HRESULT IDigitalCableTuneRequest_put_SourceID(IDigitalCableTuneRequest* This,LONG SourceID) {
+    return This->lpVtbl->put_SourceID(This,SourceID);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IDigitalCableTuneRequest_get_MajorChannel_Proxy(
+    IDigitalCableTuneRequest* This,
+    LONG *pMajorChannel);
+void __RPC_STUB IDigitalCableTuneRequest_get_MajorChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDigitalCableTuneRequest_put_MajorChannel_Proxy(
+    IDigitalCableTuneRequest* This,
+    LONG MajorChannel);
+void __RPC_STUB IDigitalCableTuneRequest_put_MajorChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDigitalCableTuneRequest_get_SourceID_Proxy(
+    IDigitalCableTuneRequest* This,
+    LONG *pSourceID);
+void __RPC_STUB IDigitalCableTuneRequest_get_SourceID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDigitalCableTuneRequest_put_SourceID_Proxy(
+    IDigitalCableTuneRequest* This,
+    LONG SourceID);
+void __RPC_STUB IDigitalCableTuneRequest_put_SourceID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IDigitalCableTuneRequest_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDVBTuneRequest interface
+ */
+#ifndef __IDVBTuneRequest_INTERFACE_DEFINED__
+#define __IDVBTuneRequest_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDVBTuneRequest, 0x0d6f567e, 0xa636, 0x42bb, 0x83,0xba, 0xce,0x4c,0x17,0x04,0xaf,0xa2);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("0d6f567e-a636-42bb-83ba-ce4c1704afa2")
+IDVBTuneRequest : public ITuneRequest
+{
+    virtual HRESULT STDMETHODCALLTYPE get_ONID(
+        LONG *ONID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_ONID(
+        LONG ONID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_TSID(
+        LONG *TSID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_TSID(
+        LONG TSID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SID(
+        LONG *SID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_SID(
+        LONG SID) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDVBTuneRequest, 0x0d6f567e, 0xa636, 0x42bb, 0x83,0xba, 0xce,0x4c,0x17,0x04,0xaf,0xa2)
+#endif
+#else
+typedef struct IDVBTuneRequestVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDVBTuneRequest* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDVBTuneRequest* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDVBTuneRequest* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IDVBTuneRequest* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IDVBTuneRequest* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IDVBTuneRequest* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IDVBTuneRequest* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ITuneRequest methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_TuningSpace)(
+        IDVBTuneRequest* This,
+        ITuningSpace **TuningSpace);
+
+    HRESULT (STDMETHODCALLTYPE *get_Components)(
+        IDVBTuneRequest* This,
+        IComponents **Components);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IDVBTuneRequest* This,
+        ITuneRequest **NewTuneRequest);
+
+    HRESULT (STDMETHODCALLTYPE *get_Locator)(
+        IDVBTuneRequest* This,
+        ILocator **Locator);
+
+    HRESULT (STDMETHODCALLTYPE *put_Locator)(
+        IDVBTuneRequest* This,
+        ILocator *Locator);
+
+    /*** IDVBTuneRequest methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_ONID)(
+        IDVBTuneRequest* This,
+        LONG *ONID);
+
+    HRESULT (STDMETHODCALLTYPE *put_ONID)(
+        IDVBTuneRequest* This,
+        LONG ONID);
+
+    HRESULT (STDMETHODCALLTYPE *get_TSID)(
+        IDVBTuneRequest* This,
+        LONG *TSID);
+
+    HRESULT (STDMETHODCALLTYPE *put_TSID)(
+        IDVBTuneRequest* This,
+        LONG TSID);
+
+    HRESULT (STDMETHODCALLTYPE *get_SID)(
+        IDVBTuneRequest* This,
+        LONG *SID);
+
+    HRESULT (STDMETHODCALLTYPE *put_SID)(
+        IDVBTuneRequest* This,
+        LONG SID);
+
+    END_INTERFACE
+} IDVBTuneRequestVtbl;
+interface IDVBTuneRequest {
+    CONST_VTBL IDVBTuneRequestVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDVBTuneRequest_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDVBTuneRequest_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDVBTuneRequest_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IDVBTuneRequest_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IDVBTuneRequest_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IDVBTuneRequest_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IDVBTuneRequest_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ITuneRequest methods ***/
+#define IDVBTuneRequest_get_TuningSpace(This,TuningSpace) (This)->lpVtbl->get_TuningSpace(This,TuningSpace)
+#define IDVBTuneRequest_get_Components(This,Components) (This)->lpVtbl->get_Components(This,Components)
+#define IDVBTuneRequest_Clone(This,NewTuneRequest) (This)->lpVtbl->Clone(This,NewTuneRequest)
+#define IDVBTuneRequest_get_Locator(This,Locator) (This)->lpVtbl->get_Locator(This,Locator)
+#define IDVBTuneRequest_put_Locator(This,Locator) (This)->lpVtbl->put_Locator(This,Locator)
+/*** IDVBTuneRequest methods ***/
+#define IDVBTuneRequest_get_ONID(This,ONID) (This)->lpVtbl->get_ONID(This,ONID)
+#define IDVBTuneRequest_put_ONID(This,ONID) (This)->lpVtbl->put_ONID(This,ONID)
+#define IDVBTuneRequest_get_TSID(This,TSID) (This)->lpVtbl->get_TSID(This,TSID)
+#define IDVBTuneRequest_put_TSID(This,TSID) (This)->lpVtbl->put_TSID(This,TSID)
+#define IDVBTuneRequest_get_SID(This,SID) (This)->lpVtbl->get_SID(This,SID)
+#define IDVBTuneRequest_put_SID(This,SID) (This)->lpVtbl->put_SID(This,SID)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDVBTuneRequest_QueryInterface(IDVBTuneRequest* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDVBTuneRequest_AddRef(IDVBTuneRequest* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDVBTuneRequest_Release(IDVBTuneRequest* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IDVBTuneRequest_GetTypeInfoCount(IDVBTuneRequest* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IDVBTuneRequest_GetTypeInfo(IDVBTuneRequest* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IDVBTuneRequest_GetIDsOfNames(IDVBTuneRequest* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IDVBTuneRequest_Invoke(IDVBTuneRequest* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ITuneRequest methods ***/
+static FORCEINLINE HRESULT IDVBTuneRequest_get_TuningSpace(IDVBTuneRequest* This,ITuningSpace **TuningSpace) {
+    return This->lpVtbl->get_TuningSpace(This,TuningSpace);
+}
+static FORCEINLINE HRESULT IDVBTuneRequest_get_Components(IDVBTuneRequest* This,IComponents **Components) {
+    return This->lpVtbl->get_Components(This,Components);
+}
+static FORCEINLINE HRESULT IDVBTuneRequest_Clone(IDVBTuneRequest* This,ITuneRequest **NewTuneRequest) {
+    return This->lpVtbl->Clone(This,NewTuneRequest);
+}
+static FORCEINLINE HRESULT IDVBTuneRequest_get_Locator(IDVBTuneRequest* This,ILocator **Locator) {
+    return This->lpVtbl->get_Locator(This,Locator);
+}
+static FORCEINLINE HRESULT IDVBTuneRequest_put_Locator(IDVBTuneRequest* This,ILocator *Locator) {
+    return This->lpVtbl->put_Locator(This,Locator);
+}
+/*** IDVBTuneRequest methods ***/
+static FORCEINLINE HRESULT IDVBTuneRequest_get_ONID(IDVBTuneRequest* This,LONG *ONID) {
+    return This->lpVtbl->get_ONID(This,ONID);
+}
+static FORCEINLINE HRESULT IDVBTuneRequest_put_ONID(IDVBTuneRequest* This,LONG ONID) {
+    return This->lpVtbl->put_ONID(This,ONID);
+}
+static FORCEINLINE HRESULT IDVBTuneRequest_get_TSID(IDVBTuneRequest* This,LONG *TSID) {
+    return This->lpVtbl->get_TSID(This,TSID);
+}
+static FORCEINLINE HRESULT IDVBTuneRequest_put_TSID(IDVBTuneRequest* This,LONG TSID) {
+    return This->lpVtbl->put_TSID(This,TSID);
+}
+static FORCEINLINE HRESULT IDVBTuneRequest_get_SID(IDVBTuneRequest* This,LONG *SID) {
+    return This->lpVtbl->get_SID(This,SID);
+}
+static FORCEINLINE HRESULT IDVBTuneRequest_put_SID(IDVBTuneRequest* This,LONG SID) {
+    return This->lpVtbl->put_SID(This,SID);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IDVBTuneRequest_get_ONID_Proxy(
+    IDVBTuneRequest* This,
+    LONG *ONID);
+void __RPC_STUB IDVBTuneRequest_get_ONID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBTuneRequest_put_ONID_Proxy(
+    IDVBTuneRequest* This,
+    LONG ONID);
+void __RPC_STUB IDVBTuneRequest_put_ONID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBTuneRequest_get_TSID_Proxy(
+    IDVBTuneRequest* This,
+    LONG *TSID);
+void __RPC_STUB IDVBTuneRequest_get_TSID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBTuneRequest_put_TSID_Proxy(
+    IDVBTuneRequest* This,
+    LONG TSID);
+void __RPC_STUB IDVBTuneRequest_put_TSID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBTuneRequest_get_SID_Proxy(
+    IDVBTuneRequest* This,
+    LONG *SID);
+void __RPC_STUB IDVBTuneRequest_get_SID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBTuneRequest_put_SID_Proxy(
+    IDVBTuneRequest* This,
+    LONG SID);
+void __RPC_STUB IDVBTuneRequest_put_SID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IDVBTuneRequest_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMPEG2TuneRequest interface
+ */
+#ifndef __IMPEG2TuneRequest_INTERFACE_DEFINED__
+#define __IMPEG2TuneRequest_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IMPEG2TuneRequest, 0xeb7d987f, 0x8a01, 0x42ad, 0xb8,0xae, 0x57,0x4d,0xee,0xe4,0x4d,0x1a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("eb7d987f-8a01-42ad-b8ae-574deee44d1a")
+IMPEG2TuneRequest : public ITuneRequest
+{
+    virtual HRESULT STDMETHODCALLTYPE get_TSID(
+        LONG *TSID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_TSID(
+        LONG TSID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ProgNo(
+        LONG *ProgNo) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_ProgNo(
+        LONG ProgNo) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMPEG2TuneRequest, 0xeb7d987f, 0x8a01, 0x42ad, 0xb8,0xae, 0x57,0x4d,0xee,0xe4,0x4d,0x1a)
+#endif
+#else
+typedef struct IMPEG2TuneRequestVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMPEG2TuneRequest* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMPEG2TuneRequest* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMPEG2TuneRequest* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IMPEG2TuneRequest* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IMPEG2TuneRequest* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IMPEG2TuneRequest* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IMPEG2TuneRequest* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ITuneRequest methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_TuningSpace)(
+        IMPEG2TuneRequest* This,
+        ITuningSpace **TuningSpace);
+
+    HRESULT (STDMETHODCALLTYPE *get_Components)(
+        IMPEG2TuneRequest* This,
+        IComponents **Components);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IMPEG2TuneRequest* This,
+        ITuneRequest **NewTuneRequest);
+
+    HRESULT (STDMETHODCALLTYPE *get_Locator)(
+        IMPEG2TuneRequest* This,
+        ILocator **Locator);
+
+    HRESULT (STDMETHODCALLTYPE *put_Locator)(
+        IMPEG2TuneRequest* This,
+        ILocator *Locator);
+
+    /*** IMPEG2TuneRequest methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_TSID)(
+        IMPEG2TuneRequest* This,
+        LONG *TSID);
+
+    HRESULT (STDMETHODCALLTYPE *put_TSID)(
+        IMPEG2TuneRequest* This,
+        LONG TSID);
+
+    HRESULT (STDMETHODCALLTYPE *get_ProgNo)(
+        IMPEG2TuneRequest* This,
+        LONG *ProgNo);
+
+    HRESULT (STDMETHODCALLTYPE *put_ProgNo)(
+        IMPEG2TuneRequest* This,
+        LONG ProgNo);
+
+    END_INTERFACE
+} IMPEG2TuneRequestVtbl;
+interface IMPEG2TuneRequest {
+    CONST_VTBL IMPEG2TuneRequestVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMPEG2TuneRequest_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMPEG2TuneRequest_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMPEG2TuneRequest_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IMPEG2TuneRequest_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IMPEG2TuneRequest_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IMPEG2TuneRequest_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IMPEG2TuneRequest_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ITuneRequest methods ***/
+#define IMPEG2TuneRequest_get_TuningSpace(This,TuningSpace) (This)->lpVtbl->get_TuningSpace(This,TuningSpace)
+#define IMPEG2TuneRequest_get_Components(This,Components) (This)->lpVtbl->get_Components(This,Components)
+#define IMPEG2TuneRequest_Clone(This,NewTuneRequest) (This)->lpVtbl->Clone(This,NewTuneRequest)
+#define IMPEG2TuneRequest_get_Locator(This,Locator) (This)->lpVtbl->get_Locator(This,Locator)
+#define IMPEG2TuneRequest_put_Locator(This,Locator) (This)->lpVtbl->put_Locator(This,Locator)
+/*** IMPEG2TuneRequest methods ***/
+#define IMPEG2TuneRequest_get_TSID(This,TSID) (This)->lpVtbl->get_TSID(This,TSID)
+#define IMPEG2TuneRequest_put_TSID(This,TSID) (This)->lpVtbl->put_TSID(This,TSID)
+#define IMPEG2TuneRequest_get_ProgNo(This,ProgNo) (This)->lpVtbl->get_ProgNo(This,ProgNo)
+#define IMPEG2TuneRequest_put_ProgNo(This,ProgNo) (This)->lpVtbl->put_ProgNo(This,ProgNo)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IMPEG2TuneRequest_QueryInterface(IMPEG2TuneRequest* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IMPEG2TuneRequest_AddRef(IMPEG2TuneRequest* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IMPEG2TuneRequest_Release(IMPEG2TuneRequest* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IMPEG2TuneRequest_GetTypeInfoCount(IMPEG2TuneRequest* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IMPEG2TuneRequest_GetTypeInfo(IMPEG2TuneRequest* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IMPEG2TuneRequest_GetIDsOfNames(IMPEG2TuneRequest* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IMPEG2TuneRequest_Invoke(IMPEG2TuneRequest* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ITuneRequest methods ***/
+static FORCEINLINE HRESULT IMPEG2TuneRequest_get_TuningSpace(IMPEG2TuneRequest* This,ITuningSpace **TuningSpace) {
+    return This->lpVtbl->get_TuningSpace(This,TuningSpace);
+}
+static FORCEINLINE HRESULT IMPEG2TuneRequest_get_Components(IMPEG2TuneRequest* This,IComponents **Components) {
+    return This->lpVtbl->get_Components(This,Components);
+}
+static FORCEINLINE HRESULT IMPEG2TuneRequest_Clone(IMPEG2TuneRequest* This,ITuneRequest **NewTuneRequest) {
+    return This->lpVtbl->Clone(This,NewTuneRequest);
+}
+static FORCEINLINE HRESULT IMPEG2TuneRequest_get_Locator(IMPEG2TuneRequest* This,ILocator **Locator) {
+    return This->lpVtbl->get_Locator(This,Locator);
+}
+static FORCEINLINE HRESULT IMPEG2TuneRequest_put_Locator(IMPEG2TuneRequest* This,ILocator *Locator) {
+    return This->lpVtbl->put_Locator(This,Locator);
+}
+/*** IMPEG2TuneRequest methods ***/
+static FORCEINLINE HRESULT IMPEG2TuneRequest_get_TSID(IMPEG2TuneRequest* This,LONG *TSID) {
+    return This->lpVtbl->get_TSID(This,TSID);
+}
+static FORCEINLINE HRESULT IMPEG2TuneRequest_put_TSID(IMPEG2TuneRequest* This,LONG TSID) {
+    return This->lpVtbl->put_TSID(This,TSID);
+}
+static FORCEINLINE HRESULT IMPEG2TuneRequest_get_ProgNo(IMPEG2TuneRequest* This,LONG *ProgNo) {
+    return This->lpVtbl->get_ProgNo(This,ProgNo);
+}
+static FORCEINLINE HRESULT IMPEG2TuneRequest_put_ProgNo(IMPEG2TuneRequest* This,LONG ProgNo) {
+    return This->lpVtbl->put_ProgNo(This,ProgNo);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IMPEG2TuneRequest_get_TSID_Proxy(
+    IMPEG2TuneRequest* This,
+    LONG *TSID);
+void __RPC_STUB IMPEG2TuneRequest_get_TSID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMPEG2TuneRequest_put_TSID_Proxy(
+    IMPEG2TuneRequest* This,
+    LONG TSID);
+void __RPC_STUB IMPEG2TuneRequest_put_TSID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMPEG2TuneRequest_get_ProgNo_Proxy(
+    IMPEG2TuneRequest* This,
+    LONG *ProgNo);
+void __RPC_STUB IMPEG2TuneRequest_get_ProgNo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMPEG2TuneRequest_put_ProgNo_Proxy(
+    IMPEG2TuneRequest* This,
+    LONG ProgNo);
+void __RPC_STUB IMPEG2TuneRequest_put_ProgNo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IMPEG2TuneRequest_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMPEG2TuneRequestFactory interface
+ */
+#ifndef __IMPEG2TuneRequestFactory_INTERFACE_DEFINED__
+#define __IMPEG2TuneRequestFactory_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IMPEG2TuneRequestFactory, 0x14e11abd, 0xee37, 0x4893, 0x9e,0xa1, 0x69,0x64,0xde,0x93,0x3e,0x39);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("14e11abd-ee37-4893-9ea1-6964de933e39")
+IMPEG2TuneRequestFactory : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateTuneRequest(
+        ITuningSpace *TuningSpace,
+        IMPEG2TuneRequest **TuneRequest) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMPEG2TuneRequestFactory, 0x14e11abd, 0xee37, 0x4893, 0x9e,0xa1, 0x69,0x64,0xde,0x93,0x3e,0x39)
+#endif
+#else
+typedef struct IMPEG2TuneRequestFactoryVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMPEG2TuneRequestFactory* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMPEG2TuneRequestFactory* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMPEG2TuneRequestFactory* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IMPEG2TuneRequestFactory* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IMPEG2TuneRequestFactory* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IMPEG2TuneRequestFactory* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IMPEG2TuneRequestFactory* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IMPEG2TuneRequestFactory methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateTuneRequest)(
+        IMPEG2TuneRequestFactory* This,
+        ITuningSpace *TuningSpace,
+        IMPEG2TuneRequest **TuneRequest);
+
+    END_INTERFACE
+} IMPEG2TuneRequestFactoryVtbl;
+interface IMPEG2TuneRequestFactory {
+    CONST_VTBL IMPEG2TuneRequestFactoryVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMPEG2TuneRequestFactory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMPEG2TuneRequestFactory_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMPEG2TuneRequestFactory_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IMPEG2TuneRequestFactory_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IMPEG2TuneRequestFactory_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IMPEG2TuneRequestFactory_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IMPEG2TuneRequestFactory_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IMPEG2TuneRequestFactory methods ***/
+#define IMPEG2TuneRequestFactory_CreateTuneRequest(This,TuningSpace,TuneRequest) (This)->lpVtbl->CreateTuneRequest(This,TuningSpace,TuneRequest)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IMPEG2TuneRequestFactory_QueryInterface(IMPEG2TuneRequestFactory* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IMPEG2TuneRequestFactory_AddRef(IMPEG2TuneRequestFactory* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IMPEG2TuneRequestFactory_Release(IMPEG2TuneRequestFactory* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IMPEG2TuneRequestFactory_GetTypeInfoCount(IMPEG2TuneRequestFactory* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IMPEG2TuneRequestFactory_GetTypeInfo(IMPEG2TuneRequestFactory* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IMPEG2TuneRequestFactory_GetIDsOfNames(IMPEG2TuneRequestFactory* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IMPEG2TuneRequestFactory_Invoke(IMPEG2TuneRequestFactory* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IMPEG2TuneRequestFactory methods ***/
+static FORCEINLINE HRESULT IMPEG2TuneRequestFactory_CreateTuneRequest(IMPEG2TuneRequestFactory* This,ITuningSpace *TuningSpace,IMPEG2TuneRequest **TuneRequest) {
+    return This->lpVtbl->CreateTuneRequest(This,TuningSpace,TuneRequest);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IMPEG2TuneRequestFactory_CreateTuneRequest_Proxy(
+    IMPEG2TuneRequestFactory* This,
+    ITuningSpace *TuningSpace,
+    IMPEG2TuneRequest **TuneRequest);
+void __RPC_STUB IMPEG2TuneRequestFactory_CreateTuneRequest_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IMPEG2TuneRequestFactory_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMPEG2TuneRequestSupport interface
+ */
+#ifndef __IMPEG2TuneRequestSupport_INTERFACE_DEFINED__
+#define __IMPEG2TuneRequestSupport_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IMPEG2TuneRequestSupport, 0x1b9d5fc3, 0x5bbc, 0x4b6c, 0xbb,0x18, 0xb9,0xd1,0x0e,0x3e,0xee,0xbf);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("1b9d5fc3-5bbc-4b6c-bb18-b9d10e3eeebf")
+IMPEG2TuneRequestSupport : public IUnknown
+{
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMPEG2TuneRequestSupport, 0x1b9d5fc3, 0x5bbc, 0x4b6c, 0xbb,0x18, 0xb9,0xd1,0x0e,0x3e,0xee,0xbf)
+#endif
+#else
+typedef struct IMPEG2TuneRequestSupportVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMPEG2TuneRequestSupport* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMPEG2TuneRequestSupport* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMPEG2TuneRequestSupport* This);
+
+    END_INTERFACE
+} IMPEG2TuneRequestSupportVtbl;
+interface IMPEG2TuneRequestSupport {
+    CONST_VTBL IMPEG2TuneRequestSupportVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMPEG2TuneRequestSupport_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMPEG2TuneRequestSupport_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMPEG2TuneRequestSupport_Release(This) (This)->lpVtbl->Release(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IMPEG2TuneRequestSupport_QueryInterface(IMPEG2TuneRequestSupport* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IMPEG2TuneRequestSupport_AddRef(IMPEG2TuneRequestSupport* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IMPEG2TuneRequestSupport_Release(IMPEG2TuneRequestSupport* This) {
+    return This->lpVtbl->Release(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IMPEG2TuneRequestSupport_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITunerCap interface
+ */
+#ifndef __ITunerCap_INTERFACE_DEFINED__
+#define __ITunerCap_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITunerCap, 0xe60dfa45, 0x8d56, 0x4e65, 0xa8,0xab, 0xd6,0xbe,0x94,0x12,0xc2,0x49);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("e60dfa45-8d56-4e65-a8ab-d6be9412c249")
+ITunerCap : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE get_SupportedNetworkTypes(
+        ULONG ulcNetworkTypesMax,
+        ULONG *pulcNetworkTypes,
+        GUID *pguidNetworkTypes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SupportedVideoFormats(
+        ULONG *pulAMTunerModeType,
+        ULONG *pulAnalogVideoStandard) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_AuxInputCount(
+        ULONG *pulCompositeCount,
+        ULONG *pulSvideoCount) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITunerCap, 0xe60dfa45, 0x8d56, 0x4e65, 0xa8,0xab, 0xd6,0xbe,0x94,0x12,0xc2,0x49)
+#endif
+#else
+typedef struct ITunerCapVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITunerCap* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITunerCap* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITunerCap* This);
+
+    /*** ITunerCap methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_SupportedNetworkTypes)(
+        ITunerCap* This,
+        ULONG ulcNetworkTypesMax,
+        ULONG *pulcNetworkTypes,
+        GUID *pguidNetworkTypes);
+
+    HRESULT (STDMETHODCALLTYPE *get_SupportedVideoFormats)(
+        ITunerCap* This,
+        ULONG *pulAMTunerModeType,
+        ULONG *pulAnalogVideoStandard);
+
+    HRESULT (STDMETHODCALLTYPE *get_AuxInputCount)(
+        ITunerCap* This,
+        ULONG *pulCompositeCount,
+        ULONG *pulSvideoCount);
+
+    END_INTERFACE
+} ITunerCapVtbl;
+interface ITunerCap {
+    CONST_VTBL ITunerCapVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ITunerCap_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITunerCap_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITunerCap_Release(This) (This)->lpVtbl->Release(This)
+/*** ITunerCap methods ***/
+#define ITunerCap_get_SupportedNetworkTypes(This,ulcNetworkTypesMax,pulcNetworkTypes,pguidNetworkTypes) (This)->lpVtbl->get_SupportedNetworkTypes(This,ulcNetworkTypesMax,pulcNetworkTypes,pguidNetworkTypes)
+#define ITunerCap_get_SupportedVideoFormats(This,pulAMTunerModeType,pulAnalogVideoStandard) (This)->lpVtbl->get_SupportedVideoFormats(This,pulAMTunerModeType,pulAnalogVideoStandard)
+#define ITunerCap_get_AuxInputCount(This,pulCompositeCount,pulSvideoCount) (This)->lpVtbl->get_AuxInputCount(This,pulCompositeCount,pulSvideoCount)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ITunerCap_QueryInterface(ITunerCap* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ITunerCap_AddRef(ITunerCap* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ITunerCap_Release(ITunerCap* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITunerCap methods ***/
+static FORCEINLINE HRESULT ITunerCap_get_SupportedNetworkTypes(ITunerCap* This,ULONG ulcNetworkTypesMax,ULONG *pulcNetworkTypes,GUID *pguidNetworkTypes) {
+    return This->lpVtbl->get_SupportedNetworkTypes(This,ulcNetworkTypesMax,pulcNetworkTypes,pguidNetworkTypes);
+}
+static FORCEINLINE HRESULT ITunerCap_get_SupportedVideoFormats(ITunerCap* This,ULONG *pulAMTunerModeType,ULONG *pulAnalogVideoStandard) {
+    return This->lpVtbl->get_SupportedVideoFormats(This,pulAMTunerModeType,pulAnalogVideoStandard);
+}
+static FORCEINLINE HRESULT ITunerCap_get_AuxInputCount(ITunerCap* This,ULONG *pulCompositeCount,ULONG *pulSvideoCount) {
+    return This->lpVtbl->get_AuxInputCount(This,pulCompositeCount,pulSvideoCount);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITunerCap_get_SupportedNetworkTypes_Proxy(
+    ITunerCap* This,
+    ULONG ulcNetworkTypesMax,
+    ULONG *pulcNetworkTypes,
+    GUID *pguidNetworkTypes);
+void __RPC_STUB ITunerCap_get_SupportedNetworkTypes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITunerCap_get_SupportedVideoFormats_Proxy(
+    ITunerCap* This,
+    ULONG *pulAMTunerModeType,
+    ULONG *pulAnalogVideoStandard);
+void __RPC_STUB ITunerCap_get_SupportedVideoFormats_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITunerCap_get_AuxInputCount_Proxy(
+    ITunerCap* This,
+    ULONG *pulCompositeCount,
+    ULONG *pulSvideoCount);
+void __RPC_STUB ITunerCap_get_AuxInputCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ITunerCap_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITunerCapEx interface
+ */
+#ifndef __ITunerCapEx_INTERFACE_DEFINED__
+#define __ITunerCapEx_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITunerCapEx, 0xed3e0c66, 0x18c8, 0x4ea6, 0x93,0x00, 0xf6,0x84,0x1f,0xdd,0x35,0xdc);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("ed3e0c66-18c8-4ea6-9300-f6841fdd35dc")
+ITunerCapEx : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Has608_708Caption(
+        VARIANT_BOOL *pbHasCaption) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITunerCapEx, 0xed3e0c66, 0x18c8, 0x4ea6, 0x93,0x00, 0xf6,0x84,0x1f,0xdd,0x35,0xdc)
+#endif
+#else
+typedef struct ITunerCapExVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITunerCapEx* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITunerCapEx* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITunerCapEx* This);
+
+    /*** ITunerCapEx methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Has608_708Caption)(
+        ITunerCapEx* This,
+        VARIANT_BOOL *pbHasCaption);
+
+    END_INTERFACE
+} ITunerCapExVtbl;
+interface ITunerCapEx {
+    CONST_VTBL ITunerCapExVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ITunerCapEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITunerCapEx_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITunerCapEx_Release(This) (This)->lpVtbl->Release(This)
+/*** ITunerCapEx methods ***/
+#define ITunerCapEx_get_Has608_708Caption(This,pbHasCaption) (This)->lpVtbl->get_Has608_708Caption(This,pbHasCaption)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ITunerCapEx_QueryInterface(ITunerCapEx* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ITunerCapEx_AddRef(ITunerCapEx* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ITunerCapEx_Release(ITunerCapEx* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITunerCapEx methods ***/
+static FORCEINLINE HRESULT ITunerCapEx_get_Has608_708Caption(ITunerCapEx* This,VARIANT_BOOL *pbHasCaption) {
+    return This->lpVtbl->get_Has608_708Caption(This,pbHasCaption);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITunerCapEx_get_Has608_708Caption_Proxy(
+    ITunerCapEx* This,
+    VARIANT_BOOL *pbHasCaption);
+void __RPC_STUB ITunerCapEx_get_Has608_708Caption_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ITunerCapEx_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITuner interface
+ */
+#ifndef __ITuner_INTERFACE_DEFINED__
+#define __ITuner_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITuner, 0x28c52640, 0x018a, 0x11d3, 0x9d,0x8e, 0x00,0xc0,0x4f,0x72,0xd9,0x80);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("28c52640-018a-11d3-9d8e-00c04f72d980")
+ITuner : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE get_TuningSpace(
+        ITuningSpace **TuningSpace) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_TuningSpace(
+        ITuningSpace *TuningSpace) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumTuningSpaces(
+        IEnumTuningSpaces **ppEnum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_TuneRequest(
+        ITuneRequest **TuneRequest) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_TuneRequest(
+        ITuneRequest *TuneRequest) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Validate(
+        ITuneRequest *TuneRequest) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_PreferredComponentTypes(
+        IComponentTypes **ComponentTypes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_PreferredComponentTypes(
+        IComponentTypes *ComponentTypes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SignalStrength(
+        LONG *Strength) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE TriggerSignalEvents(
+        LONG Interval) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITuner, 0x28c52640, 0x018a, 0x11d3, 0x9d,0x8e, 0x00,0xc0,0x4f,0x72,0xd9,0x80)
+#endif
+#else
+typedef struct ITunerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITuner* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITuner* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITuner* This);
+
+    /*** ITuner methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_TuningSpace)(
+        ITuner* This,
+        ITuningSpace **TuningSpace);
+
+    HRESULT (STDMETHODCALLTYPE *put_TuningSpace)(
+        ITuner* This,
+        ITuningSpace *TuningSpace);
+
+    HRESULT (STDMETHODCALLTYPE *EnumTuningSpaces)(
+        ITuner* This,
+        IEnumTuningSpaces **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *get_TuneRequest)(
+        ITuner* This,
+        ITuneRequest **TuneRequest);
+
+    HRESULT (STDMETHODCALLTYPE *put_TuneRequest)(
+        ITuner* This,
+        ITuneRequest *TuneRequest);
+
+    HRESULT (STDMETHODCALLTYPE *Validate)(
+        ITuner* This,
+        ITuneRequest *TuneRequest);
+
+    HRESULT (STDMETHODCALLTYPE *get_PreferredComponentTypes)(
+        ITuner* This,
+        IComponentTypes **ComponentTypes);
+
+    HRESULT (STDMETHODCALLTYPE *put_PreferredComponentTypes)(
+        ITuner* This,
+        IComponentTypes *ComponentTypes);
+
+    HRESULT (STDMETHODCALLTYPE *get_SignalStrength)(
+        ITuner* This,
+        LONG *Strength);
+
+    HRESULT (STDMETHODCALLTYPE *TriggerSignalEvents)(
+        ITuner* This,
+        LONG Interval);
+
+    END_INTERFACE
+} ITunerVtbl;
+interface ITuner {
+    CONST_VTBL ITunerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ITuner_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITuner_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITuner_Release(This) (This)->lpVtbl->Release(This)
+/*** ITuner methods ***/
+#define ITuner_get_TuningSpace(This,TuningSpace) (This)->lpVtbl->get_TuningSpace(This,TuningSpace)
+#define ITuner_put_TuningSpace(This,TuningSpace) (This)->lpVtbl->put_TuningSpace(This,TuningSpace)
+#define ITuner_EnumTuningSpaces(This,ppEnum) (This)->lpVtbl->EnumTuningSpaces(This,ppEnum)
+#define ITuner_get_TuneRequest(This,TuneRequest) (This)->lpVtbl->get_TuneRequest(This,TuneRequest)
+#define ITuner_put_TuneRequest(This,TuneRequest) (This)->lpVtbl->put_TuneRequest(This,TuneRequest)
+#define ITuner_Validate(This,TuneRequest) (This)->lpVtbl->Validate(This,TuneRequest)
+#define ITuner_get_PreferredComponentTypes(This,ComponentTypes) (This)->lpVtbl->get_PreferredComponentTypes(This,ComponentTypes)
+#define ITuner_put_PreferredComponentTypes(This,ComponentTypes) (This)->lpVtbl->put_PreferredComponentTypes(This,ComponentTypes)
+#define ITuner_get_SignalStrength(This,Strength) (This)->lpVtbl->get_SignalStrength(This,Strength)
+#define ITuner_TriggerSignalEvents(This,Interval) (This)->lpVtbl->TriggerSignalEvents(This,Interval)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ITuner_QueryInterface(ITuner* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ITuner_AddRef(ITuner* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ITuner_Release(ITuner* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITuner methods ***/
+static FORCEINLINE HRESULT ITuner_get_TuningSpace(ITuner* This,ITuningSpace **TuningSpace) {
+    return This->lpVtbl->get_TuningSpace(This,TuningSpace);
+}
+static FORCEINLINE HRESULT ITuner_put_TuningSpace(ITuner* This,ITuningSpace *TuningSpace) {
+    return This->lpVtbl->put_TuningSpace(This,TuningSpace);
+}
+static FORCEINLINE HRESULT ITuner_EnumTuningSpaces(ITuner* This,IEnumTuningSpaces **ppEnum) {
+    return This->lpVtbl->EnumTuningSpaces(This,ppEnum);
+}
+static FORCEINLINE HRESULT ITuner_get_TuneRequest(ITuner* This,ITuneRequest **TuneRequest) {
+    return This->lpVtbl->get_TuneRequest(This,TuneRequest);
+}
+static FORCEINLINE HRESULT ITuner_put_TuneRequest(ITuner* This,ITuneRequest *TuneRequest) {
+    return This->lpVtbl->put_TuneRequest(This,TuneRequest);
+}
+static FORCEINLINE HRESULT ITuner_Validate(ITuner* This,ITuneRequest *TuneRequest) {
+    return This->lpVtbl->Validate(This,TuneRequest);
+}
+static FORCEINLINE HRESULT ITuner_get_PreferredComponentTypes(ITuner* This,IComponentTypes **ComponentTypes) {
+    return This->lpVtbl->get_PreferredComponentTypes(This,ComponentTypes);
+}
+static FORCEINLINE HRESULT ITuner_put_PreferredComponentTypes(ITuner* This,IComponentTypes *ComponentTypes) {
+    return This->lpVtbl->put_PreferredComponentTypes(This,ComponentTypes);
+}
+static FORCEINLINE HRESULT ITuner_get_SignalStrength(ITuner* This,LONG *Strength) {
+    return This->lpVtbl->get_SignalStrength(This,Strength);
+}
+static FORCEINLINE HRESULT ITuner_TriggerSignalEvents(ITuner* This,LONG Interval) {
+    return This->lpVtbl->TriggerSignalEvents(This,Interval);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITuner_get_TuningSpace_Proxy(
+    ITuner* This,
+    ITuningSpace **TuningSpace);
+void __RPC_STUB ITuner_get_TuningSpace_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuner_put_TuningSpace_Proxy(
+    ITuner* This,
+    ITuningSpace *TuningSpace);
+void __RPC_STUB ITuner_put_TuningSpace_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuner_EnumTuningSpaces_Proxy(
+    ITuner* This,
+    IEnumTuningSpaces **ppEnum);
+void __RPC_STUB ITuner_EnumTuningSpaces_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuner_get_TuneRequest_Proxy(
+    ITuner* This,
+    ITuneRequest **TuneRequest);
+void __RPC_STUB ITuner_get_TuneRequest_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuner_put_TuneRequest_Proxy(
+    ITuner* This,
+    ITuneRequest *TuneRequest);
+void __RPC_STUB ITuner_put_TuneRequest_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuner_Validate_Proxy(
+    ITuner* This,
+    ITuneRequest *TuneRequest);
+void __RPC_STUB ITuner_Validate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuner_get_PreferredComponentTypes_Proxy(
+    ITuner* This,
+    IComponentTypes **ComponentTypes);
+void __RPC_STUB ITuner_get_PreferredComponentTypes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuner_put_PreferredComponentTypes_Proxy(
+    ITuner* This,
+    IComponentTypes *ComponentTypes);
+void __RPC_STUB ITuner_put_PreferredComponentTypes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuner_get_SignalStrength_Proxy(
+    ITuner* This,
+    LONG *Strength);
+void __RPC_STUB ITuner_get_SignalStrength_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITuner_TriggerSignalEvents_Proxy(
+    ITuner* This,
+    LONG Interval);
+void __RPC_STUB ITuner_TriggerSignalEvents_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ITuner_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IScanningTuner interface
+ */
+#ifndef __IScanningTuner_INTERFACE_DEFINED__
+#define __IScanningTuner_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IScanningTuner, 0x1dfd0a5c, 0x0284, 0x11d3, 0x9d,0x8e, 0x00,0xc0,0x4f,0x72,0xd9,0x80);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("1dfd0a5c-0284-11d3-9d8e-00c04f72d980")
+IScanningTuner : public ITuner
+{
+    virtual HRESULT STDMETHODCALLTYPE SeekUp(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SeekDown(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ScanUp(
+        LONG MillisecondsPause) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ScanDown(
+        LONG MillisecondsPause) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AutoProgram(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IScanningTuner, 0x1dfd0a5c, 0x0284, 0x11d3, 0x9d,0x8e, 0x00,0xc0,0x4f,0x72,0xd9,0x80)
+#endif
+#else
+typedef struct IScanningTunerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IScanningTuner* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IScanningTuner* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IScanningTuner* This);
+
+    /*** ITuner methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_TuningSpace)(
+        IScanningTuner* This,
+        ITuningSpace **TuningSpace);
+
+    HRESULT (STDMETHODCALLTYPE *put_TuningSpace)(
+        IScanningTuner* This,
+        ITuningSpace *TuningSpace);
+
+    HRESULT (STDMETHODCALLTYPE *EnumTuningSpaces)(
+        IScanningTuner* This,
+        IEnumTuningSpaces **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *get_TuneRequest)(
+        IScanningTuner* This,
+        ITuneRequest **TuneRequest);
+
+    HRESULT (STDMETHODCALLTYPE *put_TuneRequest)(
+        IScanningTuner* This,
+        ITuneRequest *TuneRequest);
+
+    HRESULT (STDMETHODCALLTYPE *Validate)(
+        IScanningTuner* This,
+        ITuneRequest *TuneRequest);
+
+    HRESULT (STDMETHODCALLTYPE *get_PreferredComponentTypes)(
+        IScanningTuner* This,
+        IComponentTypes **ComponentTypes);
+
+    HRESULT (STDMETHODCALLTYPE *put_PreferredComponentTypes)(
+        IScanningTuner* This,
+        IComponentTypes *ComponentTypes);
+
+    HRESULT (STDMETHODCALLTYPE *get_SignalStrength)(
+        IScanningTuner* This,
+        LONG *Strength);
+
+    HRESULT (STDMETHODCALLTYPE *TriggerSignalEvents)(
+        IScanningTuner* This,
+        LONG Interval);
+
+    /*** IScanningTuner methods ***/
+    HRESULT (STDMETHODCALLTYPE *SeekUp)(
+        IScanningTuner* This);
+
+    HRESULT (STDMETHODCALLTYPE *SeekDown)(
+        IScanningTuner* This);
+
+    HRESULT (STDMETHODCALLTYPE *ScanUp)(
+        IScanningTuner* This,
+        LONG MillisecondsPause);
+
+    HRESULT (STDMETHODCALLTYPE *ScanDown)(
+        IScanningTuner* This,
+        LONG MillisecondsPause);
+
+    HRESULT (STDMETHODCALLTYPE *AutoProgram)(
+        IScanningTuner* This);
+
+    END_INTERFACE
+} IScanningTunerVtbl;
+interface IScanningTuner {
+    CONST_VTBL IScanningTunerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IScanningTuner_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IScanningTuner_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IScanningTuner_Release(This) (This)->lpVtbl->Release(This)
+/*** ITuner methods ***/
+#define IScanningTuner_get_TuningSpace(This,TuningSpace) (This)->lpVtbl->get_TuningSpace(This,TuningSpace)
+#define IScanningTuner_put_TuningSpace(This,TuningSpace) (This)->lpVtbl->put_TuningSpace(This,TuningSpace)
+#define IScanningTuner_EnumTuningSpaces(This,ppEnum) (This)->lpVtbl->EnumTuningSpaces(This,ppEnum)
+#define IScanningTuner_get_TuneRequest(This,TuneRequest) (This)->lpVtbl->get_TuneRequest(This,TuneRequest)
+#define IScanningTuner_put_TuneRequest(This,TuneRequest) (This)->lpVtbl->put_TuneRequest(This,TuneRequest)
+#define IScanningTuner_Validate(This,TuneRequest) (This)->lpVtbl->Validate(This,TuneRequest)
+#define IScanningTuner_get_PreferredComponentTypes(This,ComponentTypes) (This)->lpVtbl->get_PreferredComponentTypes(This,ComponentTypes)
+#define IScanningTuner_put_PreferredComponentTypes(This,ComponentTypes) (This)->lpVtbl->put_PreferredComponentTypes(This,ComponentTypes)
+#define IScanningTuner_get_SignalStrength(This,Strength) (This)->lpVtbl->get_SignalStrength(This,Strength)
+#define IScanningTuner_TriggerSignalEvents(This,Interval) (This)->lpVtbl->TriggerSignalEvents(This,Interval)
+/*** IScanningTuner methods ***/
+#define IScanningTuner_SeekUp(This) (This)->lpVtbl->SeekUp(This)
+#define IScanningTuner_SeekDown(This) (This)->lpVtbl->SeekDown(This)
+#define IScanningTuner_ScanUp(This,MillisecondsPause) (This)->lpVtbl->ScanUp(This,MillisecondsPause)
+#define IScanningTuner_ScanDown(This,MillisecondsPause) (This)->lpVtbl->ScanDown(This,MillisecondsPause)
+#define IScanningTuner_AutoProgram(This) (This)->lpVtbl->AutoProgram(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IScanningTuner_QueryInterface(IScanningTuner* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IScanningTuner_AddRef(IScanningTuner* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IScanningTuner_Release(IScanningTuner* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITuner methods ***/
+static FORCEINLINE HRESULT IScanningTuner_get_TuningSpace(IScanningTuner* This,ITuningSpace **TuningSpace) {
+    return This->lpVtbl->get_TuningSpace(This,TuningSpace);
+}
+static FORCEINLINE HRESULT IScanningTuner_put_TuningSpace(IScanningTuner* This,ITuningSpace *TuningSpace) {
+    return This->lpVtbl->put_TuningSpace(This,TuningSpace);
+}
+static FORCEINLINE HRESULT IScanningTuner_EnumTuningSpaces(IScanningTuner* This,IEnumTuningSpaces **ppEnum) {
+    return This->lpVtbl->EnumTuningSpaces(This,ppEnum);
+}
+static FORCEINLINE HRESULT IScanningTuner_get_TuneRequest(IScanningTuner* This,ITuneRequest **TuneRequest) {
+    return This->lpVtbl->get_TuneRequest(This,TuneRequest);
+}
+static FORCEINLINE HRESULT IScanningTuner_put_TuneRequest(IScanningTuner* This,ITuneRequest *TuneRequest) {
+    return This->lpVtbl->put_TuneRequest(This,TuneRequest);
+}
+static FORCEINLINE HRESULT IScanningTuner_Validate(IScanningTuner* This,ITuneRequest *TuneRequest) {
+    return This->lpVtbl->Validate(This,TuneRequest);
+}
+static FORCEINLINE HRESULT IScanningTuner_get_PreferredComponentTypes(IScanningTuner* This,IComponentTypes **ComponentTypes) {
+    return This->lpVtbl->get_PreferredComponentTypes(This,ComponentTypes);
+}
+static FORCEINLINE HRESULT IScanningTuner_put_PreferredComponentTypes(IScanningTuner* This,IComponentTypes *ComponentTypes) {
+    return This->lpVtbl->put_PreferredComponentTypes(This,ComponentTypes);
+}
+static FORCEINLINE HRESULT IScanningTuner_get_SignalStrength(IScanningTuner* This,LONG *Strength) {
+    return This->lpVtbl->get_SignalStrength(This,Strength);
+}
+static FORCEINLINE HRESULT IScanningTuner_TriggerSignalEvents(IScanningTuner* This,LONG Interval) {
+    return This->lpVtbl->TriggerSignalEvents(This,Interval);
+}
+/*** IScanningTuner methods ***/
+static FORCEINLINE HRESULT IScanningTuner_SeekUp(IScanningTuner* This) {
+    return This->lpVtbl->SeekUp(This);
+}
+static FORCEINLINE HRESULT IScanningTuner_SeekDown(IScanningTuner* This) {
+    return This->lpVtbl->SeekDown(This);
+}
+static FORCEINLINE HRESULT IScanningTuner_ScanUp(IScanningTuner* This,LONG MillisecondsPause) {
+    return This->lpVtbl->ScanUp(This,MillisecondsPause);
+}
+static FORCEINLINE HRESULT IScanningTuner_ScanDown(IScanningTuner* This,LONG MillisecondsPause) {
+    return This->lpVtbl->ScanDown(This,MillisecondsPause);
+}
+static FORCEINLINE HRESULT IScanningTuner_AutoProgram(IScanningTuner* This) {
+    return This->lpVtbl->AutoProgram(This);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IScanningTuner_SeekUp_Proxy(
+    IScanningTuner* This);
+void __RPC_STUB IScanningTuner_SeekUp_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IScanningTuner_SeekDown_Proxy(
+    IScanningTuner* This);
+void __RPC_STUB IScanningTuner_SeekDown_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IScanningTuner_ScanUp_Proxy(
+    IScanningTuner* This,
+    LONG MillisecondsPause);
+void __RPC_STUB IScanningTuner_ScanUp_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IScanningTuner_ScanDown_Proxy(
+    IScanningTuner* This,
+    LONG MillisecondsPause);
+void __RPC_STUB IScanningTuner_ScanDown_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IScanningTuner_AutoProgram_Proxy(
+    IScanningTuner* This);
+void __RPC_STUB IScanningTuner_AutoProgram_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IScanningTuner_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IScanningTunerEx interface
+ */
+#ifndef __IScanningTunerEx_INTERFACE_DEFINED__
+#define __IScanningTunerEx_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IScanningTunerEx, 0x04bbd195, 0x0e2d, 0x4593, 0x9b,0xd5, 0x4f,0x90,0x8b,0xc3,0x3c,0xf5);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("04bbd195-0e2d-4593-9bd5-4f908bc33cf5")
+IScanningTunerEx : public IScanningTuner
+{
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentLocator(
+        ILocator **pILocator) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PerformExhaustiveScan(
+        LONG dwLowerFreq,
+        LONG dwHigherFreq,
+        VARIANT_BOOL bFineTune,
+        HEVENT hEvent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE TerminateCurrentScan(
+        LONG *pcurrentFreq) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ResumeCurrentScan(
+        HEVENT hEvent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTunerScanningCapability(
+        LONG *HardwareAssistedScanning,
+        LONG *NumStandardsSupported,
+        GUID *BroadcastStandards) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTunerStatus(
+        LONG *SecondsLeft,
+        LONG *CurrentLockType,
+        LONG *AutoDetect,
+        LONG *CurrentFreq) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentTunerStandardCapability(
+        GUID CurrentBroadcastStandard,
+        LONG *SettlingTime,
+        LONG *TvStandardsSupported) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetScanSignalTypeFilter(
+        LONG ScanModulationTypes,
+        LONG AnalogVideoStandard) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IScanningTunerEx, 0x04bbd195, 0x0e2d, 0x4593, 0x9b,0xd5, 0x4f,0x90,0x8b,0xc3,0x3c,0xf5)
+#endif
+#else
+typedef struct IScanningTunerExVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IScanningTunerEx* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IScanningTunerEx* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IScanningTunerEx* This);
+
+    /*** ITuner methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_TuningSpace)(
+        IScanningTunerEx* This,
+        ITuningSpace **TuningSpace);
+
+    HRESULT (STDMETHODCALLTYPE *put_TuningSpace)(
+        IScanningTunerEx* This,
+        ITuningSpace *TuningSpace);
+
+    HRESULT (STDMETHODCALLTYPE *EnumTuningSpaces)(
+        IScanningTunerEx* This,
+        IEnumTuningSpaces **ppEnum);
+
+    HRESULT (STDMETHODCALLTYPE *get_TuneRequest)(
+        IScanningTunerEx* This,
+        ITuneRequest **TuneRequest);
+
+    HRESULT (STDMETHODCALLTYPE *put_TuneRequest)(
+        IScanningTunerEx* This,
+        ITuneRequest *TuneRequest);
+
+    HRESULT (STDMETHODCALLTYPE *Validate)(
+        IScanningTunerEx* This,
+        ITuneRequest *TuneRequest);
+
+    HRESULT (STDMETHODCALLTYPE *get_PreferredComponentTypes)(
+        IScanningTunerEx* This,
+        IComponentTypes **ComponentTypes);
+
+    HRESULT (STDMETHODCALLTYPE *put_PreferredComponentTypes)(
+        IScanningTunerEx* This,
+        IComponentTypes *ComponentTypes);
+
+    HRESULT (STDMETHODCALLTYPE *get_SignalStrength)(
+        IScanningTunerEx* This,
+        LONG *Strength);
+
+    HRESULT (STDMETHODCALLTYPE *TriggerSignalEvents)(
+        IScanningTunerEx* This,
+        LONG Interval);
+
+    /*** IScanningTuner methods ***/
+    HRESULT (STDMETHODCALLTYPE *SeekUp)(
+        IScanningTunerEx* This);
+
+    HRESULT (STDMETHODCALLTYPE *SeekDown)(
+        IScanningTunerEx* This);
+
+    HRESULT (STDMETHODCALLTYPE *ScanUp)(
+        IScanningTunerEx* This,
+        LONG MillisecondsPause);
+
+    HRESULT (STDMETHODCALLTYPE *ScanDown)(
+        IScanningTunerEx* This,
+        LONG MillisecondsPause);
+
+    HRESULT (STDMETHODCALLTYPE *AutoProgram)(
+        IScanningTunerEx* This);
+
+    /*** IScanningTunerEx methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetCurrentLocator)(
+        IScanningTunerEx* This,
+        ILocator **pILocator);
+
+    HRESULT (STDMETHODCALLTYPE *PerformExhaustiveScan)(
+        IScanningTunerEx* This,
+        LONG dwLowerFreq,
+        LONG dwHigherFreq,
+        VARIANT_BOOL bFineTune,
+        HEVENT hEvent);
+
+    HRESULT (STDMETHODCALLTYPE *TerminateCurrentScan)(
+        IScanningTunerEx* This,
+        LONG *pcurrentFreq);
+
+    HRESULT (STDMETHODCALLTYPE *ResumeCurrentScan)(
+        IScanningTunerEx* This,
+        HEVENT hEvent);
+
+    HRESULT (STDMETHODCALLTYPE *GetTunerScanningCapability)(
+        IScanningTunerEx* This,
+        LONG *HardwareAssistedScanning,
+        LONG *NumStandardsSupported,
+        GUID *BroadcastStandards);
+
+    HRESULT (STDMETHODCALLTYPE *GetTunerStatus)(
+        IScanningTunerEx* This,
+        LONG *SecondsLeft,
+        LONG *CurrentLockType,
+        LONG *AutoDetect,
+        LONG *CurrentFreq);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentTunerStandardCapability)(
+        IScanningTunerEx* This,
+        GUID CurrentBroadcastStandard,
+        LONG *SettlingTime,
+        LONG *TvStandardsSupported);
+
+    HRESULT (STDMETHODCALLTYPE *SetScanSignalTypeFilter)(
+        IScanningTunerEx* This,
+        LONG ScanModulationTypes,
+        LONG AnalogVideoStandard);
+
+    END_INTERFACE
+} IScanningTunerExVtbl;
+interface IScanningTunerEx {
+    CONST_VTBL IScanningTunerExVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IScanningTunerEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IScanningTunerEx_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IScanningTunerEx_Release(This) (This)->lpVtbl->Release(This)
+/*** ITuner methods ***/
+#define IScanningTunerEx_get_TuningSpace(This,TuningSpace) (This)->lpVtbl->get_TuningSpace(This,TuningSpace)
+#define IScanningTunerEx_put_TuningSpace(This,TuningSpace) (This)->lpVtbl->put_TuningSpace(This,TuningSpace)
+#define IScanningTunerEx_EnumTuningSpaces(This,ppEnum) (This)->lpVtbl->EnumTuningSpaces(This,ppEnum)
+#define IScanningTunerEx_get_TuneRequest(This,TuneRequest) (This)->lpVtbl->get_TuneRequest(This,TuneRequest)
+#define IScanningTunerEx_put_TuneRequest(This,TuneRequest) (This)->lpVtbl->put_TuneRequest(This,TuneRequest)
+#define IScanningTunerEx_Validate(This,TuneRequest) (This)->lpVtbl->Validate(This,TuneRequest)
+#define IScanningTunerEx_get_PreferredComponentTypes(This,ComponentTypes) (This)->lpVtbl->get_PreferredComponentTypes(This,ComponentTypes)
+#define IScanningTunerEx_put_PreferredComponentTypes(This,ComponentTypes) (This)->lpVtbl->put_PreferredComponentTypes(This,ComponentTypes)
+#define IScanningTunerEx_get_SignalStrength(This,Strength) (This)->lpVtbl->get_SignalStrength(This,Strength)
+#define IScanningTunerEx_TriggerSignalEvents(This,Interval) (This)->lpVtbl->TriggerSignalEvents(This,Interval)
+/*** IScanningTuner methods ***/
+#define IScanningTunerEx_SeekUp(This) (This)->lpVtbl->SeekUp(This)
+#define IScanningTunerEx_SeekDown(This) (This)->lpVtbl->SeekDown(This)
+#define IScanningTunerEx_ScanUp(This,MillisecondsPause) (This)->lpVtbl->ScanUp(This,MillisecondsPause)
+#define IScanningTunerEx_ScanDown(This,MillisecondsPause) (This)->lpVtbl->ScanDown(This,MillisecondsPause)
+#define IScanningTunerEx_AutoProgram(This) (This)->lpVtbl->AutoProgram(This)
+/*** IScanningTunerEx methods ***/
+#define IScanningTunerEx_GetCurrentLocator(This,pILocator) (This)->lpVtbl->GetCurrentLocator(This,pILocator)
+#define IScanningTunerEx_PerformExhaustiveScan(This,dwLowerFreq,dwHigherFreq,bFineTune,hEvent) (This)->lpVtbl->PerformExhaustiveScan(This,dwLowerFreq,dwHigherFreq,bFineTune,hEvent)
+#define IScanningTunerEx_TerminateCurrentScan(This,pcurrentFreq) (This)->lpVtbl->TerminateCurrentScan(This,pcurrentFreq)
+#define IScanningTunerEx_ResumeCurrentScan(This,hEvent) (This)->lpVtbl->ResumeCurrentScan(This,hEvent)
+#define IScanningTunerEx_GetTunerScanningCapability(This,HardwareAssistedScanning,NumStandardsSupported,BroadcastStandards) (This)->lpVtbl->GetTunerScanningCapability(This,HardwareAssistedScanning,NumStandardsSupported,BroadcastStandards)
+#define IScanningTunerEx_GetTunerStatus(This,SecondsLeft,CurrentLockType,AutoDetect,CurrentFreq) (This)->lpVtbl->GetTunerStatus(This,SecondsLeft,CurrentLockType,AutoDetect,CurrentFreq)
+#define IScanningTunerEx_GetCurrentTunerStandardCapability(This,CurrentBroadcastStandard,SettlingTime,TvStandardsSupported) (This)->lpVtbl->GetCurrentTunerStandardCapability(This,CurrentBroadcastStandard,SettlingTime,TvStandardsSupported)
+#define IScanningTunerEx_SetScanSignalTypeFilter(This,ScanModulationTypes,AnalogVideoStandard) (This)->lpVtbl->SetScanSignalTypeFilter(This,ScanModulationTypes,AnalogVideoStandard)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IScanningTunerEx_QueryInterface(IScanningTunerEx* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IScanningTunerEx_AddRef(IScanningTunerEx* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IScanningTunerEx_Release(IScanningTunerEx* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITuner methods ***/
+static FORCEINLINE HRESULT IScanningTunerEx_get_TuningSpace(IScanningTunerEx* This,ITuningSpace **TuningSpace) {
+    return This->lpVtbl->get_TuningSpace(This,TuningSpace);
+}
+static FORCEINLINE HRESULT IScanningTunerEx_put_TuningSpace(IScanningTunerEx* This,ITuningSpace *TuningSpace) {
+    return This->lpVtbl->put_TuningSpace(This,TuningSpace);
+}
+static FORCEINLINE HRESULT IScanningTunerEx_EnumTuningSpaces(IScanningTunerEx* This,IEnumTuningSpaces **ppEnum) {
+    return This->lpVtbl->EnumTuningSpaces(This,ppEnum);
+}
+static FORCEINLINE HRESULT IScanningTunerEx_get_TuneRequest(IScanningTunerEx* This,ITuneRequest **TuneRequest) {
+    return This->lpVtbl->get_TuneRequest(This,TuneRequest);
+}
+static FORCEINLINE HRESULT IScanningTunerEx_put_TuneRequest(IScanningTunerEx* This,ITuneRequest *TuneRequest) {
+    return This->lpVtbl->put_TuneRequest(This,TuneRequest);
+}
+static FORCEINLINE HRESULT IScanningTunerEx_Validate(IScanningTunerEx* This,ITuneRequest *TuneRequest) {
+    return This->lpVtbl->Validate(This,TuneRequest);
+}
+static FORCEINLINE HRESULT IScanningTunerEx_get_PreferredComponentTypes(IScanningTunerEx* This,IComponentTypes **ComponentTypes) {
+    return This->lpVtbl->get_PreferredComponentTypes(This,ComponentTypes);
+}
+static FORCEINLINE HRESULT IScanningTunerEx_put_PreferredComponentTypes(IScanningTunerEx* This,IComponentTypes *ComponentTypes) {
+    return This->lpVtbl->put_PreferredComponentTypes(This,ComponentTypes);
+}
+static FORCEINLINE HRESULT IScanningTunerEx_get_SignalStrength(IScanningTunerEx* This,LONG *Strength) {
+    return This->lpVtbl->get_SignalStrength(This,Strength);
+}
+static FORCEINLINE HRESULT IScanningTunerEx_TriggerSignalEvents(IScanningTunerEx* This,LONG Interval) {
+    return This->lpVtbl->TriggerSignalEvents(This,Interval);
+}
+/*** IScanningTuner methods ***/
+static FORCEINLINE HRESULT IScanningTunerEx_SeekUp(IScanningTunerEx* This) {
+    return This->lpVtbl->SeekUp(This);
+}
+static FORCEINLINE HRESULT IScanningTunerEx_SeekDown(IScanningTunerEx* This) {
+    return This->lpVtbl->SeekDown(This);
+}
+static FORCEINLINE HRESULT IScanningTunerEx_ScanUp(IScanningTunerEx* This,LONG MillisecondsPause) {
+    return This->lpVtbl->ScanUp(This,MillisecondsPause);
+}
+static FORCEINLINE HRESULT IScanningTunerEx_ScanDown(IScanningTunerEx* This,LONG MillisecondsPause) {
+    return This->lpVtbl->ScanDown(This,MillisecondsPause);
+}
+static FORCEINLINE HRESULT IScanningTunerEx_AutoProgram(IScanningTunerEx* This) {
+    return This->lpVtbl->AutoProgram(This);
+}
+/*** IScanningTunerEx methods ***/
+static FORCEINLINE HRESULT IScanningTunerEx_GetCurrentLocator(IScanningTunerEx* This,ILocator **pILocator) {
+    return This->lpVtbl->GetCurrentLocator(This,pILocator);
+}
+static FORCEINLINE HRESULT IScanningTunerEx_PerformExhaustiveScan(IScanningTunerEx* This,LONG dwLowerFreq,LONG dwHigherFreq,VARIANT_BOOL bFineTune,HEVENT hEvent) {
+    return This->lpVtbl->PerformExhaustiveScan(This,dwLowerFreq,dwHigherFreq,bFineTune,hEvent);
+}
+static FORCEINLINE HRESULT IScanningTunerEx_TerminateCurrentScan(IScanningTunerEx* This,LONG *pcurrentFreq) {
+    return This->lpVtbl->TerminateCurrentScan(This,pcurrentFreq);
+}
+static FORCEINLINE HRESULT IScanningTunerEx_ResumeCurrentScan(IScanningTunerEx* This,HEVENT hEvent) {
+    return This->lpVtbl->ResumeCurrentScan(This,hEvent);
+}
+static FORCEINLINE HRESULT IScanningTunerEx_GetTunerScanningCapability(IScanningTunerEx* This,LONG *HardwareAssistedScanning,LONG *NumStandardsSupported,GUID *BroadcastStandards) {
+    return This->lpVtbl->GetTunerScanningCapability(This,HardwareAssistedScanning,NumStandardsSupported,BroadcastStandards);
+}
+static FORCEINLINE HRESULT IScanningTunerEx_GetTunerStatus(IScanningTunerEx* This,LONG *SecondsLeft,LONG *CurrentLockType,LONG *AutoDetect,LONG *CurrentFreq) {
+    return This->lpVtbl->GetTunerStatus(This,SecondsLeft,CurrentLockType,AutoDetect,CurrentFreq);
+}
+static FORCEINLINE HRESULT IScanningTunerEx_GetCurrentTunerStandardCapability(IScanningTunerEx* This,GUID CurrentBroadcastStandard,LONG *SettlingTime,LONG *TvStandardsSupported) {
+    return This->lpVtbl->GetCurrentTunerStandardCapability(This,CurrentBroadcastStandard,SettlingTime,TvStandardsSupported);
+}
+static FORCEINLINE HRESULT IScanningTunerEx_SetScanSignalTypeFilter(IScanningTunerEx* This,LONG ScanModulationTypes,LONG AnalogVideoStandard) {
+    return This->lpVtbl->SetScanSignalTypeFilter(This,ScanModulationTypes,AnalogVideoStandard);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IScanningTunerEx_GetCurrentLocator_Proxy(
+    IScanningTunerEx* This,
+    ILocator **pILocator);
+void __RPC_STUB IScanningTunerEx_GetCurrentLocator_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IScanningTunerEx_PerformExhaustiveScan_Proxy(
+    IScanningTunerEx* This,
+    LONG dwLowerFreq,
+    LONG dwHigherFreq,
+    VARIANT_BOOL bFineTune,
+    HEVENT hEvent);
+void __RPC_STUB IScanningTunerEx_PerformExhaustiveScan_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IScanningTunerEx_TerminateCurrentScan_Proxy(
+    IScanningTunerEx* This,
+    LONG *pcurrentFreq);
+void __RPC_STUB IScanningTunerEx_TerminateCurrentScan_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IScanningTunerEx_ResumeCurrentScan_Proxy(
+    IScanningTunerEx* This,
+    HEVENT hEvent);
+void __RPC_STUB IScanningTunerEx_ResumeCurrentScan_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IScanningTunerEx_GetTunerScanningCapability_Proxy(
+    IScanningTunerEx* This,
+    LONG *HardwareAssistedScanning,
+    LONG *NumStandardsSupported,
+    GUID *BroadcastStandards);
+void __RPC_STUB IScanningTunerEx_GetTunerScanningCapability_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IScanningTunerEx_GetTunerStatus_Proxy(
+    IScanningTunerEx* This,
+    LONG *SecondsLeft,
+    LONG *CurrentLockType,
+    LONG *AutoDetect,
+    LONG *CurrentFreq);
+void __RPC_STUB IScanningTunerEx_GetTunerStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IScanningTunerEx_GetCurrentTunerStandardCapability_Proxy(
+    IScanningTunerEx* This,
+    GUID CurrentBroadcastStandard,
+    LONG *SettlingTime,
+    LONG *TvStandardsSupported);
+void __RPC_STUB IScanningTunerEx_GetCurrentTunerStandardCapability_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IScanningTunerEx_SetScanSignalTypeFilter_Proxy(
+    IScanningTunerEx* This,
+    LONG ScanModulationTypes,
+    LONG AnalogVideoStandard);
+void __RPC_STUB IScanningTunerEx_SetScanSignalTypeFilter_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IScanningTunerEx_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IComponentType interface
+ */
+#ifndef __IComponentType_INTERFACE_DEFINED__
+#define __IComponentType_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IComponentType, 0x6a340dc0, 0x0311, 0x11d3, 0x9d,0x8e, 0x00,0xc0,0x4f,0x72,0xd9,0x80);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("6a340dc0-0311-11d3-9d8e-00c04f72d980")
+IComponentType : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Category(
+        ComponentCategory *Category) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Category(
+        ComponentCategory Category) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_MediaMajorType(
+        BSTR *MediaMajorType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_MediaMajorType(
+        BSTR MediaMajorType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get__MediaMajorType(
+        GUID *MediaMajorTypeGuid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put__MediaMajorType(
+        REFCLSID MediaMajorTypeGuid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_MediaSubType(
+        BSTR *MediaSubType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_MediaSubType(
+        BSTR MediaSubType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get__MediaSubType(
+        GUID *MediaSubTypeGuid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put__MediaSubType(
+        REFCLSID MediaSubTypeGuid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_MediaFormatType(
+        BSTR *MediaFormatType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_MediaFormatType(
+        BSTR MediaFormatType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get__MediaFormatType(
+        GUID *MediaFormatTypeGuid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put__MediaFormatType(
+        REFCLSID MediaFormatTypeGuid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_MediaType(
+        AM_MEDIA_TYPE *MediaType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_MediaType(
+        AM_MEDIA_TYPE *MediaType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IComponentType **NewCT) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IComponentType, 0x6a340dc0, 0x0311, 0x11d3, 0x9d,0x8e, 0x00,0xc0,0x4f,0x72,0xd9,0x80)
+#endif
+#else
+typedef struct IComponentTypeVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IComponentType* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IComponentType* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IComponentType* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IComponentType* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IComponentType* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IComponentType* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IComponentType* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IComponentType methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Category)(
+        IComponentType* This,
+        ComponentCategory *Category);
+
+    HRESULT (STDMETHODCALLTYPE *put_Category)(
+        IComponentType* This,
+        ComponentCategory Category);
+
+    HRESULT (STDMETHODCALLTYPE *get_MediaMajorType)(
+        IComponentType* This,
+        BSTR *MediaMajorType);
+
+    HRESULT (STDMETHODCALLTYPE *put_MediaMajorType)(
+        IComponentType* This,
+        BSTR MediaMajorType);
+
+    HRESULT (STDMETHODCALLTYPE *get__MediaMajorType)(
+        IComponentType* This,
+        GUID *MediaMajorTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put__MediaMajorType)(
+        IComponentType* This,
+        REFCLSID MediaMajorTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *get_MediaSubType)(
+        IComponentType* This,
+        BSTR *MediaSubType);
+
+    HRESULT (STDMETHODCALLTYPE *put_MediaSubType)(
+        IComponentType* This,
+        BSTR MediaSubType);
+
+    HRESULT (STDMETHODCALLTYPE *get__MediaSubType)(
+        IComponentType* This,
+        GUID *MediaSubTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put__MediaSubType)(
+        IComponentType* This,
+        REFCLSID MediaSubTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *get_MediaFormatType)(
+        IComponentType* This,
+        BSTR *MediaFormatType);
+
+    HRESULT (STDMETHODCALLTYPE *put_MediaFormatType)(
+        IComponentType* This,
+        BSTR MediaFormatType);
+
+    HRESULT (STDMETHODCALLTYPE *get__MediaFormatType)(
+        IComponentType* This,
+        GUID *MediaFormatTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put__MediaFormatType)(
+        IComponentType* This,
+        REFCLSID MediaFormatTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *get_MediaType)(
+        IComponentType* This,
+        AM_MEDIA_TYPE *MediaType);
+
+    HRESULT (STDMETHODCALLTYPE *put_MediaType)(
+        IComponentType* This,
+        AM_MEDIA_TYPE *MediaType);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IComponentType* This,
+        IComponentType **NewCT);
+
+    END_INTERFACE
+} IComponentTypeVtbl;
+interface IComponentType {
+    CONST_VTBL IComponentTypeVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
 #define IComponentType_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define IComponentType_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define IComponentType_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
 #define IComponentType_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
 #define IComponentType_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
 #define IComponentType_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
 #define IComponentType_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
-#define IComponentType_Clone(This,ppNewCT) (This)->lpVtbl->Clone(This,ppNewCT)
-#define IComponentType_get__MediaFormatType(This,pMediaFormatType) (This)->lpVtbl->get__MediaFormatType(This,pMediaFormatType)
-#define IComponentType_get__MediaMajorType(This,MediaMajorType) (This)->lpVtbl->get__MediaMajorType(This,MediaMajorType)
-#define IComponentType_get__MediaSubType(This,pMediaSubType) (This)->lpVtbl->get__MediaSubType(This,pMediaSubType)
-#define IComponentType_get_Category(This,pCategory) (This)->lpVtbl->get_Category(This,pCategory)
-#define IComponentType_get_MediaFormatType(This,pMediaFormatType) (This)->lpVtbl->get_MediaFormatType(This,pMediaFormatType)
-#define IComponentType_get_MediaMajorType(This,pMediaMajorType) (This)->lpVtbl->get_MediaMajorType(This,pMediaMajorType)
-#define IComponentType_get_MediaSubType(This,pMediaSubType) (This)->lpVtbl->get_MediaSubType(This,pMediaSubType)
-#define IComponentType_get_MediaType(This,pMediaType) (This)->lpVtbl->get_MediaType(This,pMediaType)
-#define IComponentType_put__MediaFormatType(This,MediaFormatType) (This)->lpVtbl->put__MediaFormatType(This,MediaFormatType)
-#define IComponentType_put__MediaMajorType(This,MediaMajorType) (This)->lpVtbl->put__MediaMajorType(This,MediaMajorType)
-#define IComponentType_put__MediaSubType(This,MediaSubType) (This)->lpVtbl->put__MediaSubType(This,MediaSubType)
+/*** IComponentType methods ***/
+#define IComponentType_get_Category(This,Category) (This)->lpVtbl->get_Category(This,Category)
 #define IComponentType_put_Category(This,Category) (This)->lpVtbl->put_Category(This,Category)
-#define IComponentType_put_MediaFormatType(This,MediaFormatType) (This)->lpVtbl->put_MediaFormatType(This,MediaFormatType)
+#define IComponentType_get_MediaMajorType(This,MediaMajorType) (This)->lpVtbl->get_MediaMajorType(This,MediaMajorType)
 #define IComponentType_put_MediaMajorType(This,MediaMajorType) (This)->lpVtbl->put_MediaMajorType(This,MediaMajorType)
+#define IComponentType_get__MediaMajorType(This,MediaMajorTypeGuid) (This)->lpVtbl->get__MediaMajorType(This,MediaMajorTypeGuid)
+#define IComponentType_put__MediaMajorType(This,MediaMajorTypeGuid) (This)->lpVtbl->put__MediaMajorType(This,MediaMajorTypeGuid)
+#define IComponentType_get_MediaSubType(This,MediaSubType) (This)->lpVtbl->get_MediaSubType(This,MediaSubType)
 #define IComponentType_put_MediaSubType(This,MediaSubType) (This)->lpVtbl->put_MediaSubType(This,MediaSubType)
+#define IComponentType_get__MediaSubType(This,MediaSubTypeGuid) (This)->lpVtbl->get__MediaSubType(This,MediaSubTypeGuid)
+#define IComponentType_put__MediaSubType(This,MediaSubTypeGuid) (This)->lpVtbl->put__MediaSubType(This,MediaSubTypeGuid)
+#define IComponentType_get_MediaFormatType(This,MediaFormatType) (This)->lpVtbl->get_MediaFormatType(This,MediaFormatType)
+#define IComponentType_put_MediaFormatType(This,MediaFormatType) (This)->lpVtbl->put_MediaFormatType(This,MediaFormatType)
+#define IComponentType_get__MediaFormatType(This,MediaFormatTypeGuid) (This)->lpVtbl->get__MediaFormatType(This,MediaFormatTypeGuid)
+#define IComponentType_put__MediaFormatType(This,MediaFormatTypeGuid) (This)->lpVtbl->put__MediaFormatType(This,MediaFormatTypeGuid)
+#define IComponentType_get_MediaType(This,MediaType) (This)->lpVtbl->get_MediaType(This,MediaType)
 #define IComponentType_put_MediaType(This,MediaType) (This)->lpVtbl->put_MediaType(This,MediaType)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IEnumComponentTypes
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
+#define IComponentType_Clone(This,NewCT) (This)->lpVtbl->Clone(This,NewCT)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IComponentType_QueryInterface(IComponentType* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IComponentType_AddRef(IComponentType* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IComponentType_Release(IComponentType* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IComponentType_GetTypeInfoCount(IComponentType* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IComponentType_GetTypeInfo(IComponentType* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IComponentType_GetIDsOfNames(IComponentType* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IComponentType_Invoke(IComponentType* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IComponentType methods ***/
+static FORCEINLINE HRESULT IComponentType_get_Category(IComponentType* This,ComponentCategory *Category) {
+    return This->lpVtbl->get_Category(This,Category);
+}
+static FORCEINLINE HRESULT IComponentType_put_Category(IComponentType* This,ComponentCategory Category) {
+    return This->lpVtbl->put_Category(This,Category);
+}
+static FORCEINLINE HRESULT IComponentType_get_MediaMajorType(IComponentType* This,BSTR *MediaMajorType) {
+    return This->lpVtbl->get_MediaMajorType(This,MediaMajorType);
+}
+static FORCEINLINE HRESULT IComponentType_put_MediaMajorType(IComponentType* This,BSTR MediaMajorType) {
+    return This->lpVtbl->put_MediaMajorType(This,MediaMajorType);
+}
+static FORCEINLINE HRESULT IComponentType_get__MediaMajorType(IComponentType* This,GUID *MediaMajorTypeGuid) {
+    return This->lpVtbl->get__MediaMajorType(This,MediaMajorTypeGuid);
+}
+static FORCEINLINE HRESULT IComponentType_put__MediaMajorType(IComponentType* This,REFCLSID MediaMajorTypeGuid) {
+    return This->lpVtbl->put__MediaMajorType(This,MediaMajorTypeGuid);
+}
+static FORCEINLINE HRESULT IComponentType_get_MediaSubType(IComponentType* This,BSTR *MediaSubType) {
+    return This->lpVtbl->get_MediaSubType(This,MediaSubType);
+}
+static FORCEINLINE HRESULT IComponentType_put_MediaSubType(IComponentType* This,BSTR MediaSubType) {
+    return This->lpVtbl->put_MediaSubType(This,MediaSubType);
+}
+static FORCEINLINE HRESULT IComponentType_get__MediaSubType(IComponentType* This,GUID *MediaSubTypeGuid) {
+    return This->lpVtbl->get__MediaSubType(This,MediaSubTypeGuid);
+}
+static FORCEINLINE HRESULT IComponentType_put__MediaSubType(IComponentType* This,REFCLSID MediaSubTypeGuid) {
+    return This->lpVtbl->put__MediaSubType(This,MediaSubTypeGuid);
+}
+static FORCEINLINE HRESULT IComponentType_get_MediaFormatType(IComponentType* This,BSTR *MediaFormatType) {
+    return This->lpVtbl->get_MediaFormatType(This,MediaFormatType);
+}
+static FORCEINLINE HRESULT IComponentType_put_MediaFormatType(IComponentType* This,BSTR MediaFormatType) {
+    return This->lpVtbl->put_MediaFormatType(This,MediaFormatType);
+}
+static FORCEINLINE HRESULT IComponentType_get__MediaFormatType(IComponentType* This,GUID *MediaFormatTypeGuid) {
+    return This->lpVtbl->get__MediaFormatType(This,MediaFormatTypeGuid);
+}
+static FORCEINLINE HRESULT IComponentType_put__MediaFormatType(IComponentType* This,REFCLSID MediaFormatTypeGuid) {
+    return This->lpVtbl->put__MediaFormatType(This,MediaFormatTypeGuid);
+}
+static FORCEINLINE HRESULT IComponentType_get_MediaType(IComponentType* This,AM_MEDIA_TYPE *MediaType) {
+    return This->lpVtbl->get_MediaType(This,MediaType);
+}
+static FORCEINLINE HRESULT IComponentType_put_MediaType(IComponentType* This,AM_MEDIA_TYPE *MediaType) {
+    return This->lpVtbl->put_MediaType(This,MediaType);
+}
+static FORCEINLINE HRESULT IComponentType_Clone(IComponentType* This,IComponentType **NewCT) {
+    return This->lpVtbl->Clone(This,NewCT);
+}
 #endif
-DECLARE_INTERFACE_(IEnumComponentTypes,IUnknown)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IComponentType_get_Category_Proxy(
+    IComponentType* This,
+    ComponentCategory *Category);
+void __RPC_STUB IComponentType_get_Category_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentType_put_Category_Proxy(
+    IComponentType* This,
+    ComponentCategory Category);
+void __RPC_STUB IComponentType_put_Category_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentType_get_MediaMajorType_Proxy(
+    IComponentType* This,
+    BSTR *MediaMajorType);
+void __RPC_STUB IComponentType_get_MediaMajorType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentType_put_MediaMajorType_Proxy(
+    IComponentType* This,
+    BSTR MediaMajorType);
+void __RPC_STUB IComponentType_put_MediaMajorType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentType_get__MediaMajorType_Proxy(
+    IComponentType* This,
+    GUID *MediaMajorTypeGuid);
+void __RPC_STUB IComponentType_get__MediaMajorType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentType_put__MediaMajorType_Proxy(
+    IComponentType* This,
+    REFCLSID MediaMajorTypeGuid);
+void __RPC_STUB IComponentType_put__MediaMajorType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentType_get_MediaSubType_Proxy(
+    IComponentType* This,
+    BSTR *MediaSubType);
+void __RPC_STUB IComponentType_get_MediaSubType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentType_put_MediaSubType_Proxy(
+    IComponentType* This,
+    BSTR MediaSubType);
+void __RPC_STUB IComponentType_put_MediaSubType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentType_get__MediaSubType_Proxy(
+    IComponentType* This,
+    GUID *MediaSubTypeGuid);
+void __RPC_STUB IComponentType_get__MediaSubType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentType_put__MediaSubType_Proxy(
+    IComponentType* This,
+    REFCLSID MediaSubTypeGuid);
+void __RPC_STUB IComponentType_put__MediaSubType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentType_get_MediaFormatType_Proxy(
+    IComponentType* This,
+    BSTR *MediaFormatType);
+void __RPC_STUB IComponentType_get_MediaFormatType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentType_put_MediaFormatType_Proxy(
+    IComponentType* This,
+    BSTR MediaFormatType);
+void __RPC_STUB IComponentType_put_MediaFormatType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentType_get__MediaFormatType_Proxy(
+    IComponentType* This,
+    GUID *MediaFormatTypeGuid);
+void __RPC_STUB IComponentType_get__MediaFormatType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentType_put__MediaFormatType_Proxy(
+    IComponentType* This,
+    REFCLSID MediaFormatTypeGuid);
+void __RPC_STUB IComponentType_put__MediaFormatType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentType_get_MediaType_Proxy(
+    IComponentType* This,
+    AM_MEDIA_TYPE *MediaType);
+void __RPC_STUB IComponentType_get_MediaType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentType_put_MediaType_Proxy(
+    IComponentType* This,
+    AM_MEDIA_TYPE *MediaType);
+void __RPC_STUB IComponentType_put_MediaType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentType_Clone_Proxy(
+    IComponentType* This,
+    IComponentType **NewCT);
+void __RPC_STUB IComponentType_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IComponentType_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ILanguageComponentType interface
+ */
+#ifndef __ILanguageComponentType_INTERFACE_DEFINED__
+#define __ILanguageComponentType_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ILanguageComponentType, 0xb874c8ba, 0x0fa2, 0x11d3, 0x9d,0x8e, 0x00,0xc0,0x4f,0x72,0xd9,0x80);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("b874c8ba-0fa2-11d3-9d8e-00c04f72d980")
+ILanguageComponentType : public IComponentType
 {
+    virtual HRESULT STDMETHODCALLTYPE get_LangID(
+        LONG *LangID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_LangID(
+        LONG LangID) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ILanguageComponentType, 0xb874c8ba, 0x0fa2, 0x11d3, 0x9d,0x8e, 0x00,0xc0,0x4f,0x72,0xd9,0x80)
+#endif
+#else
+typedef struct ILanguageComponentTypeVtbl {
     BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ILanguageComponentType* This,
+        REFIID riid,
+        void **ppvObject);
 
-    /* IEnumComponentTypes methods */
-    STDMETHOD_(HRESULT,Clone)(THIS_ IEnumComponentTypes **ppEnum) PURE;
-    STDMETHOD_(HRESULT,Next)(THIS_ ULONG celt,IComponentType **pprgelt,ULONG *pceltFetched) PURE;
-    STDMETHOD_(HRESULT,Reset)(THIS) PURE;
-    STDMETHOD_(HRESULT,Skip)(THIS_ ULONG celt) PURE;
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ILanguageComponentType* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ILanguageComponentType* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        ILanguageComponentType* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        ILanguageComponentType* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        ILanguageComponentType* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        ILanguageComponentType* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IComponentType methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Category)(
+        ILanguageComponentType* This,
+        ComponentCategory *Category);
+
+    HRESULT (STDMETHODCALLTYPE *put_Category)(
+        ILanguageComponentType* This,
+        ComponentCategory Category);
+
+    HRESULT (STDMETHODCALLTYPE *get_MediaMajorType)(
+        ILanguageComponentType* This,
+        BSTR *MediaMajorType);
+
+    HRESULT (STDMETHODCALLTYPE *put_MediaMajorType)(
+        ILanguageComponentType* This,
+        BSTR MediaMajorType);
+
+    HRESULT (STDMETHODCALLTYPE *get__MediaMajorType)(
+        ILanguageComponentType* This,
+        GUID *MediaMajorTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put__MediaMajorType)(
+        ILanguageComponentType* This,
+        REFCLSID MediaMajorTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *get_MediaSubType)(
+        ILanguageComponentType* This,
+        BSTR *MediaSubType);
+
+    HRESULT (STDMETHODCALLTYPE *put_MediaSubType)(
+        ILanguageComponentType* This,
+        BSTR MediaSubType);
+
+    HRESULT (STDMETHODCALLTYPE *get__MediaSubType)(
+        ILanguageComponentType* This,
+        GUID *MediaSubTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put__MediaSubType)(
+        ILanguageComponentType* This,
+        REFCLSID MediaSubTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *get_MediaFormatType)(
+        ILanguageComponentType* This,
+        BSTR *MediaFormatType);
+
+    HRESULT (STDMETHODCALLTYPE *put_MediaFormatType)(
+        ILanguageComponentType* This,
+        BSTR MediaFormatType);
+
+    HRESULT (STDMETHODCALLTYPE *get__MediaFormatType)(
+        ILanguageComponentType* This,
+        GUID *MediaFormatTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put__MediaFormatType)(
+        ILanguageComponentType* This,
+        REFCLSID MediaFormatTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *get_MediaType)(
+        ILanguageComponentType* This,
+        AM_MEDIA_TYPE *MediaType);
+
+    HRESULT (STDMETHODCALLTYPE *put_MediaType)(
+        ILanguageComponentType* This,
+        AM_MEDIA_TYPE *MediaType);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        ILanguageComponentType* This,
+        IComponentType **NewCT);
+
+    /*** ILanguageComponentType methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_LangID)(
+        ILanguageComponentType* This,
+        LONG *LangID);
+
+    HRESULT (STDMETHODCALLTYPE *put_LangID)(
+        ILanguageComponentType* This,
+        LONG LangID);
 
     END_INTERFACE
+} ILanguageComponentTypeVtbl;
+interface ILanguageComponentType {
+    CONST_VTBL ILanguageComponentTypeVtbl* lpVtbl;
 };
+
 #ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ILanguageComponentType_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ILanguageComponentType_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ILanguageComponentType_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define ILanguageComponentType_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define ILanguageComponentType_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define ILanguageComponentType_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define ILanguageComponentType_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IComponentType methods ***/
+#define ILanguageComponentType_get_Category(This,Category) (This)->lpVtbl->get_Category(This,Category)
+#define ILanguageComponentType_put_Category(This,Category) (This)->lpVtbl->put_Category(This,Category)
+#define ILanguageComponentType_get_MediaMajorType(This,MediaMajorType) (This)->lpVtbl->get_MediaMajorType(This,MediaMajorType)
+#define ILanguageComponentType_put_MediaMajorType(This,MediaMajorType) (This)->lpVtbl->put_MediaMajorType(This,MediaMajorType)
+#define ILanguageComponentType_get__MediaMajorType(This,MediaMajorTypeGuid) (This)->lpVtbl->get__MediaMajorType(This,MediaMajorTypeGuid)
+#define ILanguageComponentType_put__MediaMajorType(This,MediaMajorTypeGuid) (This)->lpVtbl->put__MediaMajorType(This,MediaMajorTypeGuid)
+#define ILanguageComponentType_get_MediaSubType(This,MediaSubType) (This)->lpVtbl->get_MediaSubType(This,MediaSubType)
+#define ILanguageComponentType_put_MediaSubType(This,MediaSubType) (This)->lpVtbl->put_MediaSubType(This,MediaSubType)
+#define ILanguageComponentType_get__MediaSubType(This,MediaSubTypeGuid) (This)->lpVtbl->get__MediaSubType(This,MediaSubTypeGuid)
+#define ILanguageComponentType_put__MediaSubType(This,MediaSubTypeGuid) (This)->lpVtbl->put__MediaSubType(This,MediaSubTypeGuid)
+#define ILanguageComponentType_get_MediaFormatType(This,MediaFormatType) (This)->lpVtbl->get_MediaFormatType(This,MediaFormatType)
+#define ILanguageComponentType_put_MediaFormatType(This,MediaFormatType) (This)->lpVtbl->put_MediaFormatType(This,MediaFormatType)
+#define ILanguageComponentType_get__MediaFormatType(This,MediaFormatTypeGuid) (This)->lpVtbl->get__MediaFormatType(This,MediaFormatTypeGuid)
+#define ILanguageComponentType_put__MediaFormatType(This,MediaFormatTypeGuid) (This)->lpVtbl->put__MediaFormatType(This,MediaFormatTypeGuid)
+#define ILanguageComponentType_get_MediaType(This,MediaType) (This)->lpVtbl->get_MediaType(This,MediaType)
+#define ILanguageComponentType_put_MediaType(This,MediaType) (This)->lpVtbl->put_MediaType(This,MediaType)
+#define ILanguageComponentType_Clone(This,NewCT) (This)->lpVtbl->Clone(This,NewCT)
+/*** ILanguageComponentType methods ***/
+#define ILanguageComponentType_get_LangID(This,LangID) (This)->lpVtbl->get_LangID(This,LangID)
+#define ILanguageComponentType_put_LangID(This,LangID) (This)->lpVtbl->put_LangID(This,LangID)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ILanguageComponentType_QueryInterface(ILanguageComponentType* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ILanguageComponentType_AddRef(ILanguageComponentType* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ILanguageComponentType_Release(ILanguageComponentType* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT ILanguageComponentType_GetTypeInfoCount(ILanguageComponentType* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT ILanguageComponentType_GetTypeInfo(ILanguageComponentType* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT ILanguageComponentType_GetIDsOfNames(ILanguageComponentType* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT ILanguageComponentType_Invoke(ILanguageComponentType* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IComponentType methods ***/
+static FORCEINLINE HRESULT ILanguageComponentType_get_Category(ILanguageComponentType* This,ComponentCategory *Category) {
+    return This->lpVtbl->get_Category(This,Category);
+}
+static FORCEINLINE HRESULT ILanguageComponentType_put_Category(ILanguageComponentType* This,ComponentCategory Category) {
+    return This->lpVtbl->put_Category(This,Category);
+}
+static FORCEINLINE HRESULT ILanguageComponentType_get_MediaMajorType(ILanguageComponentType* This,BSTR *MediaMajorType) {
+    return This->lpVtbl->get_MediaMajorType(This,MediaMajorType);
+}
+static FORCEINLINE HRESULT ILanguageComponentType_put_MediaMajorType(ILanguageComponentType* This,BSTR MediaMajorType) {
+    return This->lpVtbl->put_MediaMajorType(This,MediaMajorType);
+}
+static FORCEINLINE HRESULT ILanguageComponentType_get__MediaMajorType(ILanguageComponentType* This,GUID *MediaMajorTypeGuid) {
+    return This->lpVtbl->get__MediaMajorType(This,MediaMajorTypeGuid);
+}
+static FORCEINLINE HRESULT ILanguageComponentType_put__MediaMajorType(ILanguageComponentType* This,REFCLSID MediaMajorTypeGuid) {
+    return This->lpVtbl->put__MediaMajorType(This,MediaMajorTypeGuid);
+}
+static FORCEINLINE HRESULT ILanguageComponentType_get_MediaSubType(ILanguageComponentType* This,BSTR *MediaSubType) {
+    return This->lpVtbl->get_MediaSubType(This,MediaSubType);
+}
+static FORCEINLINE HRESULT ILanguageComponentType_put_MediaSubType(ILanguageComponentType* This,BSTR MediaSubType) {
+    return This->lpVtbl->put_MediaSubType(This,MediaSubType);
+}
+static FORCEINLINE HRESULT ILanguageComponentType_get__MediaSubType(ILanguageComponentType* This,GUID *MediaSubTypeGuid) {
+    return This->lpVtbl->get__MediaSubType(This,MediaSubTypeGuid);
+}
+static FORCEINLINE HRESULT ILanguageComponentType_put__MediaSubType(ILanguageComponentType* This,REFCLSID MediaSubTypeGuid) {
+    return This->lpVtbl->put__MediaSubType(This,MediaSubTypeGuid);
+}
+static FORCEINLINE HRESULT ILanguageComponentType_get_MediaFormatType(ILanguageComponentType* This,BSTR *MediaFormatType) {
+    return This->lpVtbl->get_MediaFormatType(This,MediaFormatType);
+}
+static FORCEINLINE HRESULT ILanguageComponentType_put_MediaFormatType(ILanguageComponentType* This,BSTR MediaFormatType) {
+    return This->lpVtbl->put_MediaFormatType(This,MediaFormatType);
+}
+static FORCEINLINE HRESULT ILanguageComponentType_get__MediaFormatType(ILanguageComponentType* This,GUID *MediaFormatTypeGuid) {
+    return This->lpVtbl->get__MediaFormatType(This,MediaFormatTypeGuid);
+}
+static FORCEINLINE HRESULT ILanguageComponentType_put__MediaFormatType(ILanguageComponentType* This,REFCLSID MediaFormatTypeGuid) {
+    return This->lpVtbl->put__MediaFormatType(This,MediaFormatTypeGuid);
+}
+static FORCEINLINE HRESULT ILanguageComponentType_get_MediaType(ILanguageComponentType* This,AM_MEDIA_TYPE *MediaType) {
+    return This->lpVtbl->get_MediaType(This,MediaType);
+}
+static FORCEINLINE HRESULT ILanguageComponentType_put_MediaType(ILanguageComponentType* This,AM_MEDIA_TYPE *MediaType) {
+    return This->lpVtbl->put_MediaType(This,MediaType);
+}
+static FORCEINLINE HRESULT ILanguageComponentType_Clone(ILanguageComponentType* This,IComponentType **NewCT) {
+    return This->lpVtbl->Clone(This,NewCT);
+}
+/*** ILanguageComponentType methods ***/
+static FORCEINLINE HRESULT ILanguageComponentType_get_LangID(ILanguageComponentType* This,LONG *LangID) {
+    return This->lpVtbl->get_LangID(This,LangID);
+}
+static FORCEINLINE HRESULT ILanguageComponentType_put_LangID(ILanguageComponentType* This,LONG LangID) {
+    return This->lpVtbl->put_LangID(This,LangID);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ILanguageComponentType_get_LangID_Proxy(
+    ILanguageComponentType* This,
+    LONG *LangID);
+void __RPC_STUB ILanguageComponentType_get_LangID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILanguageComponentType_put_LangID_Proxy(
+    ILanguageComponentType* This,
+    LONG LangID);
+void __RPC_STUB ILanguageComponentType_put_LangID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ILanguageComponentType_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMPEG2ComponentType interface
+ */
+#ifndef __IMPEG2ComponentType_INTERFACE_DEFINED__
+#define __IMPEG2ComponentType_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IMPEG2ComponentType, 0x2c073d84, 0xb51c, 0x48c9, 0xaa,0x9f, 0x68,0x97,0x1e,0x1f,0x6e,0x38);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("2c073d84-b51c-48c9-aa9f-68971e1f6e38")
+IMPEG2ComponentType : public ILanguageComponentType
+{
+    virtual HRESULT STDMETHODCALLTYPE get_StreamType(
+        MPEG2StreamType *MP2StreamType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_StreamType(
+        MPEG2StreamType MP2StreamType) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMPEG2ComponentType, 0x2c073d84, 0xb51c, 0x48c9, 0xaa,0x9f, 0x68,0x97,0x1e,0x1f,0x6e,0x38)
+#endif
+#else
+typedef struct IMPEG2ComponentTypeVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMPEG2ComponentType* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMPEG2ComponentType* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMPEG2ComponentType* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IMPEG2ComponentType* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IMPEG2ComponentType* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IMPEG2ComponentType* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IMPEG2ComponentType* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IComponentType methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Category)(
+        IMPEG2ComponentType* This,
+        ComponentCategory *Category);
+
+    HRESULT (STDMETHODCALLTYPE *put_Category)(
+        IMPEG2ComponentType* This,
+        ComponentCategory Category);
+
+    HRESULT (STDMETHODCALLTYPE *get_MediaMajorType)(
+        IMPEG2ComponentType* This,
+        BSTR *MediaMajorType);
+
+    HRESULT (STDMETHODCALLTYPE *put_MediaMajorType)(
+        IMPEG2ComponentType* This,
+        BSTR MediaMajorType);
+
+    HRESULT (STDMETHODCALLTYPE *get__MediaMajorType)(
+        IMPEG2ComponentType* This,
+        GUID *MediaMajorTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put__MediaMajorType)(
+        IMPEG2ComponentType* This,
+        REFCLSID MediaMajorTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *get_MediaSubType)(
+        IMPEG2ComponentType* This,
+        BSTR *MediaSubType);
+
+    HRESULT (STDMETHODCALLTYPE *put_MediaSubType)(
+        IMPEG2ComponentType* This,
+        BSTR MediaSubType);
+
+    HRESULT (STDMETHODCALLTYPE *get__MediaSubType)(
+        IMPEG2ComponentType* This,
+        GUID *MediaSubTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put__MediaSubType)(
+        IMPEG2ComponentType* This,
+        REFCLSID MediaSubTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *get_MediaFormatType)(
+        IMPEG2ComponentType* This,
+        BSTR *MediaFormatType);
+
+    HRESULT (STDMETHODCALLTYPE *put_MediaFormatType)(
+        IMPEG2ComponentType* This,
+        BSTR MediaFormatType);
+
+    HRESULT (STDMETHODCALLTYPE *get__MediaFormatType)(
+        IMPEG2ComponentType* This,
+        GUID *MediaFormatTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put__MediaFormatType)(
+        IMPEG2ComponentType* This,
+        REFCLSID MediaFormatTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *get_MediaType)(
+        IMPEG2ComponentType* This,
+        AM_MEDIA_TYPE *MediaType);
+
+    HRESULT (STDMETHODCALLTYPE *put_MediaType)(
+        IMPEG2ComponentType* This,
+        AM_MEDIA_TYPE *MediaType);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IMPEG2ComponentType* This,
+        IComponentType **NewCT);
+
+    /*** ILanguageComponentType methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_LangID)(
+        IMPEG2ComponentType* This,
+        LONG *LangID);
+
+    HRESULT (STDMETHODCALLTYPE *put_LangID)(
+        IMPEG2ComponentType* This,
+        LONG LangID);
+
+    /*** IMPEG2ComponentType methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_StreamType)(
+        IMPEG2ComponentType* This,
+        MPEG2StreamType *MP2StreamType);
+
+    HRESULT (STDMETHODCALLTYPE *put_StreamType)(
+        IMPEG2ComponentType* This,
+        MPEG2StreamType MP2StreamType);
+
+    END_INTERFACE
+} IMPEG2ComponentTypeVtbl;
+interface IMPEG2ComponentType {
+    CONST_VTBL IMPEG2ComponentTypeVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMPEG2ComponentType_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMPEG2ComponentType_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMPEG2ComponentType_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IMPEG2ComponentType_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IMPEG2ComponentType_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IMPEG2ComponentType_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IMPEG2ComponentType_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IComponentType methods ***/
+#define IMPEG2ComponentType_get_Category(This,Category) (This)->lpVtbl->get_Category(This,Category)
+#define IMPEG2ComponentType_put_Category(This,Category) (This)->lpVtbl->put_Category(This,Category)
+#define IMPEG2ComponentType_get_MediaMajorType(This,MediaMajorType) (This)->lpVtbl->get_MediaMajorType(This,MediaMajorType)
+#define IMPEG2ComponentType_put_MediaMajorType(This,MediaMajorType) (This)->lpVtbl->put_MediaMajorType(This,MediaMajorType)
+#define IMPEG2ComponentType_get__MediaMajorType(This,MediaMajorTypeGuid) (This)->lpVtbl->get__MediaMajorType(This,MediaMajorTypeGuid)
+#define IMPEG2ComponentType_put__MediaMajorType(This,MediaMajorTypeGuid) (This)->lpVtbl->put__MediaMajorType(This,MediaMajorTypeGuid)
+#define IMPEG2ComponentType_get_MediaSubType(This,MediaSubType) (This)->lpVtbl->get_MediaSubType(This,MediaSubType)
+#define IMPEG2ComponentType_put_MediaSubType(This,MediaSubType) (This)->lpVtbl->put_MediaSubType(This,MediaSubType)
+#define IMPEG2ComponentType_get__MediaSubType(This,MediaSubTypeGuid) (This)->lpVtbl->get__MediaSubType(This,MediaSubTypeGuid)
+#define IMPEG2ComponentType_put__MediaSubType(This,MediaSubTypeGuid) (This)->lpVtbl->put__MediaSubType(This,MediaSubTypeGuid)
+#define IMPEG2ComponentType_get_MediaFormatType(This,MediaFormatType) (This)->lpVtbl->get_MediaFormatType(This,MediaFormatType)
+#define IMPEG2ComponentType_put_MediaFormatType(This,MediaFormatType) (This)->lpVtbl->put_MediaFormatType(This,MediaFormatType)
+#define IMPEG2ComponentType_get__MediaFormatType(This,MediaFormatTypeGuid) (This)->lpVtbl->get__MediaFormatType(This,MediaFormatTypeGuid)
+#define IMPEG2ComponentType_put__MediaFormatType(This,MediaFormatTypeGuid) (This)->lpVtbl->put__MediaFormatType(This,MediaFormatTypeGuid)
+#define IMPEG2ComponentType_get_MediaType(This,MediaType) (This)->lpVtbl->get_MediaType(This,MediaType)
+#define IMPEG2ComponentType_put_MediaType(This,MediaType) (This)->lpVtbl->put_MediaType(This,MediaType)
+#define IMPEG2ComponentType_Clone(This,NewCT) (This)->lpVtbl->Clone(This,NewCT)
+/*** ILanguageComponentType methods ***/
+#define IMPEG2ComponentType_get_LangID(This,LangID) (This)->lpVtbl->get_LangID(This,LangID)
+#define IMPEG2ComponentType_put_LangID(This,LangID) (This)->lpVtbl->put_LangID(This,LangID)
+/*** IMPEG2ComponentType methods ***/
+#define IMPEG2ComponentType_get_StreamType(This,MP2StreamType) (This)->lpVtbl->get_StreamType(This,MP2StreamType)
+#define IMPEG2ComponentType_put_StreamType(This,MP2StreamType) (This)->lpVtbl->put_StreamType(This,MP2StreamType)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IMPEG2ComponentType_QueryInterface(IMPEG2ComponentType* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IMPEG2ComponentType_AddRef(IMPEG2ComponentType* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IMPEG2ComponentType_Release(IMPEG2ComponentType* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IMPEG2ComponentType_GetTypeInfoCount(IMPEG2ComponentType* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IMPEG2ComponentType_GetTypeInfo(IMPEG2ComponentType* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IMPEG2ComponentType_GetIDsOfNames(IMPEG2ComponentType* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IMPEG2ComponentType_Invoke(IMPEG2ComponentType* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IComponentType methods ***/
+static FORCEINLINE HRESULT IMPEG2ComponentType_get_Category(IMPEG2ComponentType* This,ComponentCategory *Category) {
+    return This->lpVtbl->get_Category(This,Category);
+}
+static FORCEINLINE HRESULT IMPEG2ComponentType_put_Category(IMPEG2ComponentType* This,ComponentCategory Category) {
+    return This->lpVtbl->put_Category(This,Category);
+}
+static FORCEINLINE HRESULT IMPEG2ComponentType_get_MediaMajorType(IMPEG2ComponentType* This,BSTR *MediaMajorType) {
+    return This->lpVtbl->get_MediaMajorType(This,MediaMajorType);
+}
+static FORCEINLINE HRESULT IMPEG2ComponentType_put_MediaMajorType(IMPEG2ComponentType* This,BSTR MediaMajorType) {
+    return This->lpVtbl->put_MediaMajorType(This,MediaMajorType);
+}
+static FORCEINLINE HRESULT IMPEG2ComponentType_get__MediaMajorType(IMPEG2ComponentType* This,GUID *MediaMajorTypeGuid) {
+    return This->lpVtbl->get__MediaMajorType(This,MediaMajorTypeGuid);
+}
+static FORCEINLINE HRESULT IMPEG2ComponentType_put__MediaMajorType(IMPEG2ComponentType* This,REFCLSID MediaMajorTypeGuid) {
+    return This->lpVtbl->put__MediaMajorType(This,MediaMajorTypeGuid);
+}
+static FORCEINLINE HRESULT IMPEG2ComponentType_get_MediaSubType(IMPEG2ComponentType* This,BSTR *MediaSubType) {
+    return This->lpVtbl->get_MediaSubType(This,MediaSubType);
+}
+static FORCEINLINE HRESULT IMPEG2ComponentType_put_MediaSubType(IMPEG2ComponentType* This,BSTR MediaSubType) {
+    return This->lpVtbl->put_MediaSubType(This,MediaSubType);
+}
+static FORCEINLINE HRESULT IMPEG2ComponentType_get__MediaSubType(IMPEG2ComponentType* This,GUID *MediaSubTypeGuid) {
+    return This->lpVtbl->get__MediaSubType(This,MediaSubTypeGuid);
+}
+static FORCEINLINE HRESULT IMPEG2ComponentType_put__MediaSubType(IMPEG2ComponentType* This,REFCLSID MediaSubTypeGuid) {
+    return This->lpVtbl->put__MediaSubType(This,MediaSubTypeGuid);
+}
+static FORCEINLINE HRESULT IMPEG2ComponentType_get_MediaFormatType(IMPEG2ComponentType* This,BSTR *MediaFormatType) {
+    return This->lpVtbl->get_MediaFormatType(This,MediaFormatType);
+}
+static FORCEINLINE HRESULT IMPEG2ComponentType_put_MediaFormatType(IMPEG2ComponentType* This,BSTR MediaFormatType) {
+    return This->lpVtbl->put_MediaFormatType(This,MediaFormatType);
+}
+static FORCEINLINE HRESULT IMPEG2ComponentType_get__MediaFormatType(IMPEG2ComponentType* This,GUID *MediaFormatTypeGuid) {
+    return This->lpVtbl->get__MediaFormatType(This,MediaFormatTypeGuid);
+}
+static FORCEINLINE HRESULT IMPEG2ComponentType_put__MediaFormatType(IMPEG2ComponentType* This,REFCLSID MediaFormatTypeGuid) {
+    return This->lpVtbl->put__MediaFormatType(This,MediaFormatTypeGuid);
+}
+static FORCEINLINE HRESULT IMPEG2ComponentType_get_MediaType(IMPEG2ComponentType* This,AM_MEDIA_TYPE *MediaType) {
+    return This->lpVtbl->get_MediaType(This,MediaType);
+}
+static FORCEINLINE HRESULT IMPEG2ComponentType_put_MediaType(IMPEG2ComponentType* This,AM_MEDIA_TYPE *MediaType) {
+    return This->lpVtbl->put_MediaType(This,MediaType);
+}
+static FORCEINLINE HRESULT IMPEG2ComponentType_Clone(IMPEG2ComponentType* This,IComponentType **NewCT) {
+    return This->lpVtbl->Clone(This,NewCT);
+}
+/*** ILanguageComponentType methods ***/
+static FORCEINLINE HRESULT IMPEG2ComponentType_get_LangID(IMPEG2ComponentType* This,LONG *LangID) {
+    return This->lpVtbl->get_LangID(This,LangID);
+}
+static FORCEINLINE HRESULT IMPEG2ComponentType_put_LangID(IMPEG2ComponentType* This,LONG LangID) {
+    return This->lpVtbl->put_LangID(This,LangID);
+}
+/*** IMPEG2ComponentType methods ***/
+static FORCEINLINE HRESULT IMPEG2ComponentType_get_StreamType(IMPEG2ComponentType* This,MPEG2StreamType *MP2StreamType) {
+    return This->lpVtbl->get_StreamType(This,MP2StreamType);
+}
+static FORCEINLINE HRESULT IMPEG2ComponentType_put_StreamType(IMPEG2ComponentType* This,MPEG2StreamType MP2StreamType) {
+    return This->lpVtbl->put_StreamType(This,MP2StreamType);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IMPEG2ComponentType_get_StreamType_Proxy(
+    IMPEG2ComponentType* This,
+    MPEG2StreamType *MP2StreamType);
+void __RPC_STUB IMPEG2ComponentType_get_StreamType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMPEG2ComponentType_put_StreamType_Proxy(
+    IMPEG2ComponentType* This,
+    MPEG2StreamType MP2StreamType);
+void __RPC_STUB IMPEG2ComponentType_put_StreamType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IMPEG2ComponentType_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IATSCComponentType interface
+ */
+#ifndef __IATSCComponentType_INTERFACE_DEFINED__
+#define __IATSCComponentType_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IATSCComponentType, 0xfc189e4d, 0x7bd4, 0x4125, 0xb3,0xb3, 0x3a,0x76,0xa3,0x32,0xcc,0x96);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("fc189e4d-7bd4-4125-b3b3-3a76a332cc96")
+IATSCComponentType : public IMPEG2ComponentType
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Flags(
+        LONG *Flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Flags(
+        LONG flags) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IATSCComponentType, 0xfc189e4d, 0x7bd4, 0x4125, 0xb3,0xb3, 0x3a,0x76,0xa3,0x32,0xcc,0x96)
+#endif
+#else
+typedef struct IATSCComponentTypeVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IATSCComponentType* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IATSCComponentType* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IATSCComponentType* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IATSCComponentType* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IATSCComponentType* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IATSCComponentType* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IATSCComponentType* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IComponentType methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Category)(
+        IATSCComponentType* This,
+        ComponentCategory *Category);
+
+    HRESULT (STDMETHODCALLTYPE *put_Category)(
+        IATSCComponentType* This,
+        ComponentCategory Category);
+
+    HRESULT (STDMETHODCALLTYPE *get_MediaMajorType)(
+        IATSCComponentType* This,
+        BSTR *MediaMajorType);
+
+    HRESULT (STDMETHODCALLTYPE *put_MediaMajorType)(
+        IATSCComponentType* This,
+        BSTR MediaMajorType);
+
+    HRESULT (STDMETHODCALLTYPE *get__MediaMajorType)(
+        IATSCComponentType* This,
+        GUID *MediaMajorTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put__MediaMajorType)(
+        IATSCComponentType* This,
+        REFCLSID MediaMajorTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *get_MediaSubType)(
+        IATSCComponentType* This,
+        BSTR *MediaSubType);
+
+    HRESULT (STDMETHODCALLTYPE *put_MediaSubType)(
+        IATSCComponentType* This,
+        BSTR MediaSubType);
+
+    HRESULT (STDMETHODCALLTYPE *get__MediaSubType)(
+        IATSCComponentType* This,
+        GUID *MediaSubTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put__MediaSubType)(
+        IATSCComponentType* This,
+        REFCLSID MediaSubTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *get_MediaFormatType)(
+        IATSCComponentType* This,
+        BSTR *MediaFormatType);
+
+    HRESULT (STDMETHODCALLTYPE *put_MediaFormatType)(
+        IATSCComponentType* This,
+        BSTR MediaFormatType);
+
+    HRESULT (STDMETHODCALLTYPE *get__MediaFormatType)(
+        IATSCComponentType* This,
+        GUID *MediaFormatTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put__MediaFormatType)(
+        IATSCComponentType* This,
+        REFCLSID MediaFormatTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *get_MediaType)(
+        IATSCComponentType* This,
+        AM_MEDIA_TYPE *MediaType);
+
+    HRESULT (STDMETHODCALLTYPE *put_MediaType)(
+        IATSCComponentType* This,
+        AM_MEDIA_TYPE *MediaType);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IATSCComponentType* This,
+        IComponentType **NewCT);
+
+    /*** ILanguageComponentType methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_LangID)(
+        IATSCComponentType* This,
+        LONG *LangID);
+
+    HRESULT (STDMETHODCALLTYPE *put_LangID)(
+        IATSCComponentType* This,
+        LONG LangID);
+
+    /*** IMPEG2ComponentType methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_StreamType)(
+        IATSCComponentType* This,
+        MPEG2StreamType *MP2StreamType);
+
+    HRESULT (STDMETHODCALLTYPE *put_StreamType)(
+        IATSCComponentType* This,
+        MPEG2StreamType MP2StreamType);
+
+    /*** IATSCComponentType methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Flags)(
+        IATSCComponentType* This,
+        LONG *Flags);
+
+    HRESULT (STDMETHODCALLTYPE *put_Flags)(
+        IATSCComponentType* This,
+        LONG flags);
+
+    END_INTERFACE
+} IATSCComponentTypeVtbl;
+interface IATSCComponentType {
+    CONST_VTBL IATSCComponentTypeVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IATSCComponentType_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IATSCComponentType_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IATSCComponentType_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IATSCComponentType_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IATSCComponentType_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IATSCComponentType_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IATSCComponentType_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IComponentType methods ***/
+#define IATSCComponentType_get_Category(This,Category) (This)->lpVtbl->get_Category(This,Category)
+#define IATSCComponentType_put_Category(This,Category) (This)->lpVtbl->put_Category(This,Category)
+#define IATSCComponentType_get_MediaMajorType(This,MediaMajorType) (This)->lpVtbl->get_MediaMajorType(This,MediaMajorType)
+#define IATSCComponentType_put_MediaMajorType(This,MediaMajorType) (This)->lpVtbl->put_MediaMajorType(This,MediaMajorType)
+#define IATSCComponentType_get__MediaMajorType(This,MediaMajorTypeGuid) (This)->lpVtbl->get__MediaMajorType(This,MediaMajorTypeGuid)
+#define IATSCComponentType_put__MediaMajorType(This,MediaMajorTypeGuid) (This)->lpVtbl->put__MediaMajorType(This,MediaMajorTypeGuid)
+#define IATSCComponentType_get_MediaSubType(This,MediaSubType) (This)->lpVtbl->get_MediaSubType(This,MediaSubType)
+#define IATSCComponentType_put_MediaSubType(This,MediaSubType) (This)->lpVtbl->put_MediaSubType(This,MediaSubType)
+#define IATSCComponentType_get__MediaSubType(This,MediaSubTypeGuid) (This)->lpVtbl->get__MediaSubType(This,MediaSubTypeGuid)
+#define IATSCComponentType_put__MediaSubType(This,MediaSubTypeGuid) (This)->lpVtbl->put__MediaSubType(This,MediaSubTypeGuid)
+#define IATSCComponentType_get_MediaFormatType(This,MediaFormatType) (This)->lpVtbl->get_MediaFormatType(This,MediaFormatType)
+#define IATSCComponentType_put_MediaFormatType(This,MediaFormatType) (This)->lpVtbl->put_MediaFormatType(This,MediaFormatType)
+#define IATSCComponentType_get__MediaFormatType(This,MediaFormatTypeGuid) (This)->lpVtbl->get__MediaFormatType(This,MediaFormatTypeGuid)
+#define IATSCComponentType_put__MediaFormatType(This,MediaFormatTypeGuid) (This)->lpVtbl->put__MediaFormatType(This,MediaFormatTypeGuid)
+#define IATSCComponentType_get_MediaType(This,MediaType) (This)->lpVtbl->get_MediaType(This,MediaType)
+#define IATSCComponentType_put_MediaType(This,MediaType) (This)->lpVtbl->put_MediaType(This,MediaType)
+#define IATSCComponentType_Clone(This,NewCT) (This)->lpVtbl->Clone(This,NewCT)
+/*** ILanguageComponentType methods ***/
+#define IATSCComponentType_get_LangID(This,LangID) (This)->lpVtbl->get_LangID(This,LangID)
+#define IATSCComponentType_put_LangID(This,LangID) (This)->lpVtbl->put_LangID(This,LangID)
+/*** IMPEG2ComponentType methods ***/
+#define IATSCComponentType_get_StreamType(This,MP2StreamType) (This)->lpVtbl->get_StreamType(This,MP2StreamType)
+#define IATSCComponentType_put_StreamType(This,MP2StreamType) (This)->lpVtbl->put_StreamType(This,MP2StreamType)
+/*** IATSCComponentType methods ***/
+#define IATSCComponentType_get_Flags(This,Flags) (This)->lpVtbl->get_Flags(This,Flags)
+#define IATSCComponentType_put_Flags(This,flags) (This)->lpVtbl->put_Flags(This,flags)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IATSCComponentType_QueryInterface(IATSCComponentType* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IATSCComponentType_AddRef(IATSCComponentType* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IATSCComponentType_Release(IATSCComponentType* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IATSCComponentType_GetTypeInfoCount(IATSCComponentType* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IATSCComponentType_GetTypeInfo(IATSCComponentType* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IATSCComponentType_GetIDsOfNames(IATSCComponentType* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IATSCComponentType_Invoke(IATSCComponentType* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IComponentType methods ***/
+static FORCEINLINE HRESULT IATSCComponentType_get_Category(IATSCComponentType* This,ComponentCategory *Category) {
+    return This->lpVtbl->get_Category(This,Category);
+}
+static FORCEINLINE HRESULT IATSCComponentType_put_Category(IATSCComponentType* This,ComponentCategory Category) {
+    return This->lpVtbl->put_Category(This,Category);
+}
+static FORCEINLINE HRESULT IATSCComponentType_get_MediaMajorType(IATSCComponentType* This,BSTR *MediaMajorType) {
+    return This->lpVtbl->get_MediaMajorType(This,MediaMajorType);
+}
+static FORCEINLINE HRESULT IATSCComponentType_put_MediaMajorType(IATSCComponentType* This,BSTR MediaMajorType) {
+    return This->lpVtbl->put_MediaMajorType(This,MediaMajorType);
+}
+static FORCEINLINE HRESULT IATSCComponentType_get__MediaMajorType(IATSCComponentType* This,GUID *MediaMajorTypeGuid) {
+    return This->lpVtbl->get__MediaMajorType(This,MediaMajorTypeGuid);
+}
+static FORCEINLINE HRESULT IATSCComponentType_put__MediaMajorType(IATSCComponentType* This,REFCLSID MediaMajorTypeGuid) {
+    return This->lpVtbl->put__MediaMajorType(This,MediaMajorTypeGuid);
+}
+static FORCEINLINE HRESULT IATSCComponentType_get_MediaSubType(IATSCComponentType* This,BSTR *MediaSubType) {
+    return This->lpVtbl->get_MediaSubType(This,MediaSubType);
+}
+static FORCEINLINE HRESULT IATSCComponentType_put_MediaSubType(IATSCComponentType* This,BSTR MediaSubType) {
+    return This->lpVtbl->put_MediaSubType(This,MediaSubType);
+}
+static FORCEINLINE HRESULT IATSCComponentType_get__MediaSubType(IATSCComponentType* This,GUID *MediaSubTypeGuid) {
+    return This->lpVtbl->get__MediaSubType(This,MediaSubTypeGuid);
+}
+static FORCEINLINE HRESULT IATSCComponentType_put__MediaSubType(IATSCComponentType* This,REFCLSID MediaSubTypeGuid) {
+    return This->lpVtbl->put__MediaSubType(This,MediaSubTypeGuid);
+}
+static FORCEINLINE HRESULT IATSCComponentType_get_MediaFormatType(IATSCComponentType* This,BSTR *MediaFormatType) {
+    return This->lpVtbl->get_MediaFormatType(This,MediaFormatType);
+}
+static FORCEINLINE HRESULT IATSCComponentType_put_MediaFormatType(IATSCComponentType* This,BSTR MediaFormatType) {
+    return This->lpVtbl->put_MediaFormatType(This,MediaFormatType);
+}
+static FORCEINLINE HRESULT IATSCComponentType_get__MediaFormatType(IATSCComponentType* This,GUID *MediaFormatTypeGuid) {
+    return This->lpVtbl->get__MediaFormatType(This,MediaFormatTypeGuid);
+}
+static FORCEINLINE HRESULT IATSCComponentType_put__MediaFormatType(IATSCComponentType* This,REFCLSID MediaFormatTypeGuid) {
+    return This->lpVtbl->put__MediaFormatType(This,MediaFormatTypeGuid);
+}
+static FORCEINLINE HRESULT IATSCComponentType_get_MediaType(IATSCComponentType* This,AM_MEDIA_TYPE *MediaType) {
+    return This->lpVtbl->get_MediaType(This,MediaType);
+}
+static FORCEINLINE HRESULT IATSCComponentType_put_MediaType(IATSCComponentType* This,AM_MEDIA_TYPE *MediaType) {
+    return This->lpVtbl->put_MediaType(This,MediaType);
+}
+static FORCEINLINE HRESULT IATSCComponentType_Clone(IATSCComponentType* This,IComponentType **NewCT) {
+    return This->lpVtbl->Clone(This,NewCT);
+}
+/*** ILanguageComponentType methods ***/
+static FORCEINLINE HRESULT IATSCComponentType_get_LangID(IATSCComponentType* This,LONG *LangID) {
+    return This->lpVtbl->get_LangID(This,LangID);
+}
+static FORCEINLINE HRESULT IATSCComponentType_put_LangID(IATSCComponentType* This,LONG LangID) {
+    return This->lpVtbl->put_LangID(This,LangID);
+}
+/*** IMPEG2ComponentType methods ***/
+static FORCEINLINE HRESULT IATSCComponentType_get_StreamType(IATSCComponentType* This,MPEG2StreamType *MP2StreamType) {
+    return This->lpVtbl->get_StreamType(This,MP2StreamType);
+}
+static FORCEINLINE HRESULT IATSCComponentType_put_StreamType(IATSCComponentType* This,MPEG2StreamType MP2StreamType) {
+    return This->lpVtbl->put_StreamType(This,MP2StreamType);
+}
+/*** IATSCComponentType methods ***/
+static FORCEINLINE HRESULT IATSCComponentType_get_Flags(IATSCComponentType* This,LONG *Flags) {
+    return This->lpVtbl->get_Flags(This,Flags);
+}
+static FORCEINLINE HRESULT IATSCComponentType_put_Flags(IATSCComponentType* This,LONG flags) {
+    return This->lpVtbl->put_Flags(This,flags);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IATSCComponentType_get_Flags_Proxy(
+    IATSCComponentType* This,
+    LONG *Flags);
+void __RPC_STUB IATSCComponentType_get_Flags_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IATSCComponentType_put_Flags_Proxy(
+    IATSCComponentType* This,
+    LONG flags);
+void __RPC_STUB IATSCComponentType_put_Flags_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IATSCComponentType_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumComponentTypes interface
+ */
+#ifndef __IEnumComponentTypes_INTERFACE_DEFINED__
+#define __IEnumComponentTypes_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IEnumComponentTypes, 0x8a674b4a, 0x1f63, 0x11d3, 0xb6,0x4c, 0x00,0xc0,0x4f,0x79,0x49,0x8e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("8a674b4a-1f63-11d3-b64c-00c04f79498e")
+IEnumComponentTypes : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Next(
+        ULONG celt,
+        IComponentType **rgelt,
+        ULONG *pceltFetched) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Skip(
+        ULONG celt) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IEnumComponentTypes **ppEnum) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IEnumComponentTypes, 0x8a674b4a, 0x1f63, 0x11d3, 0xb6,0x4c, 0x00,0xc0,0x4f,0x79,0x49,0x8e)
+#endif
+#else
+typedef struct IEnumComponentTypesVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IEnumComponentTypes* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IEnumComponentTypes* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IEnumComponentTypes* This);
+
+    /*** IEnumComponentTypes methods ***/
+    HRESULT (STDMETHODCALLTYPE *Next)(
+        IEnumComponentTypes* This,
+        ULONG celt,
+        IComponentType **rgelt,
+        ULONG *pceltFetched);
+
+    HRESULT (STDMETHODCALLTYPE *Skip)(
+        IEnumComponentTypes* This,
+        ULONG celt);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        IEnumComponentTypes* This);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IEnumComponentTypes* This,
+        IEnumComponentTypes **ppEnum);
+
+    END_INTERFACE
+} IEnumComponentTypesVtbl;
+interface IEnumComponentTypes {
+    CONST_VTBL IEnumComponentTypesVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
 #define IEnumComponentTypes_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define IEnumComponentTypes_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define IEnumComponentTypes_Release(This) (This)->lpVtbl->Release(This)
-#define IEnumComponentTypes_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)
-#define IEnumComponentTypes_Next(This,celt,pprgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,pprgelt,pceltFetched)
-#define IEnumComponentTypes_Reset() (This)->lpVtbl->Reset(This)
+/*** IEnumComponentTypes methods ***/
+#define IEnumComponentTypes_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)
 #define IEnumComponentTypes_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
-#endif /*COBJMACROS*/
+#define IEnumComponentTypes_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumComponentTypes_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IEnumComponentTypes_QueryInterface(IEnumComponentTypes* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IEnumComponentTypes_AddRef(IEnumComponentTypes* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IEnumComponentTypes_Release(IEnumComponentTypes* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IEnumComponentTypes methods ***/
+static FORCEINLINE HRESULT IEnumComponentTypes_Next(IEnumComponentTypes* This,ULONG celt,IComponentType **rgelt,ULONG *pceltFetched) {
+    return This->lpVtbl->Next(This,celt,rgelt,pceltFetched);
+}
+static FORCEINLINE HRESULT IEnumComponentTypes_Skip(IEnumComponentTypes* This,ULONG celt) {
+    return This->lpVtbl->Skip(This,celt);
+}
+static FORCEINLINE HRESULT IEnumComponentTypes_Reset(IEnumComponentTypes* This) {
+    return This->lpVtbl->Reset(This);
+}
+static FORCEINLINE HRESULT IEnumComponentTypes_Clone(IEnumComponentTypes* This,IEnumComponentTypes **ppEnum) {
+    return This->lpVtbl->Clone(This,ppEnum);
+}
+#endif
+#endif
 
-#endif /*__INC_TUNER__*/
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumComponentTypes_Next_Proxy(
+    IEnumComponentTypes* This,
+    ULONG celt,
+    IComponentType **rgelt,
+    ULONG *pceltFetched);
+void __RPC_STUB IEnumComponentTypes_Next_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumComponentTypes_Skip_Proxy(
+    IEnumComponentTypes* This,
+    ULONG celt);
+void __RPC_STUB IEnumComponentTypes_Skip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumComponentTypes_Reset_Proxy(
+    IEnumComponentTypes* This);
+void __RPC_STUB IEnumComponentTypes_Reset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumComponentTypes_Clone_Proxy(
+    IEnumComponentTypes* This,
+    IEnumComponentTypes **ppEnum);
+void __RPC_STUB IEnumComponentTypes_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IEnumComponentTypes_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IComponentTypes interface
+ */
+#ifndef __IComponentTypes_INTERFACE_DEFINED__
+#define __IComponentTypes_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IComponentTypes, 0x0dc13d4a, 0x0313, 0x11d3, 0x9d,0x8e, 0x00,0xc0,0x4f,0x72,0xd9,0x80);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("0dc13d4a-0313-11d3-9d8e-00c04f72d980")
+IComponentTypes : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Count(
+        LONG *Count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
+        IEnumVARIANT **ppNewEnum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumComponentTypes(
+        IEnumComponentTypes **ppNewEnum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Item(
+        VARIANT Index,
+        IComponentType **ComponentType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Item(
+        VARIANT Index,
+        IComponentType *ComponentType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Add(
+        IComponentType *ComponentType,
+        VARIANT *NewIndex) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Remove(
+        VARIANT Index) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IComponentTypes **NewList) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IComponentTypes, 0x0dc13d4a, 0x0313, 0x11d3, 0x9d,0x8e, 0x00,0xc0,0x4f,0x72,0xd9,0x80)
+#endif
+#else
+typedef struct IComponentTypesVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IComponentTypes* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IComponentTypes* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IComponentTypes* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IComponentTypes* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IComponentTypes* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IComponentTypes* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IComponentTypes* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IComponentTypes methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Count)(
+        IComponentTypes* This,
+        LONG *Count);
+
+    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
+        IComponentTypes* This,
+        IEnumVARIANT **ppNewEnum);
+
+    HRESULT (STDMETHODCALLTYPE *EnumComponentTypes)(
+        IComponentTypes* This,
+        IEnumComponentTypes **ppNewEnum);
+
+    HRESULT (STDMETHODCALLTYPE *get_Item)(
+        IComponentTypes* This,
+        VARIANT Index,
+        IComponentType **ComponentType);
+
+    HRESULT (STDMETHODCALLTYPE *put_Item)(
+        IComponentTypes* This,
+        VARIANT Index,
+        IComponentType *ComponentType);
+
+    HRESULT (STDMETHODCALLTYPE *Add)(
+        IComponentTypes* This,
+        IComponentType *ComponentType,
+        VARIANT *NewIndex);
+
+    HRESULT (STDMETHODCALLTYPE *Remove)(
+        IComponentTypes* This,
+        VARIANT Index);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IComponentTypes* This,
+        IComponentTypes **NewList);
+
+    END_INTERFACE
+} IComponentTypesVtbl;
+interface IComponentTypes {
+    CONST_VTBL IComponentTypesVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IComponentTypes_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IComponentTypes_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IComponentTypes_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IComponentTypes_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IComponentTypes_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IComponentTypes_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IComponentTypes_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IComponentTypes methods ***/
+#define IComponentTypes_get_Count(This,Count) (This)->lpVtbl->get_Count(This,Count)
+#define IComponentTypes_get__NewEnum(This,ppNewEnum) (This)->lpVtbl->get__NewEnum(This,ppNewEnum)
+#define IComponentTypes_EnumComponentTypes(This,ppNewEnum) (This)->lpVtbl->EnumComponentTypes(This,ppNewEnum)
+#define IComponentTypes_get_Item(This,Index,ComponentType) (This)->lpVtbl->get_Item(This,Index,ComponentType)
+#define IComponentTypes_put_Item(This,Index,ComponentType) (This)->lpVtbl->put_Item(This,Index,ComponentType)
+#define IComponentTypes_Add(This,ComponentType,NewIndex) (This)->lpVtbl->Add(This,ComponentType,NewIndex)
+#define IComponentTypes_Remove(This,Index) (This)->lpVtbl->Remove(This,Index)
+#define IComponentTypes_Clone(This,NewList) (This)->lpVtbl->Clone(This,NewList)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IComponentTypes_QueryInterface(IComponentTypes* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IComponentTypes_AddRef(IComponentTypes* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IComponentTypes_Release(IComponentTypes* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IComponentTypes_GetTypeInfoCount(IComponentTypes* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IComponentTypes_GetTypeInfo(IComponentTypes* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IComponentTypes_GetIDsOfNames(IComponentTypes* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IComponentTypes_Invoke(IComponentTypes* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IComponentTypes methods ***/
+static FORCEINLINE HRESULT IComponentTypes_get_Count(IComponentTypes* This,LONG *Count) {
+    return This->lpVtbl->get_Count(This,Count);
+}
+static FORCEINLINE HRESULT IComponentTypes_get__NewEnum(IComponentTypes* This,IEnumVARIANT **ppNewEnum) {
+    return This->lpVtbl->get__NewEnum(This,ppNewEnum);
+}
+static FORCEINLINE HRESULT IComponentTypes_EnumComponentTypes(IComponentTypes* This,IEnumComponentTypes **ppNewEnum) {
+    return This->lpVtbl->EnumComponentTypes(This,ppNewEnum);
+}
+static FORCEINLINE HRESULT IComponentTypes_get_Item(IComponentTypes* This,VARIANT Index,IComponentType **ComponentType) {
+    return This->lpVtbl->get_Item(This,Index,ComponentType);
+}
+static FORCEINLINE HRESULT IComponentTypes_put_Item(IComponentTypes* This,VARIANT Index,IComponentType *ComponentType) {
+    return This->lpVtbl->put_Item(This,Index,ComponentType);
+}
+static FORCEINLINE HRESULT IComponentTypes_Add(IComponentTypes* This,IComponentType *ComponentType,VARIANT *NewIndex) {
+    return This->lpVtbl->Add(This,ComponentType,NewIndex);
+}
+static FORCEINLINE HRESULT IComponentTypes_Remove(IComponentTypes* This,VARIANT Index) {
+    return This->lpVtbl->Remove(This,Index);
+}
+static FORCEINLINE HRESULT IComponentTypes_Clone(IComponentTypes* This,IComponentTypes **NewList) {
+    return This->lpVtbl->Clone(This,NewList);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IComponentTypes_get_Count_Proxy(
+    IComponentTypes* This,
+    LONG *Count);
+void __RPC_STUB IComponentTypes_get_Count_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentTypes_get__NewEnum_Proxy(
+    IComponentTypes* This,
+    IEnumVARIANT **ppNewEnum);
+void __RPC_STUB IComponentTypes_get__NewEnum_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentTypes_EnumComponentTypes_Proxy(
+    IComponentTypes* This,
+    IEnumComponentTypes **ppNewEnum);
+void __RPC_STUB IComponentTypes_EnumComponentTypes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentTypes_get_Item_Proxy(
+    IComponentTypes* This,
+    VARIANT Index,
+    IComponentType **ComponentType);
+void __RPC_STUB IComponentTypes_get_Item_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentTypes_put_Item_Proxy(
+    IComponentTypes* This,
+    VARIANT Index,
+    IComponentType *ComponentType);
+void __RPC_STUB IComponentTypes_put_Item_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentTypes_Add_Proxy(
+    IComponentTypes* This,
+    IComponentType *ComponentType,
+    VARIANT *NewIndex);
+void __RPC_STUB IComponentTypes_Add_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentTypes_Remove_Proxy(
+    IComponentTypes* This,
+    VARIANT Index);
+void __RPC_STUB IComponentTypes_Remove_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentTypes_Clone_Proxy(
+    IComponentTypes* This,
+    IComponentTypes **NewList);
+void __RPC_STUB IComponentTypes_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IComponentTypes_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IComponent interface
+ */
+#ifndef __IComponent_INTERFACE_DEFINED__
+#define __IComponent_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IComponent, 0x1a5576fc, 0x0e19, 0x11d3, 0x9d,0x8e, 0x00,0xc0,0x4f,0x72,0xd9,0x80);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("1a5576fc-0e19-11d3-9d8e-00c04f72d980")
+IComponent : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Type(
+        IComponentType **CT) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Type(
+        IComponentType *CT) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_DescLangID(
+        LONG *LangID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_DescLangID(
+        LONG LangID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Status(
+        ComponentStatus *Status) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Status(
+        ComponentStatus Status) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Description(
+        BSTR *Description) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Description(
+        BSTR Description) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IComponent **NewComponent) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IComponent, 0x1a5576fc, 0x0e19, 0x11d3, 0x9d,0x8e, 0x00,0xc0,0x4f,0x72,0xd9,0x80)
+#endif
+#else
+typedef struct IComponentVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IComponent* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IComponent* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IComponent* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IComponent* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IComponent* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IComponent* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IComponent* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IComponent methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Type)(
+        IComponent* This,
+        IComponentType **CT);
+
+    HRESULT (STDMETHODCALLTYPE *put_Type)(
+        IComponent* This,
+        IComponentType *CT);
+
+    HRESULT (STDMETHODCALLTYPE *get_DescLangID)(
+        IComponent* This,
+        LONG *LangID);
+
+    HRESULT (STDMETHODCALLTYPE *put_DescLangID)(
+        IComponent* This,
+        LONG LangID);
+
+    HRESULT (STDMETHODCALLTYPE *get_Status)(
+        IComponent* This,
+        ComponentStatus *Status);
+
+    HRESULT (STDMETHODCALLTYPE *put_Status)(
+        IComponent* This,
+        ComponentStatus Status);
+
+    HRESULT (STDMETHODCALLTYPE *get_Description)(
+        IComponent* This,
+        BSTR *Description);
+
+    HRESULT (STDMETHODCALLTYPE *put_Description)(
+        IComponent* This,
+        BSTR Description);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IComponent* This,
+        IComponent **NewComponent);
+
+    END_INTERFACE
+} IComponentVtbl;
+interface IComponent {
+    CONST_VTBL IComponentVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IComponent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IComponent_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IComponent_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IComponent_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IComponent_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IComponent_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IComponent_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IComponent methods ***/
+#define IComponent_get_Type(This,CT) (This)->lpVtbl->get_Type(This,CT)
+#define IComponent_put_Type(This,CT) (This)->lpVtbl->put_Type(This,CT)
+#define IComponent_get_DescLangID(This,LangID) (This)->lpVtbl->get_DescLangID(This,LangID)
+#define IComponent_put_DescLangID(This,LangID) (This)->lpVtbl->put_DescLangID(This,LangID)
+#define IComponent_get_Status(This,Status) (This)->lpVtbl->get_Status(This,Status)
+#define IComponent_put_Status(This,Status) (This)->lpVtbl->put_Status(This,Status)
+#define IComponent_get_Description(This,Description) (This)->lpVtbl->get_Description(This,Description)
+#define IComponent_put_Description(This,Description) (This)->lpVtbl->put_Description(This,Description)
+#define IComponent_Clone(This,NewComponent) (This)->lpVtbl->Clone(This,NewComponent)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IComponent_QueryInterface(IComponent* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IComponent_AddRef(IComponent* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IComponent_Release(IComponent* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IComponent_GetTypeInfoCount(IComponent* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IComponent_GetTypeInfo(IComponent* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IComponent_GetIDsOfNames(IComponent* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IComponent_Invoke(IComponent* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IComponent methods ***/
+static FORCEINLINE HRESULT IComponent_get_Type(IComponent* This,IComponentType **CT) {
+    return This->lpVtbl->get_Type(This,CT);
+}
+static FORCEINLINE HRESULT IComponent_put_Type(IComponent* This,IComponentType *CT) {
+    return This->lpVtbl->put_Type(This,CT);
+}
+static FORCEINLINE HRESULT IComponent_get_DescLangID(IComponent* This,LONG *LangID) {
+    return This->lpVtbl->get_DescLangID(This,LangID);
+}
+static FORCEINLINE HRESULT IComponent_put_DescLangID(IComponent* This,LONG LangID) {
+    return This->lpVtbl->put_DescLangID(This,LangID);
+}
+static FORCEINLINE HRESULT IComponent_get_Status(IComponent* This,ComponentStatus *Status) {
+    return This->lpVtbl->get_Status(This,Status);
+}
+static FORCEINLINE HRESULT IComponent_put_Status(IComponent* This,ComponentStatus Status) {
+    return This->lpVtbl->put_Status(This,Status);
+}
+static FORCEINLINE HRESULT IComponent_get_Description(IComponent* This,BSTR *Description) {
+    return This->lpVtbl->get_Description(This,Description);
+}
+static FORCEINLINE HRESULT IComponent_put_Description(IComponent* This,BSTR Description) {
+    return This->lpVtbl->put_Description(This,Description);
+}
+static FORCEINLINE HRESULT IComponent_Clone(IComponent* This,IComponent **NewComponent) {
+    return This->lpVtbl->Clone(This,NewComponent);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IComponent_get_Type_Proxy(
+    IComponent* This,
+    IComponentType **CT);
+void __RPC_STUB IComponent_get_Type_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponent_put_Type_Proxy(
+    IComponent* This,
+    IComponentType *CT);
+void __RPC_STUB IComponent_put_Type_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponent_get_DescLangID_Proxy(
+    IComponent* This,
+    LONG *LangID);
+void __RPC_STUB IComponent_get_DescLangID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponent_put_DescLangID_Proxy(
+    IComponent* This,
+    LONG LangID);
+void __RPC_STUB IComponent_put_DescLangID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponent_get_Status_Proxy(
+    IComponent* This,
+    ComponentStatus *Status);
+void __RPC_STUB IComponent_get_Status_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponent_put_Status_Proxy(
+    IComponent* This,
+    ComponentStatus Status);
+void __RPC_STUB IComponent_put_Status_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponent_get_Description_Proxy(
+    IComponent* This,
+    BSTR *Description);
+void __RPC_STUB IComponent_get_Description_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponent_put_Description_Proxy(
+    IComponent* This,
+    BSTR Description);
+void __RPC_STUB IComponent_put_Description_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponent_Clone_Proxy(
+    IComponent* This,
+    IComponent **NewComponent);
+void __RPC_STUB IComponent_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IComponent_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAnalogAudioComponentType interface
+ */
+#ifndef __IAnalogAudioComponentType_INTERFACE_DEFINED__
+#define __IAnalogAudioComponentType_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IAnalogAudioComponentType, 0x2cfeb2a8, 0x1787, 0x4a24, 0xa9,0x41, 0xc6,0xea,0xec,0x39,0xc8,0x42);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("2cfeb2a8-1787-4a24-a941-c6eaec39c842")
+IAnalogAudioComponentType : public IComponentType
+{
+    virtual HRESULT STDMETHODCALLTYPE get_AnalogAudioMode(
+        TVAudioMode *Mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_AnalogAudioMode(
+        TVAudioMode Mode) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IAnalogAudioComponentType, 0x2cfeb2a8, 0x1787, 0x4a24, 0xa9,0x41, 0xc6,0xea,0xec,0x39,0xc8,0x42)
+#endif
+#else
+typedef struct IAnalogAudioComponentTypeVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IAnalogAudioComponentType* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IAnalogAudioComponentType* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IAnalogAudioComponentType* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IAnalogAudioComponentType* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IAnalogAudioComponentType* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IAnalogAudioComponentType* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IAnalogAudioComponentType* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IComponentType methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Category)(
+        IAnalogAudioComponentType* This,
+        ComponentCategory *Category);
+
+    HRESULT (STDMETHODCALLTYPE *put_Category)(
+        IAnalogAudioComponentType* This,
+        ComponentCategory Category);
+
+    HRESULT (STDMETHODCALLTYPE *get_MediaMajorType)(
+        IAnalogAudioComponentType* This,
+        BSTR *MediaMajorType);
+
+    HRESULT (STDMETHODCALLTYPE *put_MediaMajorType)(
+        IAnalogAudioComponentType* This,
+        BSTR MediaMajorType);
+
+    HRESULT (STDMETHODCALLTYPE *get__MediaMajorType)(
+        IAnalogAudioComponentType* This,
+        GUID *MediaMajorTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put__MediaMajorType)(
+        IAnalogAudioComponentType* This,
+        REFCLSID MediaMajorTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *get_MediaSubType)(
+        IAnalogAudioComponentType* This,
+        BSTR *MediaSubType);
+
+    HRESULT (STDMETHODCALLTYPE *put_MediaSubType)(
+        IAnalogAudioComponentType* This,
+        BSTR MediaSubType);
+
+    HRESULT (STDMETHODCALLTYPE *get__MediaSubType)(
+        IAnalogAudioComponentType* This,
+        GUID *MediaSubTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put__MediaSubType)(
+        IAnalogAudioComponentType* This,
+        REFCLSID MediaSubTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *get_MediaFormatType)(
+        IAnalogAudioComponentType* This,
+        BSTR *MediaFormatType);
+
+    HRESULT (STDMETHODCALLTYPE *put_MediaFormatType)(
+        IAnalogAudioComponentType* This,
+        BSTR MediaFormatType);
+
+    HRESULT (STDMETHODCALLTYPE *get__MediaFormatType)(
+        IAnalogAudioComponentType* This,
+        GUID *MediaFormatTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *put__MediaFormatType)(
+        IAnalogAudioComponentType* This,
+        REFCLSID MediaFormatTypeGuid);
+
+    HRESULT (STDMETHODCALLTYPE *get_MediaType)(
+        IAnalogAudioComponentType* This,
+        AM_MEDIA_TYPE *MediaType);
+
+    HRESULT (STDMETHODCALLTYPE *put_MediaType)(
+        IAnalogAudioComponentType* This,
+        AM_MEDIA_TYPE *MediaType);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IAnalogAudioComponentType* This,
+        IComponentType **NewCT);
+
+    /*** IAnalogAudioComponentType methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_AnalogAudioMode)(
+        IAnalogAudioComponentType* This,
+        TVAudioMode *Mode);
+
+    HRESULT (STDMETHODCALLTYPE *put_AnalogAudioMode)(
+        IAnalogAudioComponentType* This,
+        TVAudioMode Mode);
+
+    END_INTERFACE
+} IAnalogAudioComponentTypeVtbl;
+interface IAnalogAudioComponentType {
+    CONST_VTBL IAnalogAudioComponentTypeVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IAnalogAudioComponentType_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAnalogAudioComponentType_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAnalogAudioComponentType_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IAnalogAudioComponentType_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IAnalogAudioComponentType_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IAnalogAudioComponentType_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IAnalogAudioComponentType_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IComponentType methods ***/
+#define IAnalogAudioComponentType_get_Category(This,Category) (This)->lpVtbl->get_Category(This,Category)
+#define IAnalogAudioComponentType_put_Category(This,Category) (This)->lpVtbl->put_Category(This,Category)
+#define IAnalogAudioComponentType_get_MediaMajorType(This,MediaMajorType) (This)->lpVtbl->get_MediaMajorType(This,MediaMajorType)
+#define IAnalogAudioComponentType_put_MediaMajorType(This,MediaMajorType) (This)->lpVtbl->put_MediaMajorType(This,MediaMajorType)
+#define IAnalogAudioComponentType_get__MediaMajorType(This,MediaMajorTypeGuid) (This)->lpVtbl->get__MediaMajorType(This,MediaMajorTypeGuid)
+#define IAnalogAudioComponentType_put__MediaMajorType(This,MediaMajorTypeGuid) (This)->lpVtbl->put__MediaMajorType(This,MediaMajorTypeGuid)
+#define IAnalogAudioComponentType_get_MediaSubType(This,MediaSubType) (This)->lpVtbl->get_MediaSubType(This,MediaSubType)
+#define IAnalogAudioComponentType_put_MediaSubType(This,MediaSubType) (This)->lpVtbl->put_MediaSubType(This,MediaSubType)
+#define IAnalogAudioComponentType_get__MediaSubType(This,MediaSubTypeGuid) (This)->lpVtbl->get__MediaSubType(This,MediaSubTypeGuid)
+#define IAnalogAudioComponentType_put__MediaSubType(This,MediaSubTypeGuid) (This)->lpVtbl->put__MediaSubType(This,MediaSubTypeGuid)
+#define IAnalogAudioComponentType_get_MediaFormatType(This,MediaFormatType) (This)->lpVtbl->get_MediaFormatType(This,MediaFormatType)
+#define IAnalogAudioComponentType_put_MediaFormatType(This,MediaFormatType) (This)->lpVtbl->put_MediaFormatType(This,MediaFormatType)
+#define IAnalogAudioComponentType_get__MediaFormatType(This,MediaFormatTypeGuid) (This)->lpVtbl->get__MediaFormatType(This,MediaFormatTypeGuid)
+#define IAnalogAudioComponentType_put__MediaFormatType(This,MediaFormatTypeGuid) (This)->lpVtbl->put__MediaFormatType(This,MediaFormatTypeGuid)
+#define IAnalogAudioComponentType_get_MediaType(This,MediaType) (This)->lpVtbl->get_MediaType(This,MediaType)
+#define IAnalogAudioComponentType_put_MediaType(This,MediaType) (This)->lpVtbl->put_MediaType(This,MediaType)
+#define IAnalogAudioComponentType_Clone(This,NewCT) (This)->lpVtbl->Clone(This,NewCT)
+/*** IAnalogAudioComponentType methods ***/
+#define IAnalogAudioComponentType_get_AnalogAudioMode(This,Mode) (This)->lpVtbl->get_AnalogAudioMode(This,Mode)
+#define IAnalogAudioComponentType_put_AnalogAudioMode(This,Mode) (This)->lpVtbl->put_AnalogAudioMode(This,Mode)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IAnalogAudioComponentType_QueryInterface(IAnalogAudioComponentType* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IAnalogAudioComponentType_AddRef(IAnalogAudioComponentType* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IAnalogAudioComponentType_Release(IAnalogAudioComponentType* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IAnalogAudioComponentType_GetTypeInfoCount(IAnalogAudioComponentType* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IAnalogAudioComponentType_GetTypeInfo(IAnalogAudioComponentType* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IAnalogAudioComponentType_GetIDsOfNames(IAnalogAudioComponentType* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IAnalogAudioComponentType_Invoke(IAnalogAudioComponentType* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IComponentType methods ***/
+static FORCEINLINE HRESULT IAnalogAudioComponentType_get_Category(IAnalogAudioComponentType* This,ComponentCategory *Category) {
+    return This->lpVtbl->get_Category(This,Category);
+}
+static FORCEINLINE HRESULT IAnalogAudioComponentType_put_Category(IAnalogAudioComponentType* This,ComponentCategory Category) {
+    return This->lpVtbl->put_Category(This,Category);
+}
+static FORCEINLINE HRESULT IAnalogAudioComponentType_get_MediaMajorType(IAnalogAudioComponentType* This,BSTR *MediaMajorType) {
+    return This->lpVtbl->get_MediaMajorType(This,MediaMajorType);
+}
+static FORCEINLINE HRESULT IAnalogAudioComponentType_put_MediaMajorType(IAnalogAudioComponentType* This,BSTR MediaMajorType) {
+    return This->lpVtbl->put_MediaMajorType(This,MediaMajorType);
+}
+static FORCEINLINE HRESULT IAnalogAudioComponentType_get__MediaMajorType(IAnalogAudioComponentType* This,GUID *MediaMajorTypeGuid) {
+    return This->lpVtbl->get__MediaMajorType(This,MediaMajorTypeGuid);
+}
+static FORCEINLINE HRESULT IAnalogAudioComponentType_put__MediaMajorType(IAnalogAudioComponentType* This,REFCLSID MediaMajorTypeGuid) {
+    return This->lpVtbl->put__MediaMajorType(This,MediaMajorTypeGuid);
+}
+static FORCEINLINE HRESULT IAnalogAudioComponentType_get_MediaSubType(IAnalogAudioComponentType* This,BSTR *MediaSubType) {
+    return This->lpVtbl->get_MediaSubType(This,MediaSubType);
+}
+static FORCEINLINE HRESULT IAnalogAudioComponentType_put_MediaSubType(IAnalogAudioComponentType* This,BSTR MediaSubType) {
+    return This->lpVtbl->put_MediaSubType(This,MediaSubType);
+}
+static FORCEINLINE HRESULT IAnalogAudioComponentType_get__MediaSubType(IAnalogAudioComponentType* This,GUID *MediaSubTypeGuid) {
+    return This->lpVtbl->get__MediaSubType(This,MediaSubTypeGuid);
+}
+static FORCEINLINE HRESULT IAnalogAudioComponentType_put__MediaSubType(IAnalogAudioComponentType* This,REFCLSID MediaSubTypeGuid) {
+    return This->lpVtbl->put__MediaSubType(This,MediaSubTypeGuid);
+}
+static FORCEINLINE HRESULT IAnalogAudioComponentType_get_MediaFormatType(IAnalogAudioComponentType* This,BSTR *MediaFormatType) {
+    return This->lpVtbl->get_MediaFormatType(This,MediaFormatType);
+}
+static FORCEINLINE HRESULT IAnalogAudioComponentType_put_MediaFormatType(IAnalogAudioComponentType* This,BSTR MediaFormatType) {
+    return This->lpVtbl->put_MediaFormatType(This,MediaFormatType);
+}
+static FORCEINLINE HRESULT IAnalogAudioComponentType_get__MediaFormatType(IAnalogAudioComponentType* This,GUID *MediaFormatTypeGuid) {
+    return This->lpVtbl->get__MediaFormatType(This,MediaFormatTypeGuid);
+}
+static FORCEINLINE HRESULT IAnalogAudioComponentType_put__MediaFormatType(IAnalogAudioComponentType* This,REFCLSID MediaFormatTypeGuid) {
+    return This->lpVtbl->put__MediaFormatType(This,MediaFormatTypeGuid);
+}
+static FORCEINLINE HRESULT IAnalogAudioComponentType_get_MediaType(IAnalogAudioComponentType* This,AM_MEDIA_TYPE *MediaType) {
+    return This->lpVtbl->get_MediaType(This,MediaType);
+}
+static FORCEINLINE HRESULT IAnalogAudioComponentType_put_MediaType(IAnalogAudioComponentType* This,AM_MEDIA_TYPE *MediaType) {
+    return This->lpVtbl->put_MediaType(This,MediaType);
+}
+static FORCEINLINE HRESULT IAnalogAudioComponentType_Clone(IAnalogAudioComponentType* This,IComponentType **NewCT) {
+    return This->lpVtbl->Clone(This,NewCT);
+}
+/*** IAnalogAudioComponentType methods ***/
+static FORCEINLINE HRESULT IAnalogAudioComponentType_get_AnalogAudioMode(IAnalogAudioComponentType* This,TVAudioMode *Mode) {
+    return This->lpVtbl->get_AnalogAudioMode(This,Mode);
+}
+static FORCEINLINE HRESULT IAnalogAudioComponentType_put_AnalogAudioMode(IAnalogAudioComponentType* This,TVAudioMode Mode) {
+    return This->lpVtbl->put_AnalogAudioMode(This,Mode);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IAnalogAudioComponentType_get_AnalogAudioMode_Proxy(
+    IAnalogAudioComponentType* This,
+    TVAudioMode *Mode);
+void __RPC_STUB IAnalogAudioComponentType_get_AnalogAudioMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAnalogAudioComponentType_put_AnalogAudioMode_Proxy(
+    IAnalogAudioComponentType* This,
+    TVAudioMode Mode);
+void __RPC_STUB IAnalogAudioComponentType_put_AnalogAudioMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IAnalogAudioComponentType_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMPEG2Component interface
+ */
+#ifndef __IMPEG2Component_INTERFACE_DEFINED__
+#define __IMPEG2Component_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IMPEG2Component, 0x1493e353, 0x1eb6, 0x473c, 0x80,0x2d, 0x8e,0x6b,0x8e,0xc9,0xd2,0xa9);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("1493e353-1eb6-473c-802d-8e6b8ec9d2a9")
+IMPEG2Component : public IComponent
+{
+    virtual HRESULT STDMETHODCALLTYPE get_PID(
+        LONG *PID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_PID(
+        LONG PID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_PCRPID(
+        LONG *PCRPID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_PCRPID(
+        LONG PCRPID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ProgramNumber(
+        LONG *ProgramNumber) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_ProgramNumber(
+        LONG ProgramNumber) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMPEG2Component, 0x1493e353, 0x1eb6, 0x473c, 0x80,0x2d, 0x8e,0x6b,0x8e,0xc9,0xd2,0xa9)
+#endif
+#else
+typedef struct IMPEG2ComponentVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMPEG2Component* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMPEG2Component* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMPEG2Component* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IMPEG2Component* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IMPEG2Component* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IMPEG2Component* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IMPEG2Component* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IComponent methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Type)(
+        IMPEG2Component* This,
+        IComponentType **CT);
+
+    HRESULT (STDMETHODCALLTYPE *put_Type)(
+        IMPEG2Component* This,
+        IComponentType *CT);
+
+    HRESULT (STDMETHODCALLTYPE *get_DescLangID)(
+        IMPEG2Component* This,
+        LONG *LangID);
+
+    HRESULT (STDMETHODCALLTYPE *put_DescLangID)(
+        IMPEG2Component* This,
+        LONG LangID);
+
+    HRESULT (STDMETHODCALLTYPE *get_Status)(
+        IMPEG2Component* This,
+        ComponentStatus *Status);
+
+    HRESULT (STDMETHODCALLTYPE *put_Status)(
+        IMPEG2Component* This,
+        ComponentStatus Status);
+
+    HRESULT (STDMETHODCALLTYPE *get_Description)(
+        IMPEG2Component* This,
+        BSTR *Description);
+
+    HRESULT (STDMETHODCALLTYPE *put_Description)(
+        IMPEG2Component* This,
+        BSTR Description);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IMPEG2Component* This,
+        IComponent **NewComponent);
+
+    /*** IMPEG2Component methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_PID)(
+        IMPEG2Component* This,
+        LONG *PID);
+
+    HRESULT (STDMETHODCALLTYPE *put_PID)(
+        IMPEG2Component* This,
+        LONG PID);
+
+    HRESULT (STDMETHODCALLTYPE *get_PCRPID)(
+        IMPEG2Component* This,
+        LONG *PCRPID);
+
+    HRESULT (STDMETHODCALLTYPE *put_PCRPID)(
+        IMPEG2Component* This,
+        LONG PCRPID);
+
+    HRESULT (STDMETHODCALLTYPE *get_ProgramNumber)(
+        IMPEG2Component* This,
+        LONG *ProgramNumber);
+
+    HRESULT (STDMETHODCALLTYPE *put_ProgramNumber)(
+        IMPEG2Component* This,
+        LONG ProgramNumber);
+
+    END_INTERFACE
+} IMPEG2ComponentVtbl;
+interface IMPEG2Component {
+    CONST_VTBL IMPEG2ComponentVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMPEG2Component_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMPEG2Component_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMPEG2Component_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IMPEG2Component_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IMPEG2Component_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IMPEG2Component_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IMPEG2Component_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IComponent methods ***/
+#define IMPEG2Component_get_Type(This,CT) (This)->lpVtbl->get_Type(This,CT)
+#define IMPEG2Component_put_Type(This,CT) (This)->lpVtbl->put_Type(This,CT)
+#define IMPEG2Component_get_DescLangID(This,LangID) (This)->lpVtbl->get_DescLangID(This,LangID)
+#define IMPEG2Component_put_DescLangID(This,LangID) (This)->lpVtbl->put_DescLangID(This,LangID)
+#define IMPEG2Component_get_Status(This,Status) (This)->lpVtbl->get_Status(This,Status)
+#define IMPEG2Component_put_Status(This,Status) (This)->lpVtbl->put_Status(This,Status)
+#define IMPEG2Component_get_Description(This,Description) (This)->lpVtbl->get_Description(This,Description)
+#define IMPEG2Component_put_Description(This,Description) (This)->lpVtbl->put_Description(This,Description)
+#define IMPEG2Component_Clone(This,NewComponent) (This)->lpVtbl->Clone(This,NewComponent)
+/*** IMPEG2Component methods ***/
+#define IMPEG2Component_get_PID(This,PID) (This)->lpVtbl->get_PID(This,PID)
+#define IMPEG2Component_put_PID(This,PID) (This)->lpVtbl->put_PID(This,PID)
+#define IMPEG2Component_get_PCRPID(This,PCRPID) (This)->lpVtbl->get_PCRPID(This,PCRPID)
+#define IMPEG2Component_put_PCRPID(This,PCRPID) (This)->lpVtbl->put_PCRPID(This,PCRPID)
+#define IMPEG2Component_get_ProgramNumber(This,ProgramNumber) (This)->lpVtbl->get_ProgramNumber(This,ProgramNumber)
+#define IMPEG2Component_put_ProgramNumber(This,ProgramNumber) (This)->lpVtbl->put_ProgramNumber(This,ProgramNumber)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IMPEG2Component_QueryInterface(IMPEG2Component* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IMPEG2Component_AddRef(IMPEG2Component* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IMPEG2Component_Release(IMPEG2Component* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IMPEG2Component_GetTypeInfoCount(IMPEG2Component* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IMPEG2Component_GetTypeInfo(IMPEG2Component* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IMPEG2Component_GetIDsOfNames(IMPEG2Component* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IMPEG2Component_Invoke(IMPEG2Component* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IComponent methods ***/
+static FORCEINLINE HRESULT IMPEG2Component_get_Type(IMPEG2Component* This,IComponentType **CT) {
+    return This->lpVtbl->get_Type(This,CT);
+}
+static FORCEINLINE HRESULT IMPEG2Component_put_Type(IMPEG2Component* This,IComponentType *CT) {
+    return This->lpVtbl->put_Type(This,CT);
+}
+static FORCEINLINE HRESULT IMPEG2Component_get_DescLangID(IMPEG2Component* This,LONG *LangID) {
+    return This->lpVtbl->get_DescLangID(This,LangID);
+}
+static FORCEINLINE HRESULT IMPEG2Component_put_DescLangID(IMPEG2Component* This,LONG LangID) {
+    return This->lpVtbl->put_DescLangID(This,LangID);
+}
+static FORCEINLINE HRESULT IMPEG2Component_get_Status(IMPEG2Component* This,ComponentStatus *Status) {
+    return This->lpVtbl->get_Status(This,Status);
+}
+static FORCEINLINE HRESULT IMPEG2Component_put_Status(IMPEG2Component* This,ComponentStatus Status) {
+    return This->lpVtbl->put_Status(This,Status);
+}
+static FORCEINLINE HRESULT IMPEG2Component_get_Description(IMPEG2Component* This,BSTR *Description) {
+    return This->lpVtbl->get_Description(This,Description);
+}
+static FORCEINLINE HRESULT IMPEG2Component_put_Description(IMPEG2Component* This,BSTR Description) {
+    return This->lpVtbl->put_Description(This,Description);
+}
+static FORCEINLINE HRESULT IMPEG2Component_Clone(IMPEG2Component* This,IComponent **NewComponent) {
+    return This->lpVtbl->Clone(This,NewComponent);
+}
+/*** IMPEG2Component methods ***/
+static FORCEINLINE HRESULT IMPEG2Component_get_PID(IMPEG2Component* This,LONG *PID) {
+    return This->lpVtbl->get_PID(This,PID);
+}
+static FORCEINLINE HRESULT IMPEG2Component_put_PID(IMPEG2Component* This,LONG PID) {
+    return This->lpVtbl->put_PID(This,PID);
+}
+static FORCEINLINE HRESULT IMPEG2Component_get_PCRPID(IMPEG2Component* This,LONG *PCRPID) {
+    return This->lpVtbl->get_PCRPID(This,PCRPID);
+}
+static FORCEINLINE HRESULT IMPEG2Component_put_PCRPID(IMPEG2Component* This,LONG PCRPID) {
+    return This->lpVtbl->put_PCRPID(This,PCRPID);
+}
+static FORCEINLINE HRESULT IMPEG2Component_get_ProgramNumber(IMPEG2Component* This,LONG *ProgramNumber) {
+    return This->lpVtbl->get_ProgramNumber(This,ProgramNumber);
+}
+static FORCEINLINE HRESULT IMPEG2Component_put_ProgramNumber(IMPEG2Component* This,LONG ProgramNumber) {
+    return This->lpVtbl->put_ProgramNumber(This,ProgramNumber);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IMPEG2Component_get_PID_Proxy(
+    IMPEG2Component* This,
+    LONG *PID);
+void __RPC_STUB IMPEG2Component_get_PID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMPEG2Component_put_PID_Proxy(
+    IMPEG2Component* This,
+    LONG PID);
+void __RPC_STUB IMPEG2Component_put_PID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMPEG2Component_get_PCRPID_Proxy(
+    IMPEG2Component* This,
+    LONG *PCRPID);
+void __RPC_STUB IMPEG2Component_get_PCRPID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMPEG2Component_put_PCRPID_Proxy(
+    IMPEG2Component* This,
+    LONG PCRPID);
+void __RPC_STUB IMPEG2Component_put_PCRPID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMPEG2Component_get_ProgramNumber_Proxy(
+    IMPEG2Component* This,
+    LONG *ProgramNumber);
+void __RPC_STUB IMPEG2Component_get_ProgramNumber_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMPEG2Component_put_ProgramNumber_Proxy(
+    IMPEG2Component* This,
+    LONG ProgramNumber);
+void __RPC_STUB IMPEG2Component_put_ProgramNumber_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IMPEG2Component_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumComponents interface
+ */
+#ifndef __IEnumComponents_INTERFACE_DEFINED__
+#define __IEnumComponents_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IEnumComponents, 0x2a6e2939, 0x2595, 0x11d3, 0xb6,0x4c, 0x00,0xc0,0x4f,0x79,0x49,0x8e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("2a6e2939-2595-11d3-b64c-00c04f79498e")
+IEnumComponents : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Next(
+        ULONG celt,
+        IComponent **rgelt,
+        ULONG *pceltFetched) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Skip(
+        ULONG celt) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IEnumComponents **ppEnum) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IEnumComponents, 0x2a6e2939, 0x2595, 0x11d3, 0xb6,0x4c, 0x00,0xc0,0x4f,0x79,0x49,0x8e)
+#endif
+#else
+typedef struct IEnumComponentsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IEnumComponents* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IEnumComponents* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IEnumComponents* This);
+
+    /*** IEnumComponents methods ***/
+    HRESULT (STDMETHODCALLTYPE *Next)(
+        IEnumComponents* This,
+        ULONG celt,
+        IComponent **rgelt,
+        ULONG *pceltFetched);
+
+    HRESULT (STDMETHODCALLTYPE *Skip)(
+        IEnumComponents* This,
+        ULONG celt);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        IEnumComponents* This);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IEnumComponents* This,
+        IEnumComponents **ppEnum);
+
+    END_INTERFACE
+} IEnumComponentsVtbl;
+interface IEnumComponents {
+    CONST_VTBL IEnumComponentsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IEnumComponents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumComponents_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumComponents_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumComponents methods ***/
+#define IEnumComponents_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)
+#define IEnumComponents_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumComponents_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumComponents_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IEnumComponents_QueryInterface(IEnumComponents* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IEnumComponents_AddRef(IEnumComponents* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IEnumComponents_Release(IEnumComponents* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IEnumComponents methods ***/
+static FORCEINLINE HRESULT IEnumComponents_Next(IEnumComponents* This,ULONG celt,IComponent **rgelt,ULONG *pceltFetched) {
+    return This->lpVtbl->Next(This,celt,rgelt,pceltFetched);
+}
+static FORCEINLINE HRESULT IEnumComponents_Skip(IEnumComponents* This,ULONG celt) {
+    return This->lpVtbl->Skip(This,celt);
+}
+static FORCEINLINE HRESULT IEnumComponents_Reset(IEnumComponents* This) {
+    return This->lpVtbl->Reset(This);
+}
+static FORCEINLINE HRESULT IEnumComponents_Clone(IEnumComponents* This,IEnumComponents **ppEnum) {
+    return This->lpVtbl->Clone(This,ppEnum);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumComponents_Next_Proxy(
+    IEnumComponents* This,
+    ULONG celt,
+    IComponent **rgelt,
+    ULONG *pceltFetched);
+void __RPC_STUB IEnumComponents_Next_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumComponents_Skip_Proxy(
+    IEnumComponents* This,
+    ULONG celt);
+void __RPC_STUB IEnumComponents_Skip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumComponents_Reset_Proxy(
+    IEnumComponents* This);
+void __RPC_STUB IEnumComponents_Reset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumComponents_Clone_Proxy(
+    IEnumComponents* This,
+    IEnumComponents **ppEnum);
+void __RPC_STUB IEnumComponents_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IEnumComponents_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IComponents interface
+ */
+#ifndef __IComponents_INTERFACE_DEFINED__
+#define __IComponents_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IComponents, 0x39a48091, 0xfffe, 0x4182, 0xa1,0x61, 0x3f,0xf8,0x02,0x64,0x0e,0x26);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("39a48091-fffe-4182-a161-3ff802640e26")
+IComponents : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Count(
+        LONG *Count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
+        IEnumVARIANT **ppNewEnum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumComponents(
+        IEnumComponents **ppNewEnum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Item(
+        VARIANT Index,
+        IComponent **ppComponent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Add(
+        IComponent *Component,
+        VARIANT *NewIndex) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Remove(
+        VARIANT Index) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IComponents **NewList) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Item(
+        VARIANT Index,
+        IComponent *ppComponent) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IComponents, 0x39a48091, 0xfffe, 0x4182, 0xa1,0x61, 0x3f,0xf8,0x02,0x64,0x0e,0x26)
+#endif
+#else
+typedef struct IComponentsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IComponents* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IComponents* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IComponents* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IComponents* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IComponents* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IComponents* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IComponents* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IComponents methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Count)(
+        IComponents* This,
+        LONG *Count);
+
+    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
+        IComponents* This,
+        IEnumVARIANT **ppNewEnum);
+
+    HRESULT (STDMETHODCALLTYPE *EnumComponents)(
+        IComponents* This,
+        IEnumComponents **ppNewEnum);
+
+    HRESULT (STDMETHODCALLTYPE *get_Item)(
+        IComponents* This,
+        VARIANT Index,
+        IComponent **ppComponent);
+
+    HRESULT (STDMETHODCALLTYPE *Add)(
+        IComponents* This,
+        IComponent *Component,
+        VARIANT *NewIndex);
+
+    HRESULT (STDMETHODCALLTYPE *Remove)(
+        IComponents* This,
+        VARIANT Index);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IComponents* This,
+        IComponents **NewList);
+
+    HRESULT (STDMETHODCALLTYPE *put_Item)(
+        IComponents* This,
+        VARIANT Index,
+        IComponent *ppComponent);
+
+    END_INTERFACE
+} IComponentsVtbl;
+interface IComponents {
+    CONST_VTBL IComponentsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IComponents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IComponents_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IComponents_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IComponents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IComponents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IComponents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IComponents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IComponents methods ***/
+#define IComponents_get_Count(This,Count) (This)->lpVtbl->get_Count(This,Count)
+#define IComponents_get__NewEnum(This,ppNewEnum) (This)->lpVtbl->get__NewEnum(This,ppNewEnum)
+#define IComponents_EnumComponents(This,ppNewEnum) (This)->lpVtbl->EnumComponents(This,ppNewEnum)
+#define IComponents_get_Item(This,Index,ppComponent) (This)->lpVtbl->get_Item(This,Index,ppComponent)
+#define IComponents_Add(This,Component,NewIndex) (This)->lpVtbl->Add(This,Component,NewIndex)
+#define IComponents_Remove(This,Index) (This)->lpVtbl->Remove(This,Index)
+#define IComponents_Clone(This,NewList) (This)->lpVtbl->Clone(This,NewList)
+#define IComponents_put_Item(This,Index,ppComponent) (This)->lpVtbl->put_Item(This,Index,ppComponent)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IComponents_QueryInterface(IComponents* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IComponents_AddRef(IComponents* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IComponents_Release(IComponents* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IComponents_GetTypeInfoCount(IComponents* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IComponents_GetTypeInfo(IComponents* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IComponents_GetIDsOfNames(IComponents* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IComponents_Invoke(IComponents* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IComponents methods ***/
+static FORCEINLINE HRESULT IComponents_get_Count(IComponents* This,LONG *Count) {
+    return This->lpVtbl->get_Count(This,Count);
+}
+static FORCEINLINE HRESULT IComponents_get__NewEnum(IComponents* This,IEnumVARIANT **ppNewEnum) {
+    return This->lpVtbl->get__NewEnum(This,ppNewEnum);
+}
+static FORCEINLINE HRESULT IComponents_EnumComponents(IComponents* This,IEnumComponents **ppNewEnum) {
+    return This->lpVtbl->EnumComponents(This,ppNewEnum);
+}
+static FORCEINLINE HRESULT IComponents_get_Item(IComponents* This,VARIANT Index,IComponent **ppComponent) {
+    return This->lpVtbl->get_Item(This,Index,ppComponent);
+}
+static FORCEINLINE HRESULT IComponents_Add(IComponents* This,IComponent *Component,VARIANT *NewIndex) {
+    return This->lpVtbl->Add(This,Component,NewIndex);
+}
+static FORCEINLINE HRESULT IComponents_Remove(IComponents* This,VARIANT Index) {
+    return This->lpVtbl->Remove(This,Index);
+}
+static FORCEINLINE HRESULT IComponents_Clone(IComponents* This,IComponents **NewList) {
+    return This->lpVtbl->Clone(This,NewList);
+}
+static FORCEINLINE HRESULT IComponents_put_Item(IComponents* This,VARIANT Index,IComponent *ppComponent) {
+    return This->lpVtbl->put_Item(This,Index,ppComponent);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IComponents_get_Count_Proxy(
+    IComponents* This,
+    LONG *Count);
+void __RPC_STUB IComponents_get_Count_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponents_get__NewEnum_Proxy(
+    IComponents* This,
+    IEnumVARIANT **ppNewEnum);
+void __RPC_STUB IComponents_get__NewEnum_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponents_EnumComponents_Proxy(
+    IComponents* This,
+    IEnumComponents **ppNewEnum);
+void __RPC_STUB IComponents_EnumComponents_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponents_get_Item_Proxy(
+    IComponents* This,
+    VARIANT Index,
+    IComponent **ppComponent);
+void __RPC_STUB IComponents_get_Item_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponents_Add_Proxy(
+    IComponents* This,
+    IComponent *Component,
+    VARIANT *NewIndex);
+void __RPC_STUB IComponents_Add_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponents_Remove_Proxy(
+    IComponents* This,
+    VARIANT Index);
+void __RPC_STUB IComponents_Remove_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponents_Clone_Proxy(
+    IComponents* This,
+    IComponents **NewList);
+void __RPC_STUB IComponents_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponents_put_Item_Proxy(
+    IComponents* This,
+    VARIANT Index,
+    IComponent *ppComponent);
+void __RPC_STUB IComponents_put_Item_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IComponents_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IComponentsOld interface
+ */
+#ifndef __IComponentsOld_INTERFACE_DEFINED__
+#define __IComponentsOld_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IComponentsOld, 0xfcd01846, 0x0e19, 0x11d3, 0x9d,0x8e, 0x00,0xc0,0x4f,0x72,0xd9,0x80);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("fcd01846-0e19-11d3-9d8e-00c04f72d980")
+IComponentsOld : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Count(
+        LONG *Count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
+        IEnumVARIANT **ppNewEnum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumComponents(
+        IEnumComponents **ppNewEnum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Item(
+        VARIANT Index,
+        IComponent **ppComponent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Add(
+        IComponent *Component,
+        VARIANT *NewIndex) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Remove(
+        VARIANT Index) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IComponents **NewList) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IComponentsOld, 0xfcd01846, 0x0e19, 0x11d3, 0x9d,0x8e, 0x00,0xc0,0x4f,0x72,0xd9,0x80)
+#endif
+#else
+typedef struct IComponentsOldVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IComponentsOld* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IComponentsOld* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IComponentsOld* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IComponentsOld* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IComponentsOld* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IComponentsOld* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IComponentsOld* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IComponentsOld methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Count)(
+        IComponentsOld* This,
+        LONG *Count);
+
+    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
+        IComponentsOld* This,
+        IEnumVARIANT **ppNewEnum);
+
+    HRESULT (STDMETHODCALLTYPE *EnumComponents)(
+        IComponentsOld* This,
+        IEnumComponents **ppNewEnum);
+
+    HRESULT (STDMETHODCALLTYPE *get_Item)(
+        IComponentsOld* This,
+        VARIANT Index,
+        IComponent **ppComponent);
+
+    HRESULT (STDMETHODCALLTYPE *Add)(
+        IComponentsOld* This,
+        IComponent *Component,
+        VARIANT *NewIndex);
+
+    HRESULT (STDMETHODCALLTYPE *Remove)(
+        IComponentsOld* This,
+        VARIANT Index);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IComponentsOld* This,
+        IComponents **NewList);
+
+    END_INTERFACE
+} IComponentsOldVtbl;
+interface IComponentsOld {
+    CONST_VTBL IComponentsOldVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IComponentsOld_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IComponentsOld_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IComponentsOld_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IComponentsOld_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IComponentsOld_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IComponentsOld_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IComponentsOld_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IComponentsOld methods ***/
+#define IComponentsOld_get_Count(This,Count) (This)->lpVtbl->get_Count(This,Count)
+#define IComponentsOld_get__NewEnum(This,ppNewEnum) (This)->lpVtbl->get__NewEnum(This,ppNewEnum)
+#define IComponentsOld_EnumComponents(This,ppNewEnum) (This)->lpVtbl->EnumComponents(This,ppNewEnum)
+#define IComponentsOld_get_Item(This,Index,ppComponent) (This)->lpVtbl->get_Item(This,Index,ppComponent)
+#define IComponentsOld_Add(This,Component,NewIndex) (This)->lpVtbl->Add(This,Component,NewIndex)
+#define IComponentsOld_Remove(This,Index) (This)->lpVtbl->Remove(This,Index)
+#define IComponentsOld_Clone(This,NewList) (This)->lpVtbl->Clone(This,NewList)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IComponentsOld_QueryInterface(IComponentsOld* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IComponentsOld_AddRef(IComponentsOld* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IComponentsOld_Release(IComponentsOld* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IComponentsOld_GetTypeInfoCount(IComponentsOld* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IComponentsOld_GetTypeInfo(IComponentsOld* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IComponentsOld_GetIDsOfNames(IComponentsOld* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IComponentsOld_Invoke(IComponentsOld* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** IComponentsOld methods ***/
+static FORCEINLINE HRESULT IComponentsOld_get_Count(IComponentsOld* This,LONG *Count) {
+    return This->lpVtbl->get_Count(This,Count);
+}
+static FORCEINLINE HRESULT IComponentsOld_get__NewEnum(IComponentsOld* This,IEnumVARIANT **ppNewEnum) {
+    return This->lpVtbl->get__NewEnum(This,ppNewEnum);
+}
+static FORCEINLINE HRESULT IComponentsOld_EnumComponents(IComponentsOld* This,IEnumComponents **ppNewEnum) {
+    return This->lpVtbl->EnumComponents(This,ppNewEnum);
+}
+static FORCEINLINE HRESULT IComponentsOld_get_Item(IComponentsOld* This,VARIANT Index,IComponent **ppComponent) {
+    return This->lpVtbl->get_Item(This,Index,ppComponent);
+}
+static FORCEINLINE HRESULT IComponentsOld_Add(IComponentsOld* This,IComponent *Component,VARIANT *NewIndex) {
+    return This->lpVtbl->Add(This,Component,NewIndex);
+}
+static FORCEINLINE HRESULT IComponentsOld_Remove(IComponentsOld* This,VARIANT Index) {
+    return This->lpVtbl->Remove(This,Index);
+}
+static FORCEINLINE HRESULT IComponentsOld_Clone(IComponentsOld* This,IComponents **NewList) {
+    return This->lpVtbl->Clone(This,NewList);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IComponentsOld_get_Count_Proxy(
+    IComponentsOld* This,
+    LONG *Count);
+void __RPC_STUB IComponentsOld_get_Count_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentsOld_get__NewEnum_Proxy(
+    IComponentsOld* This,
+    IEnumVARIANT **ppNewEnum);
+void __RPC_STUB IComponentsOld_get__NewEnum_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentsOld_EnumComponents_Proxy(
+    IComponentsOld* This,
+    IEnumComponents **ppNewEnum);
+void __RPC_STUB IComponentsOld_EnumComponents_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentsOld_get_Item_Proxy(
+    IComponentsOld* This,
+    VARIANT Index,
+    IComponent **ppComponent);
+void __RPC_STUB IComponentsOld_get_Item_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentsOld_Add_Proxy(
+    IComponentsOld* This,
+    IComponent *Component,
+    VARIANT *NewIndex);
+void __RPC_STUB IComponentsOld_Add_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentsOld_Remove_Proxy(
+    IComponentsOld* This,
+    VARIANT Index);
+void __RPC_STUB IComponentsOld_Remove_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComponentsOld_Clone_Proxy(
+    IComponentsOld* This,
+    IComponents **NewList);
+void __RPC_STUB IComponentsOld_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IComponentsOld_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ILocator interface
+ */
+#ifndef __ILocator_INTERFACE_DEFINED__
+#define __ILocator_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ILocator, 0x286d7f89, 0x760c, 0x4f89, 0x80,0xc4, 0x66,0x84,0x1d,0x25,0x07,0xaa);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("286d7f89-760c-4f89-80c4-66841d2507aa")
+ILocator : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_CarrierFrequency(
+        LONG *Frequency) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_CarrierFrequency(
+        LONG Frequency) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_InnerFEC(
+        FECMethod *FEC) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_InnerFEC(
+        FECMethod FEC) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_InnerFECRate(
+        BinaryConvolutionCodeRate *FEC) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_InnerFECRate(
+        BinaryConvolutionCodeRate FEC) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_OuterFEC(
+        FECMethod *FEC) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_OuterFEC(
+        FECMethod FEC) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_OuterFECRate(
+        BinaryConvolutionCodeRate *FEC) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_OuterFECRate(
+        BinaryConvolutionCodeRate FEC) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Modulation(
+        ModulationType *Modulation) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Modulation(
+        ModulationType Modulation) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SymbolRate(
+        LONG *Rate) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_SymbolRate(
+        LONG Rate) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        ILocator **NewLocator) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ILocator, 0x286d7f89, 0x760c, 0x4f89, 0x80,0xc4, 0x66,0x84,0x1d,0x25,0x07,0xaa)
+#endif
+#else
+typedef struct ILocatorVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ILocator* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ILocator* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ILocator* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        ILocator* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        ILocator* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        ILocator* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        ILocator* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ILocator methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_CarrierFrequency)(
+        ILocator* This,
+        LONG *Frequency);
+
+    HRESULT (STDMETHODCALLTYPE *put_CarrierFrequency)(
+        ILocator* This,
+        LONG Frequency);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFEC)(
+        ILocator* This,
+        FECMethod *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFEC)(
+        ILocator* This,
+        FECMethod FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFECRate)(
+        ILocator* This,
+        BinaryConvolutionCodeRate *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFECRate)(
+        ILocator* This,
+        BinaryConvolutionCodeRate FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFEC)(
+        ILocator* This,
+        FECMethod *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFEC)(
+        ILocator* This,
+        FECMethod FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFECRate)(
+        ILocator* This,
+        BinaryConvolutionCodeRate *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFECRate)(
+        ILocator* This,
+        BinaryConvolutionCodeRate FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_Modulation)(
+        ILocator* This,
+        ModulationType *Modulation);
+
+    HRESULT (STDMETHODCALLTYPE *put_Modulation)(
+        ILocator* This,
+        ModulationType Modulation);
+
+    HRESULT (STDMETHODCALLTYPE *get_SymbolRate)(
+        ILocator* This,
+        LONG *Rate);
+
+    HRESULT (STDMETHODCALLTYPE *put_SymbolRate)(
+        ILocator* This,
+        LONG Rate);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        ILocator* This,
+        ILocator **NewLocator);
+
+    END_INTERFACE
+} ILocatorVtbl;
+interface ILocator {
+    CONST_VTBL ILocatorVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ILocator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ILocator_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ILocator_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define ILocator_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define ILocator_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define ILocator_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define ILocator_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ILocator methods ***/
+#define ILocator_get_CarrierFrequency(This,Frequency) (This)->lpVtbl->get_CarrierFrequency(This,Frequency)
+#define ILocator_put_CarrierFrequency(This,Frequency) (This)->lpVtbl->put_CarrierFrequency(This,Frequency)
+#define ILocator_get_InnerFEC(This,FEC) (This)->lpVtbl->get_InnerFEC(This,FEC)
+#define ILocator_put_InnerFEC(This,FEC) (This)->lpVtbl->put_InnerFEC(This,FEC)
+#define ILocator_get_InnerFECRate(This,FEC) (This)->lpVtbl->get_InnerFECRate(This,FEC)
+#define ILocator_put_InnerFECRate(This,FEC) (This)->lpVtbl->put_InnerFECRate(This,FEC)
+#define ILocator_get_OuterFEC(This,FEC) (This)->lpVtbl->get_OuterFEC(This,FEC)
+#define ILocator_put_OuterFEC(This,FEC) (This)->lpVtbl->put_OuterFEC(This,FEC)
+#define ILocator_get_OuterFECRate(This,FEC) (This)->lpVtbl->get_OuterFECRate(This,FEC)
+#define ILocator_put_OuterFECRate(This,FEC) (This)->lpVtbl->put_OuterFECRate(This,FEC)
+#define ILocator_get_Modulation(This,Modulation) (This)->lpVtbl->get_Modulation(This,Modulation)
+#define ILocator_put_Modulation(This,Modulation) (This)->lpVtbl->put_Modulation(This,Modulation)
+#define ILocator_get_SymbolRate(This,Rate) (This)->lpVtbl->get_SymbolRate(This,Rate)
+#define ILocator_put_SymbolRate(This,Rate) (This)->lpVtbl->put_SymbolRate(This,Rate)
+#define ILocator_Clone(This,NewLocator) (This)->lpVtbl->Clone(This,NewLocator)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ILocator_QueryInterface(ILocator* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ILocator_AddRef(ILocator* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ILocator_Release(ILocator* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT ILocator_GetTypeInfoCount(ILocator* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT ILocator_GetTypeInfo(ILocator* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT ILocator_GetIDsOfNames(ILocator* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT ILocator_Invoke(ILocator* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ILocator methods ***/
+static FORCEINLINE HRESULT ILocator_get_CarrierFrequency(ILocator* This,LONG *Frequency) {
+    return This->lpVtbl->get_CarrierFrequency(This,Frequency);
+}
+static FORCEINLINE HRESULT ILocator_put_CarrierFrequency(ILocator* This,LONG Frequency) {
+    return This->lpVtbl->put_CarrierFrequency(This,Frequency);
+}
+static FORCEINLINE HRESULT ILocator_get_InnerFEC(ILocator* This,FECMethod *FEC) {
+    return This->lpVtbl->get_InnerFEC(This,FEC);
+}
+static FORCEINLINE HRESULT ILocator_put_InnerFEC(ILocator* This,FECMethod FEC) {
+    return This->lpVtbl->put_InnerFEC(This,FEC);
+}
+static FORCEINLINE HRESULT ILocator_get_InnerFECRate(ILocator* This,BinaryConvolutionCodeRate *FEC) {
+    return This->lpVtbl->get_InnerFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT ILocator_put_InnerFECRate(ILocator* This,BinaryConvolutionCodeRate FEC) {
+    return This->lpVtbl->put_InnerFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT ILocator_get_OuterFEC(ILocator* This,FECMethod *FEC) {
+    return This->lpVtbl->get_OuterFEC(This,FEC);
+}
+static FORCEINLINE HRESULT ILocator_put_OuterFEC(ILocator* This,FECMethod FEC) {
+    return This->lpVtbl->put_OuterFEC(This,FEC);
+}
+static FORCEINLINE HRESULT ILocator_get_OuterFECRate(ILocator* This,BinaryConvolutionCodeRate *FEC) {
+    return This->lpVtbl->get_OuterFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT ILocator_put_OuterFECRate(ILocator* This,BinaryConvolutionCodeRate FEC) {
+    return This->lpVtbl->put_OuterFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT ILocator_get_Modulation(ILocator* This,ModulationType *Modulation) {
+    return This->lpVtbl->get_Modulation(This,Modulation);
+}
+static FORCEINLINE HRESULT ILocator_put_Modulation(ILocator* This,ModulationType Modulation) {
+    return This->lpVtbl->put_Modulation(This,Modulation);
+}
+static FORCEINLINE HRESULT ILocator_get_SymbolRate(ILocator* This,LONG *Rate) {
+    return This->lpVtbl->get_SymbolRate(This,Rate);
+}
+static FORCEINLINE HRESULT ILocator_put_SymbolRate(ILocator* This,LONG Rate) {
+    return This->lpVtbl->put_SymbolRate(This,Rate);
+}
+static FORCEINLINE HRESULT ILocator_Clone(ILocator* This,ILocator **NewLocator) {
+    return This->lpVtbl->Clone(This,NewLocator);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ILocator_get_CarrierFrequency_Proxy(
+    ILocator* This,
+    LONG *Frequency);
+void __RPC_STUB ILocator_get_CarrierFrequency_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILocator_put_CarrierFrequency_Proxy(
+    ILocator* This,
+    LONG Frequency);
+void __RPC_STUB ILocator_put_CarrierFrequency_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILocator_get_InnerFEC_Proxy(
+    ILocator* This,
+    FECMethod *FEC);
+void __RPC_STUB ILocator_get_InnerFEC_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILocator_put_InnerFEC_Proxy(
+    ILocator* This,
+    FECMethod FEC);
+void __RPC_STUB ILocator_put_InnerFEC_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILocator_get_InnerFECRate_Proxy(
+    ILocator* This,
+    BinaryConvolutionCodeRate *FEC);
+void __RPC_STUB ILocator_get_InnerFECRate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILocator_put_InnerFECRate_Proxy(
+    ILocator* This,
+    BinaryConvolutionCodeRate FEC);
+void __RPC_STUB ILocator_put_InnerFECRate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILocator_get_OuterFEC_Proxy(
+    ILocator* This,
+    FECMethod *FEC);
+void __RPC_STUB ILocator_get_OuterFEC_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILocator_put_OuterFEC_Proxy(
+    ILocator* This,
+    FECMethod FEC);
+void __RPC_STUB ILocator_put_OuterFEC_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILocator_get_OuterFECRate_Proxy(
+    ILocator* This,
+    BinaryConvolutionCodeRate *FEC);
+void __RPC_STUB ILocator_get_OuterFECRate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILocator_put_OuterFECRate_Proxy(
+    ILocator* This,
+    BinaryConvolutionCodeRate FEC);
+void __RPC_STUB ILocator_put_OuterFECRate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILocator_get_Modulation_Proxy(
+    ILocator* This,
+    ModulationType *Modulation);
+void __RPC_STUB ILocator_get_Modulation_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILocator_put_Modulation_Proxy(
+    ILocator* This,
+    ModulationType Modulation);
+void __RPC_STUB ILocator_put_Modulation_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILocator_get_SymbolRate_Proxy(
+    ILocator* This,
+    LONG *Rate);
+void __RPC_STUB ILocator_get_SymbolRate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILocator_put_SymbolRate_Proxy(
+    ILocator* This,
+    LONG Rate);
+void __RPC_STUB ILocator_put_SymbolRate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILocator_Clone_Proxy(
+    ILocator* This,
+    ILocator **NewLocator);
+void __RPC_STUB ILocator_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ILocator_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAnalogLocator interface
+ */
+#ifndef __IAnalogLocator_INTERFACE_DEFINED__
+#define __IAnalogLocator_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IAnalogLocator, 0x34d1f26b, 0xe339, 0x430d, 0xab,0xce, 0x73,0x8c,0xb4,0x89,0x84,0xdc);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("34d1f26b-e339-430d-abce-738cb48984dc")
+IAnalogLocator : public ILocator
+{
+    virtual HRESULT STDMETHODCALLTYPE get_VideoStandard(
+        AnalogVideoStandard *AVS) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_VideoStandard(
+        AnalogVideoStandard AVS) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IAnalogLocator, 0x34d1f26b, 0xe339, 0x430d, 0xab,0xce, 0x73,0x8c,0xb4,0x89,0x84,0xdc)
+#endif
+#else
+typedef struct IAnalogLocatorVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IAnalogLocator* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IAnalogLocator* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IAnalogLocator* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IAnalogLocator* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IAnalogLocator* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IAnalogLocator* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IAnalogLocator* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ILocator methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_CarrierFrequency)(
+        IAnalogLocator* This,
+        LONG *Frequency);
+
+    HRESULT (STDMETHODCALLTYPE *put_CarrierFrequency)(
+        IAnalogLocator* This,
+        LONG Frequency);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFEC)(
+        IAnalogLocator* This,
+        FECMethod *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFEC)(
+        IAnalogLocator* This,
+        FECMethod FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFECRate)(
+        IAnalogLocator* This,
+        BinaryConvolutionCodeRate *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFECRate)(
+        IAnalogLocator* This,
+        BinaryConvolutionCodeRate FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFEC)(
+        IAnalogLocator* This,
+        FECMethod *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFEC)(
+        IAnalogLocator* This,
+        FECMethod FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFECRate)(
+        IAnalogLocator* This,
+        BinaryConvolutionCodeRate *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFECRate)(
+        IAnalogLocator* This,
+        BinaryConvolutionCodeRate FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_Modulation)(
+        IAnalogLocator* This,
+        ModulationType *Modulation);
+
+    HRESULT (STDMETHODCALLTYPE *put_Modulation)(
+        IAnalogLocator* This,
+        ModulationType Modulation);
+
+    HRESULT (STDMETHODCALLTYPE *get_SymbolRate)(
+        IAnalogLocator* This,
+        LONG *Rate);
+
+    HRESULT (STDMETHODCALLTYPE *put_SymbolRate)(
+        IAnalogLocator* This,
+        LONG Rate);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IAnalogLocator* This,
+        ILocator **NewLocator);
+
+    /*** IAnalogLocator methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_VideoStandard)(
+        IAnalogLocator* This,
+        AnalogVideoStandard *AVS);
+
+    HRESULT (STDMETHODCALLTYPE *put_VideoStandard)(
+        IAnalogLocator* This,
+        AnalogVideoStandard AVS);
+
+    END_INTERFACE
+} IAnalogLocatorVtbl;
+interface IAnalogLocator {
+    CONST_VTBL IAnalogLocatorVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IAnalogLocator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAnalogLocator_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAnalogLocator_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IAnalogLocator_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IAnalogLocator_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IAnalogLocator_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IAnalogLocator_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ILocator methods ***/
+#define IAnalogLocator_get_CarrierFrequency(This,Frequency) (This)->lpVtbl->get_CarrierFrequency(This,Frequency)
+#define IAnalogLocator_put_CarrierFrequency(This,Frequency) (This)->lpVtbl->put_CarrierFrequency(This,Frequency)
+#define IAnalogLocator_get_InnerFEC(This,FEC) (This)->lpVtbl->get_InnerFEC(This,FEC)
+#define IAnalogLocator_put_InnerFEC(This,FEC) (This)->lpVtbl->put_InnerFEC(This,FEC)
+#define IAnalogLocator_get_InnerFECRate(This,FEC) (This)->lpVtbl->get_InnerFECRate(This,FEC)
+#define IAnalogLocator_put_InnerFECRate(This,FEC) (This)->lpVtbl->put_InnerFECRate(This,FEC)
+#define IAnalogLocator_get_OuterFEC(This,FEC) (This)->lpVtbl->get_OuterFEC(This,FEC)
+#define IAnalogLocator_put_OuterFEC(This,FEC) (This)->lpVtbl->put_OuterFEC(This,FEC)
+#define IAnalogLocator_get_OuterFECRate(This,FEC) (This)->lpVtbl->get_OuterFECRate(This,FEC)
+#define IAnalogLocator_put_OuterFECRate(This,FEC) (This)->lpVtbl->put_OuterFECRate(This,FEC)
+#define IAnalogLocator_get_Modulation(This,Modulation) (This)->lpVtbl->get_Modulation(This,Modulation)
+#define IAnalogLocator_put_Modulation(This,Modulation) (This)->lpVtbl->put_Modulation(This,Modulation)
+#define IAnalogLocator_get_SymbolRate(This,Rate) (This)->lpVtbl->get_SymbolRate(This,Rate)
+#define IAnalogLocator_put_SymbolRate(This,Rate) (This)->lpVtbl->put_SymbolRate(This,Rate)
+#define IAnalogLocator_Clone(This,NewLocator) (This)->lpVtbl->Clone(This,NewLocator)
+/*** IAnalogLocator methods ***/
+#define IAnalogLocator_get_VideoStandard(This,AVS) (This)->lpVtbl->get_VideoStandard(This,AVS)
+#define IAnalogLocator_put_VideoStandard(This,AVS) (This)->lpVtbl->put_VideoStandard(This,AVS)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IAnalogLocator_QueryInterface(IAnalogLocator* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IAnalogLocator_AddRef(IAnalogLocator* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IAnalogLocator_Release(IAnalogLocator* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IAnalogLocator_GetTypeInfoCount(IAnalogLocator* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IAnalogLocator_GetTypeInfo(IAnalogLocator* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IAnalogLocator_GetIDsOfNames(IAnalogLocator* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IAnalogLocator_Invoke(IAnalogLocator* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ILocator methods ***/
+static FORCEINLINE HRESULT IAnalogLocator_get_CarrierFrequency(IAnalogLocator* This,LONG *Frequency) {
+    return This->lpVtbl->get_CarrierFrequency(This,Frequency);
+}
+static FORCEINLINE HRESULT IAnalogLocator_put_CarrierFrequency(IAnalogLocator* This,LONG Frequency) {
+    return This->lpVtbl->put_CarrierFrequency(This,Frequency);
+}
+static FORCEINLINE HRESULT IAnalogLocator_get_InnerFEC(IAnalogLocator* This,FECMethod *FEC) {
+    return This->lpVtbl->get_InnerFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IAnalogLocator_put_InnerFEC(IAnalogLocator* This,FECMethod FEC) {
+    return This->lpVtbl->put_InnerFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IAnalogLocator_get_InnerFECRate(IAnalogLocator* This,BinaryConvolutionCodeRate *FEC) {
+    return This->lpVtbl->get_InnerFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IAnalogLocator_put_InnerFECRate(IAnalogLocator* This,BinaryConvolutionCodeRate FEC) {
+    return This->lpVtbl->put_InnerFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IAnalogLocator_get_OuterFEC(IAnalogLocator* This,FECMethod *FEC) {
+    return This->lpVtbl->get_OuterFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IAnalogLocator_put_OuterFEC(IAnalogLocator* This,FECMethod FEC) {
+    return This->lpVtbl->put_OuterFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IAnalogLocator_get_OuterFECRate(IAnalogLocator* This,BinaryConvolutionCodeRate *FEC) {
+    return This->lpVtbl->get_OuterFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IAnalogLocator_put_OuterFECRate(IAnalogLocator* This,BinaryConvolutionCodeRate FEC) {
+    return This->lpVtbl->put_OuterFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IAnalogLocator_get_Modulation(IAnalogLocator* This,ModulationType *Modulation) {
+    return This->lpVtbl->get_Modulation(This,Modulation);
+}
+static FORCEINLINE HRESULT IAnalogLocator_put_Modulation(IAnalogLocator* This,ModulationType Modulation) {
+    return This->lpVtbl->put_Modulation(This,Modulation);
+}
+static FORCEINLINE HRESULT IAnalogLocator_get_SymbolRate(IAnalogLocator* This,LONG *Rate) {
+    return This->lpVtbl->get_SymbolRate(This,Rate);
+}
+static FORCEINLINE HRESULT IAnalogLocator_put_SymbolRate(IAnalogLocator* This,LONG Rate) {
+    return This->lpVtbl->put_SymbolRate(This,Rate);
+}
+static FORCEINLINE HRESULT IAnalogLocator_Clone(IAnalogLocator* This,ILocator **NewLocator) {
+    return This->lpVtbl->Clone(This,NewLocator);
+}
+/*** IAnalogLocator methods ***/
+static FORCEINLINE HRESULT IAnalogLocator_get_VideoStandard(IAnalogLocator* This,AnalogVideoStandard *AVS) {
+    return This->lpVtbl->get_VideoStandard(This,AVS);
+}
+static FORCEINLINE HRESULT IAnalogLocator_put_VideoStandard(IAnalogLocator* This,AnalogVideoStandard AVS) {
+    return This->lpVtbl->put_VideoStandard(This,AVS);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IAnalogLocator_get_VideoStandard_Proxy(
+    IAnalogLocator* This,
+    AnalogVideoStandard *AVS);
+void __RPC_STUB IAnalogLocator_get_VideoStandard_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAnalogLocator_put_VideoStandard_Proxy(
+    IAnalogLocator* This,
+    AnalogVideoStandard AVS);
+void __RPC_STUB IAnalogLocator_put_VideoStandard_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IAnalogLocator_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDigitalLocator interface
+ */
+#ifndef __IDigitalLocator_INTERFACE_DEFINED__
+#define __IDigitalLocator_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDigitalLocator, 0x19b595d8, 0x839a, 0x47f0, 0x96,0xdf, 0x4f,0x19,0x4f,0x3c,0x76,0x8c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("19b595d8-839a-47f0-96df-4f194f3c768c")
+IDigitalLocator : public ILocator
+{
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDigitalLocator, 0x19b595d8, 0x839a, 0x47f0, 0x96,0xdf, 0x4f,0x19,0x4f,0x3c,0x76,0x8c)
+#endif
+#else
+typedef struct IDigitalLocatorVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDigitalLocator* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDigitalLocator* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDigitalLocator* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IDigitalLocator* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IDigitalLocator* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IDigitalLocator* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IDigitalLocator* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ILocator methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_CarrierFrequency)(
+        IDigitalLocator* This,
+        LONG *Frequency);
+
+    HRESULT (STDMETHODCALLTYPE *put_CarrierFrequency)(
+        IDigitalLocator* This,
+        LONG Frequency);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFEC)(
+        IDigitalLocator* This,
+        FECMethod *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFEC)(
+        IDigitalLocator* This,
+        FECMethod FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFECRate)(
+        IDigitalLocator* This,
+        BinaryConvolutionCodeRate *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFECRate)(
+        IDigitalLocator* This,
+        BinaryConvolutionCodeRate FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFEC)(
+        IDigitalLocator* This,
+        FECMethod *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFEC)(
+        IDigitalLocator* This,
+        FECMethod FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFECRate)(
+        IDigitalLocator* This,
+        BinaryConvolutionCodeRate *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFECRate)(
+        IDigitalLocator* This,
+        BinaryConvolutionCodeRate FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_Modulation)(
+        IDigitalLocator* This,
+        ModulationType *Modulation);
+
+    HRESULT (STDMETHODCALLTYPE *put_Modulation)(
+        IDigitalLocator* This,
+        ModulationType Modulation);
+
+    HRESULT (STDMETHODCALLTYPE *get_SymbolRate)(
+        IDigitalLocator* This,
+        LONG *Rate);
+
+    HRESULT (STDMETHODCALLTYPE *put_SymbolRate)(
+        IDigitalLocator* This,
+        LONG Rate);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IDigitalLocator* This,
+        ILocator **NewLocator);
+
+    END_INTERFACE
+} IDigitalLocatorVtbl;
+interface IDigitalLocator {
+    CONST_VTBL IDigitalLocatorVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDigitalLocator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDigitalLocator_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDigitalLocator_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IDigitalLocator_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IDigitalLocator_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IDigitalLocator_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IDigitalLocator_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ILocator methods ***/
+#define IDigitalLocator_get_CarrierFrequency(This,Frequency) (This)->lpVtbl->get_CarrierFrequency(This,Frequency)
+#define IDigitalLocator_put_CarrierFrequency(This,Frequency) (This)->lpVtbl->put_CarrierFrequency(This,Frequency)
+#define IDigitalLocator_get_InnerFEC(This,FEC) (This)->lpVtbl->get_InnerFEC(This,FEC)
+#define IDigitalLocator_put_InnerFEC(This,FEC) (This)->lpVtbl->put_InnerFEC(This,FEC)
+#define IDigitalLocator_get_InnerFECRate(This,FEC) (This)->lpVtbl->get_InnerFECRate(This,FEC)
+#define IDigitalLocator_put_InnerFECRate(This,FEC) (This)->lpVtbl->put_InnerFECRate(This,FEC)
+#define IDigitalLocator_get_OuterFEC(This,FEC) (This)->lpVtbl->get_OuterFEC(This,FEC)
+#define IDigitalLocator_put_OuterFEC(This,FEC) (This)->lpVtbl->put_OuterFEC(This,FEC)
+#define IDigitalLocator_get_OuterFECRate(This,FEC) (This)->lpVtbl->get_OuterFECRate(This,FEC)
+#define IDigitalLocator_put_OuterFECRate(This,FEC) (This)->lpVtbl->put_OuterFECRate(This,FEC)
+#define IDigitalLocator_get_Modulation(This,Modulation) (This)->lpVtbl->get_Modulation(This,Modulation)
+#define IDigitalLocator_put_Modulation(This,Modulation) (This)->lpVtbl->put_Modulation(This,Modulation)
+#define IDigitalLocator_get_SymbolRate(This,Rate) (This)->lpVtbl->get_SymbolRate(This,Rate)
+#define IDigitalLocator_put_SymbolRate(This,Rate) (This)->lpVtbl->put_SymbolRate(This,Rate)
+#define IDigitalLocator_Clone(This,NewLocator) (This)->lpVtbl->Clone(This,NewLocator)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDigitalLocator_QueryInterface(IDigitalLocator* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDigitalLocator_AddRef(IDigitalLocator* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDigitalLocator_Release(IDigitalLocator* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IDigitalLocator_GetTypeInfoCount(IDigitalLocator* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IDigitalLocator_GetTypeInfo(IDigitalLocator* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IDigitalLocator_GetIDsOfNames(IDigitalLocator* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IDigitalLocator_Invoke(IDigitalLocator* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ILocator methods ***/
+static FORCEINLINE HRESULT IDigitalLocator_get_CarrierFrequency(IDigitalLocator* This,LONG *Frequency) {
+    return This->lpVtbl->get_CarrierFrequency(This,Frequency);
+}
+static FORCEINLINE HRESULT IDigitalLocator_put_CarrierFrequency(IDigitalLocator* This,LONG Frequency) {
+    return This->lpVtbl->put_CarrierFrequency(This,Frequency);
+}
+static FORCEINLINE HRESULT IDigitalLocator_get_InnerFEC(IDigitalLocator* This,FECMethod *FEC) {
+    return This->lpVtbl->get_InnerFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDigitalLocator_put_InnerFEC(IDigitalLocator* This,FECMethod FEC) {
+    return This->lpVtbl->put_InnerFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDigitalLocator_get_InnerFECRate(IDigitalLocator* This,BinaryConvolutionCodeRate *FEC) {
+    return This->lpVtbl->get_InnerFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDigitalLocator_put_InnerFECRate(IDigitalLocator* This,BinaryConvolutionCodeRate FEC) {
+    return This->lpVtbl->put_InnerFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDigitalLocator_get_OuterFEC(IDigitalLocator* This,FECMethod *FEC) {
+    return This->lpVtbl->get_OuterFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDigitalLocator_put_OuterFEC(IDigitalLocator* This,FECMethod FEC) {
+    return This->lpVtbl->put_OuterFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDigitalLocator_get_OuterFECRate(IDigitalLocator* This,BinaryConvolutionCodeRate *FEC) {
+    return This->lpVtbl->get_OuterFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDigitalLocator_put_OuterFECRate(IDigitalLocator* This,BinaryConvolutionCodeRate FEC) {
+    return This->lpVtbl->put_OuterFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDigitalLocator_get_Modulation(IDigitalLocator* This,ModulationType *Modulation) {
+    return This->lpVtbl->get_Modulation(This,Modulation);
+}
+static FORCEINLINE HRESULT IDigitalLocator_put_Modulation(IDigitalLocator* This,ModulationType Modulation) {
+    return This->lpVtbl->put_Modulation(This,Modulation);
+}
+static FORCEINLINE HRESULT IDigitalLocator_get_SymbolRate(IDigitalLocator* This,LONG *Rate) {
+    return This->lpVtbl->get_SymbolRate(This,Rate);
+}
+static FORCEINLINE HRESULT IDigitalLocator_put_SymbolRate(IDigitalLocator* This,LONG Rate) {
+    return This->lpVtbl->put_SymbolRate(This,Rate);
+}
+static FORCEINLINE HRESULT IDigitalLocator_Clone(IDigitalLocator* This,ILocator **NewLocator) {
+    return This->lpVtbl->Clone(This,NewLocator);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDigitalLocator_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IATSCLocator interface
+ */
+#ifndef __IATSCLocator_INTERFACE_DEFINED__
+#define __IATSCLocator_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IATSCLocator, 0xbf8d986f, 0x8c2b, 0x4131, 0x94,0xd7, 0x4d,0x3d,0x9f,0xcc,0x21,0xef);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("bf8d986f-8c2b-4131-94d7-4d3d9fcc21ef")
+IATSCLocator : public IDigitalLocator
+{
+    virtual HRESULT STDMETHODCALLTYPE get_PhysicalChannel(
+        LONG *PhysicalChannel) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_PhysicalChannel(
+        LONG PhysicalChannel) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_TSID(
+        LONG *TSID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_TSID(
+        LONG TSID) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IATSCLocator, 0xbf8d986f, 0x8c2b, 0x4131, 0x94,0xd7, 0x4d,0x3d,0x9f,0xcc,0x21,0xef)
+#endif
+#else
+typedef struct IATSCLocatorVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IATSCLocator* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IATSCLocator* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IATSCLocator* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IATSCLocator* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IATSCLocator* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IATSCLocator* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IATSCLocator* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ILocator methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_CarrierFrequency)(
+        IATSCLocator* This,
+        LONG *Frequency);
+
+    HRESULT (STDMETHODCALLTYPE *put_CarrierFrequency)(
+        IATSCLocator* This,
+        LONG Frequency);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFEC)(
+        IATSCLocator* This,
+        FECMethod *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFEC)(
+        IATSCLocator* This,
+        FECMethod FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFECRate)(
+        IATSCLocator* This,
+        BinaryConvolutionCodeRate *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFECRate)(
+        IATSCLocator* This,
+        BinaryConvolutionCodeRate FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFEC)(
+        IATSCLocator* This,
+        FECMethod *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFEC)(
+        IATSCLocator* This,
+        FECMethod FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFECRate)(
+        IATSCLocator* This,
+        BinaryConvolutionCodeRate *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFECRate)(
+        IATSCLocator* This,
+        BinaryConvolutionCodeRate FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_Modulation)(
+        IATSCLocator* This,
+        ModulationType *Modulation);
+
+    HRESULT (STDMETHODCALLTYPE *put_Modulation)(
+        IATSCLocator* This,
+        ModulationType Modulation);
+
+    HRESULT (STDMETHODCALLTYPE *get_SymbolRate)(
+        IATSCLocator* This,
+        LONG *Rate);
+
+    HRESULT (STDMETHODCALLTYPE *put_SymbolRate)(
+        IATSCLocator* This,
+        LONG Rate);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IATSCLocator* This,
+        ILocator **NewLocator);
+
+    /*** IATSCLocator methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_PhysicalChannel)(
+        IATSCLocator* This,
+        LONG *PhysicalChannel);
+
+    HRESULT (STDMETHODCALLTYPE *put_PhysicalChannel)(
+        IATSCLocator* This,
+        LONG PhysicalChannel);
+
+    HRESULT (STDMETHODCALLTYPE *get_TSID)(
+        IATSCLocator* This,
+        LONG *TSID);
+
+    HRESULT (STDMETHODCALLTYPE *put_TSID)(
+        IATSCLocator* This,
+        LONG TSID);
+
+    END_INTERFACE
+} IATSCLocatorVtbl;
+interface IATSCLocator {
+    CONST_VTBL IATSCLocatorVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IATSCLocator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IATSCLocator_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IATSCLocator_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IATSCLocator_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IATSCLocator_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IATSCLocator_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IATSCLocator_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ILocator methods ***/
+#define IATSCLocator_get_CarrierFrequency(This,Frequency) (This)->lpVtbl->get_CarrierFrequency(This,Frequency)
+#define IATSCLocator_put_CarrierFrequency(This,Frequency) (This)->lpVtbl->put_CarrierFrequency(This,Frequency)
+#define IATSCLocator_get_InnerFEC(This,FEC) (This)->lpVtbl->get_InnerFEC(This,FEC)
+#define IATSCLocator_put_InnerFEC(This,FEC) (This)->lpVtbl->put_InnerFEC(This,FEC)
+#define IATSCLocator_get_InnerFECRate(This,FEC) (This)->lpVtbl->get_InnerFECRate(This,FEC)
+#define IATSCLocator_put_InnerFECRate(This,FEC) (This)->lpVtbl->put_InnerFECRate(This,FEC)
+#define IATSCLocator_get_OuterFEC(This,FEC) (This)->lpVtbl->get_OuterFEC(This,FEC)
+#define IATSCLocator_put_OuterFEC(This,FEC) (This)->lpVtbl->put_OuterFEC(This,FEC)
+#define IATSCLocator_get_OuterFECRate(This,FEC) (This)->lpVtbl->get_OuterFECRate(This,FEC)
+#define IATSCLocator_put_OuterFECRate(This,FEC) (This)->lpVtbl->put_OuterFECRate(This,FEC)
+#define IATSCLocator_get_Modulation(This,Modulation) (This)->lpVtbl->get_Modulation(This,Modulation)
+#define IATSCLocator_put_Modulation(This,Modulation) (This)->lpVtbl->put_Modulation(This,Modulation)
+#define IATSCLocator_get_SymbolRate(This,Rate) (This)->lpVtbl->get_SymbolRate(This,Rate)
+#define IATSCLocator_put_SymbolRate(This,Rate) (This)->lpVtbl->put_SymbolRate(This,Rate)
+#define IATSCLocator_Clone(This,NewLocator) (This)->lpVtbl->Clone(This,NewLocator)
+/*** IATSCLocator methods ***/
+#define IATSCLocator_get_PhysicalChannel(This,PhysicalChannel) (This)->lpVtbl->get_PhysicalChannel(This,PhysicalChannel)
+#define IATSCLocator_put_PhysicalChannel(This,PhysicalChannel) (This)->lpVtbl->put_PhysicalChannel(This,PhysicalChannel)
+#define IATSCLocator_get_TSID(This,TSID) (This)->lpVtbl->get_TSID(This,TSID)
+#define IATSCLocator_put_TSID(This,TSID) (This)->lpVtbl->put_TSID(This,TSID)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IATSCLocator_QueryInterface(IATSCLocator* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IATSCLocator_AddRef(IATSCLocator* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IATSCLocator_Release(IATSCLocator* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IATSCLocator_GetTypeInfoCount(IATSCLocator* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IATSCLocator_GetTypeInfo(IATSCLocator* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IATSCLocator_GetIDsOfNames(IATSCLocator* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IATSCLocator_Invoke(IATSCLocator* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ILocator methods ***/
+static FORCEINLINE HRESULT IATSCLocator_get_CarrierFrequency(IATSCLocator* This,LONG *Frequency) {
+    return This->lpVtbl->get_CarrierFrequency(This,Frequency);
+}
+static FORCEINLINE HRESULT IATSCLocator_put_CarrierFrequency(IATSCLocator* This,LONG Frequency) {
+    return This->lpVtbl->put_CarrierFrequency(This,Frequency);
+}
+static FORCEINLINE HRESULT IATSCLocator_get_InnerFEC(IATSCLocator* This,FECMethod *FEC) {
+    return This->lpVtbl->get_InnerFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IATSCLocator_put_InnerFEC(IATSCLocator* This,FECMethod FEC) {
+    return This->lpVtbl->put_InnerFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IATSCLocator_get_InnerFECRate(IATSCLocator* This,BinaryConvolutionCodeRate *FEC) {
+    return This->lpVtbl->get_InnerFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IATSCLocator_put_InnerFECRate(IATSCLocator* This,BinaryConvolutionCodeRate FEC) {
+    return This->lpVtbl->put_InnerFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IATSCLocator_get_OuterFEC(IATSCLocator* This,FECMethod *FEC) {
+    return This->lpVtbl->get_OuterFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IATSCLocator_put_OuterFEC(IATSCLocator* This,FECMethod FEC) {
+    return This->lpVtbl->put_OuterFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IATSCLocator_get_OuterFECRate(IATSCLocator* This,BinaryConvolutionCodeRate *FEC) {
+    return This->lpVtbl->get_OuterFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IATSCLocator_put_OuterFECRate(IATSCLocator* This,BinaryConvolutionCodeRate FEC) {
+    return This->lpVtbl->put_OuterFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IATSCLocator_get_Modulation(IATSCLocator* This,ModulationType *Modulation) {
+    return This->lpVtbl->get_Modulation(This,Modulation);
+}
+static FORCEINLINE HRESULT IATSCLocator_put_Modulation(IATSCLocator* This,ModulationType Modulation) {
+    return This->lpVtbl->put_Modulation(This,Modulation);
+}
+static FORCEINLINE HRESULT IATSCLocator_get_SymbolRate(IATSCLocator* This,LONG *Rate) {
+    return This->lpVtbl->get_SymbolRate(This,Rate);
+}
+static FORCEINLINE HRESULT IATSCLocator_put_SymbolRate(IATSCLocator* This,LONG Rate) {
+    return This->lpVtbl->put_SymbolRate(This,Rate);
+}
+static FORCEINLINE HRESULT IATSCLocator_Clone(IATSCLocator* This,ILocator **NewLocator) {
+    return This->lpVtbl->Clone(This,NewLocator);
+}
+/*** IATSCLocator methods ***/
+static FORCEINLINE HRESULT IATSCLocator_get_PhysicalChannel(IATSCLocator* This,LONG *PhysicalChannel) {
+    return This->lpVtbl->get_PhysicalChannel(This,PhysicalChannel);
+}
+static FORCEINLINE HRESULT IATSCLocator_put_PhysicalChannel(IATSCLocator* This,LONG PhysicalChannel) {
+    return This->lpVtbl->put_PhysicalChannel(This,PhysicalChannel);
+}
+static FORCEINLINE HRESULT IATSCLocator_get_TSID(IATSCLocator* This,LONG *TSID) {
+    return This->lpVtbl->get_TSID(This,TSID);
+}
+static FORCEINLINE HRESULT IATSCLocator_put_TSID(IATSCLocator* This,LONG TSID) {
+    return This->lpVtbl->put_TSID(This,TSID);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IATSCLocator_get_PhysicalChannel_Proxy(
+    IATSCLocator* This,
+    LONG *PhysicalChannel);
+void __RPC_STUB IATSCLocator_get_PhysicalChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IATSCLocator_put_PhysicalChannel_Proxy(
+    IATSCLocator* This,
+    LONG PhysicalChannel);
+void __RPC_STUB IATSCLocator_put_PhysicalChannel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IATSCLocator_get_TSID_Proxy(
+    IATSCLocator* This,
+    LONG *TSID);
+void __RPC_STUB IATSCLocator_get_TSID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IATSCLocator_put_TSID_Proxy(
+    IATSCLocator* This,
+    LONG TSID);
+void __RPC_STUB IATSCLocator_put_TSID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IATSCLocator_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IATSCLocator2 interface
+ */
+#ifndef __IATSCLocator2_INTERFACE_DEFINED__
+#define __IATSCLocator2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IATSCLocator2, 0x612aa885, 0x66cf, 0x4090, 0xba,0x0a, 0x56,0x6f,0x53,0x12,0xe4,0xca);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("612aa885-66cf-4090-ba0a-566f5312e4ca")
+IATSCLocator2 : public IATSCLocator
+{
+    virtual HRESULT STDMETHODCALLTYPE get_ProgramNumber(
+        LONG *ProgramNumber) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_ProgramNumber(
+        LONG ProgramNumber) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IATSCLocator2, 0x612aa885, 0x66cf, 0x4090, 0xba,0x0a, 0x56,0x6f,0x53,0x12,0xe4,0xca)
+#endif
+#else
+typedef struct IATSCLocator2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IATSCLocator2* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IATSCLocator2* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IATSCLocator2* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IATSCLocator2* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IATSCLocator2* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IATSCLocator2* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IATSCLocator2* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ILocator methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_CarrierFrequency)(
+        IATSCLocator2* This,
+        LONG *Frequency);
+
+    HRESULT (STDMETHODCALLTYPE *put_CarrierFrequency)(
+        IATSCLocator2* This,
+        LONG Frequency);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFEC)(
+        IATSCLocator2* This,
+        FECMethod *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFEC)(
+        IATSCLocator2* This,
+        FECMethod FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFECRate)(
+        IATSCLocator2* This,
+        BinaryConvolutionCodeRate *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFECRate)(
+        IATSCLocator2* This,
+        BinaryConvolutionCodeRate FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFEC)(
+        IATSCLocator2* This,
+        FECMethod *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFEC)(
+        IATSCLocator2* This,
+        FECMethod FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFECRate)(
+        IATSCLocator2* This,
+        BinaryConvolutionCodeRate *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFECRate)(
+        IATSCLocator2* This,
+        BinaryConvolutionCodeRate FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_Modulation)(
+        IATSCLocator2* This,
+        ModulationType *Modulation);
+
+    HRESULT (STDMETHODCALLTYPE *put_Modulation)(
+        IATSCLocator2* This,
+        ModulationType Modulation);
+
+    HRESULT (STDMETHODCALLTYPE *get_SymbolRate)(
+        IATSCLocator2* This,
+        LONG *Rate);
+
+    HRESULT (STDMETHODCALLTYPE *put_SymbolRate)(
+        IATSCLocator2* This,
+        LONG Rate);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IATSCLocator2* This,
+        ILocator **NewLocator);
+
+    /*** IATSCLocator methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_PhysicalChannel)(
+        IATSCLocator2* This,
+        LONG *PhysicalChannel);
+
+    HRESULT (STDMETHODCALLTYPE *put_PhysicalChannel)(
+        IATSCLocator2* This,
+        LONG PhysicalChannel);
+
+    HRESULT (STDMETHODCALLTYPE *get_TSID)(
+        IATSCLocator2* This,
+        LONG *TSID);
+
+    HRESULT (STDMETHODCALLTYPE *put_TSID)(
+        IATSCLocator2* This,
+        LONG TSID);
+
+    /*** IATSCLocator2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_ProgramNumber)(
+        IATSCLocator2* This,
+        LONG *ProgramNumber);
+
+    HRESULT (STDMETHODCALLTYPE *put_ProgramNumber)(
+        IATSCLocator2* This,
+        LONG ProgramNumber);
+
+    END_INTERFACE
+} IATSCLocator2Vtbl;
+interface IATSCLocator2 {
+    CONST_VTBL IATSCLocator2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IATSCLocator2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IATSCLocator2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IATSCLocator2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IATSCLocator2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IATSCLocator2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IATSCLocator2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IATSCLocator2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ILocator methods ***/
+#define IATSCLocator2_get_CarrierFrequency(This,Frequency) (This)->lpVtbl->get_CarrierFrequency(This,Frequency)
+#define IATSCLocator2_put_CarrierFrequency(This,Frequency) (This)->lpVtbl->put_CarrierFrequency(This,Frequency)
+#define IATSCLocator2_get_InnerFEC(This,FEC) (This)->lpVtbl->get_InnerFEC(This,FEC)
+#define IATSCLocator2_put_InnerFEC(This,FEC) (This)->lpVtbl->put_InnerFEC(This,FEC)
+#define IATSCLocator2_get_InnerFECRate(This,FEC) (This)->lpVtbl->get_InnerFECRate(This,FEC)
+#define IATSCLocator2_put_InnerFECRate(This,FEC) (This)->lpVtbl->put_InnerFECRate(This,FEC)
+#define IATSCLocator2_get_OuterFEC(This,FEC) (This)->lpVtbl->get_OuterFEC(This,FEC)
+#define IATSCLocator2_put_OuterFEC(This,FEC) (This)->lpVtbl->put_OuterFEC(This,FEC)
+#define IATSCLocator2_get_OuterFECRate(This,FEC) (This)->lpVtbl->get_OuterFECRate(This,FEC)
+#define IATSCLocator2_put_OuterFECRate(This,FEC) (This)->lpVtbl->put_OuterFECRate(This,FEC)
+#define IATSCLocator2_get_Modulation(This,Modulation) (This)->lpVtbl->get_Modulation(This,Modulation)
+#define IATSCLocator2_put_Modulation(This,Modulation) (This)->lpVtbl->put_Modulation(This,Modulation)
+#define IATSCLocator2_get_SymbolRate(This,Rate) (This)->lpVtbl->get_SymbolRate(This,Rate)
+#define IATSCLocator2_put_SymbolRate(This,Rate) (This)->lpVtbl->put_SymbolRate(This,Rate)
+#define IATSCLocator2_Clone(This,NewLocator) (This)->lpVtbl->Clone(This,NewLocator)
+/*** IATSCLocator methods ***/
+#define IATSCLocator2_get_PhysicalChannel(This,PhysicalChannel) (This)->lpVtbl->get_PhysicalChannel(This,PhysicalChannel)
+#define IATSCLocator2_put_PhysicalChannel(This,PhysicalChannel) (This)->lpVtbl->put_PhysicalChannel(This,PhysicalChannel)
+#define IATSCLocator2_get_TSID(This,TSID) (This)->lpVtbl->get_TSID(This,TSID)
+#define IATSCLocator2_put_TSID(This,TSID) (This)->lpVtbl->put_TSID(This,TSID)
+/*** IATSCLocator2 methods ***/
+#define IATSCLocator2_get_ProgramNumber(This,ProgramNumber) (This)->lpVtbl->get_ProgramNumber(This,ProgramNumber)
+#define IATSCLocator2_put_ProgramNumber(This,ProgramNumber) (This)->lpVtbl->put_ProgramNumber(This,ProgramNumber)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IATSCLocator2_QueryInterface(IATSCLocator2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IATSCLocator2_AddRef(IATSCLocator2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IATSCLocator2_Release(IATSCLocator2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IATSCLocator2_GetTypeInfoCount(IATSCLocator2* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IATSCLocator2_GetTypeInfo(IATSCLocator2* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IATSCLocator2_GetIDsOfNames(IATSCLocator2* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IATSCLocator2_Invoke(IATSCLocator2* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ILocator methods ***/
+static FORCEINLINE HRESULT IATSCLocator2_get_CarrierFrequency(IATSCLocator2* This,LONG *Frequency) {
+    return This->lpVtbl->get_CarrierFrequency(This,Frequency);
+}
+static FORCEINLINE HRESULT IATSCLocator2_put_CarrierFrequency(IATSCLocator2* This,LONG Frequency) {
+    return This->lpVtbl->put_CarrierFrequency(This,Frequency);
+}
+static FORCEINLINE HRESULT IATSCLocator2_get_InnerFEC(IATSCLocator2* This,FECMethod *FEC) {
+    return This->lpVtbl->get_InnerFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IATSCLocator2_put_InnerFEC(IATSCLocator2* This,FECMethod FEC) {
+    return This->lpVtbl->put_InnerFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IATSCLocator2_get_InnerFECRate(IATSCLocator2* This,BinaryConvolutionCodeRate *FEC) {
+    return This->lpVtbl->get_InnerFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IATSCLocator2_put_InnerFECRate(IATSCLocator2* This,BinaryConvolutionCodeRate FEC) {
+    return This->lpVtbl->put_InnerFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IATSCLocator2_get_OuterFEC(IATSCLocator2* This,FECMethod *FEC) {
+    return This->lpVtbl->get_OuterFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IATSCLocator2_put_OuterFEC(IATSCLocator2* This,FECMethod FEC) {
+    return This->lpVtbl->put_OuterFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IATSCLocator2_get_OuterFECRate(IATSCLocator2* This,BinaryConvolutionCodeRate *FEC) {
+    return This->lpVtbl->get_OuterFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IATSCLocator2_put_OuterFECRate(IATSCLocator2* This,BinaryConvolutionCodeRate FEC) {
+    return This->lpVtbl->put_OuterFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IATSCLocator2_get_Modulation(IATSCLocator2* This,ModulationType *Modulation) {
+    return This->lpVtbl->get_Modulation(This,Modulation);
+}
+static FORCEINLINE HRESULT IATSCLocator2_put_Modulation(IATSCLocator2* This,ModulationType Modulation) {
+    return This->lpVtbl->put_Modulation(This,Modulation);
+}
+static FORCEINLINE HRESULT IATSCLocator2_get_SymbolRate(IATSCLocator2* This,LONG *Rate) {
+    return This->lpVtbl->get_SymbolRate(This,Rate);
+}
+static FORCEINLINE HRESULT IATSCLocator2_put_SymbolRate(IATSCLocator2* This,LONG Rate) {
+    return This->lpVtbl->put_SymbolRate(This,Rate);
+}
+static FORCEINLINE HRESULT IATSCLocator2_Clone(IATSCLocator2* This,ILocator **NewLocator) {
+    return This->lpVtbl->Clone(This,NewLocator);
+}
+/*** IATSCLocator methods ***/
+static FORCEINLINE HRESULT IATSCLocator2_get_PhysicalChannel(IATSCLocator2* This,LONG *PhysicalChannel) {
+    return This->lpVtbl->get_PhysicalChannel(This,PhysicalChannel);
+}
+static FORCEINLINE HRESULT IATSCLocator2_put_PhysicalChannel(IATSCLocator2* This,LONG PhysicalChannel) {
+    return This->lpVtbl->put_PhysicalChannel(This,PhysicalChannel);
+}
+static FORCEINLINE HRESULT IATSCLocator2_get_TSID(IATSCLocator2* This,LONG *TSID) {
+    return This->lpVtbl->get_TSID(This,TSID);
+}
+static FORCEINLINE HRESULT IATSCLocator2_put_TSID(IATSCLocator2* This,LONG TSID) {
+    return This->lpVtbl->put_TSID(This,TSID);
+}
+/*** IATSCLocator2 methods ***/
+static FORCEINLINE HRESULT IATSCLocator2_get_ProgramNumber(IATSCLocator2* This,LONG *ProgramNumber) {
+    return This->lpVtbl->get_ProgramNumber(This,ProgramNumber);
+}
+static FORCEINLINE HRESULT IATSCLocator2_put_ProgramNumber(IATSCLocator2* This,LONG ProgramNumber) {
+    return This->lpVtbl->put_ProgramNumber(This,ProgramNumber);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IATSCLocator2_get_ProgramNumber_Proxy(
+    IATSCLocator2* This,
+    LONG *ProgramNumber);
+void __RPC_STUB IATSCLocator2_get_ProgramNumber_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IATSCLocator2_put_ProgramNumber_Proxy(
+    IATSCLocator2* This,
+    LONG ProgramNumber);
+void __RPC_STUB IATSCLocator2_put_ProgramNumber_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IATSCLocator2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDigitalCableLocator interface
+ */
+#ifndef __IDigitalCableLocator_INTERFACE_DEFINED__
+#define __IDigitalCableLocator_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDigitalCableLocator, 0x48f66a11, 0x171a, 0x419a, 0x95,0x25, 0xbe,0xee,0xcd,0x51,0x58,0x4c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("48f66a11-171a-419a-9525-beeecd51584c")
+IDigitalCableLocator : public IATSCLocator2
+{
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDigitalCableLocator, 0x48f66a11, 0x171a, 0x419a, 0x95,0x25, 0xbe,0xee,0xcd,0x51,0x58,0x4c)
+#endif
+#else
+typedef struct IDigitalCableLocatorVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDigitalCableLocator* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDigitalCableLocator* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDigitalCableLocator* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IDigitalCableLocator* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IDigitalCableLocator* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IDigitalCableLocator* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IDigitalCableLocator* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ILocator methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_CarrierFrequency)(
+        IDigitalCableLocator* This,
+        LONG *Frequency);
+
+    HRESULT (STDMETHODCALLTYPE *put_CarrierFrequency)(
+        IDigitalCableLocator* This,
+        LONG Frequency);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFEC)(
+        IDigitalCableLocator* This,
+        FECMethod *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFEC)(
+        IDigitalCableLocator* This,
+        FECMethod FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFECRate)(
+        IDigitalCableLocator* This,
+        BinaryConvolutionCodeRate *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFECRate)(
+        IDigitalCableLocator* This,
+        BinaryConvolutionCodeRate FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFEC)(
+        IDigitalCableLocator* This,
+        FECMethod *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFEC)(
+        IDigitalCableLocator* This,
+        FECMethod FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFECRate)(
+        IDigitalCableLocator* This,
+        BinaryConvolutionCodeRate *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFECRate)(
+        IDigitalCableLocator* This,
+        BinaryConvolutionCodeRate FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_Modulation)(
+        IDigitalCableLocator* This,
+        ModulationType *Modulation);
+
+    HRESULT (STDMETHODCALLTYPE *put_Modulation)(
+        IDigitalCableLocator* This,
+        ModulationType Modulation);
+
+    HRESULT (STDMETHODCALLTYPE *get_SymbolRate)(
+        IDigitalCableLocator* This,
+        LONG *Rate);
+
+    HRESULT (STDMETHODCALLTYPE *put_SymbolRate)(
+        IDigitalCableLocator* This,
+        LONG Rate);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IDigitalCableLocator* This,
+        ILocator **NewLocator);
+
+    /*** IATSCLocator methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_PhysicalChannel)(
+        IDigitalCableLocator* This,
+        LONG *PhysicalChannel);
+
+    HRESULT (STDMETHODCALLTYPE *put_PhysicalChannel)(
+        IDigitalCableLocator* This,
+        LONG PhysicalChannel);
+
+    HRESULT (STDMETHODCALLTYPE *get_TSID)(
+        IDigitalCableLocator* This,
+        LONG *TSID);
+
+    HRESULT (STDMETHODCALLTYPE *put_TSID)(
+        IDigitalCableLocator* This,
+        LONG TSID);
+
+    /*** IATSCLocator2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_ProgramNumber)(
+        IDigitalCableLocator* This,
+        LONG *ProgramNumber);
+
+    HRESULT (STDMETHODCALLTYPE *put_ProgramNumber)(
+        IDigitalCableLocator* This,
+        LONG ProgramNumber);
+
+    END_INTERFACE
+} IDigitalCableLocatorVtbl;
+interface IDigitalCableLocator {
+    CONST_VTBL IDigitalCableLocatorVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDigitalCableLocator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDigitalCableLocator_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDigitalCableLocator_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IDigitalCableLocator_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IDigitalCableLocator_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IDigitalCableLocator_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IDigitalCableLocator_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ILocator methods ***/
+#define IDigitalCableLocator_get_CarrierFrequency(This,Frequency) (This)->lpVtbl->get_CarrierFrequency(This,Frequency)
+#define IDigitalCableLocator_put_CarrierFrequency(This,Frequency) (This)->lpVtbl->put_CarrierFrequency(This,Frequency)
+#define IDigitalCableLocator_get_InnerFEC(This,FEC) (This)->lpVtbl->get_InnerFEC(This,FEC)
+#define IDigitalCableLocator_put_InnerFEC(This,FEC) (This)->lpVtbl->put_InnerFEC(This,FEC)
+#define IDigitalCableLocator_get_InnerFECRate(This,FEC) (This)->lpVtbl->get_InnerFECRate(This,FEC)
+#define IDigitalCableLocator_put_InnerFECRate(This,FEC) (This)->lpVtbl->put_InnerFECRate(This,FEC)
+#define IDigitalCableLocator_get_OuterFEC(This,FEC) (This)->lpVtbl->get_OuterFEC(This,FEC)
+#define IDigitalCableLocator_put_OuterFEC(This,FEC) (This)->lpVtbl->put_OuterFEC(This,FEC)
+#define IDigitalCableLocator_get_OuterFECRate(This,FEC) (This)->lpVtbl->get_OuterFECRate(This,FEC)
+#define IDigitalCableLocator_put_OuterFECRate(This,FEC) (This)->lpVtbl->put_OuterFECRate(This,FEC)
+#define IDigitalCableLocator_get_Modulation(This,Modulation) (This)->lpVtbl->get_Modulation(This,Modulation)
+#define IDigitalCableLocator_put_Modulation(This,Modulation) (This)->lpVtbl->put_Modulation(This,Modulation)
+#define IDigitalCableLocator_get_SymbolRate(This,Rate) (This)->lpVtbl->get_SymbolRate(This,Rate)
+#define IDigitalCableLocator_put_SymbolRate(This,Rate) (This)->lpVtbl->put_SymbolRate(This,Rate)
+#define IDigitalCableLocator_Clone(This,NewLocator) (This)->lpVtbl->Clone(This,NewLocator)
+/*** IATSCLocator methods ***/
+#define IDigitalCableLocator_get_PhysicalChannel(This,PhysicalChannel) (This)->lpVtbl->get_PhysicalChannel(This,PhysicalChannel)
+#define IDigitalCableLocator_put_PhysicalChannel(This,PhysicalChannel) (This)->lpVtbl->put_PhysicalChannel(This,PhysicalChannel)
+#define IDigitalCableLocator_get_TSID(This,TSID) (This)->lpVtbl->get_TSID(This,TSID)
+#define IDigitalCableLocator_put_TSID(This,TSID) (This)->lpVtbl->put_TSID(This,TSID)
+/*** IATSCLocator2 methods ***/
+#define IDigitalCableLocator_get_ProgramNumber(This,ProgramNumber) (This)->lpVtbl->get_ProgramNumber(This,ProgramNumber)
+#define IDigitalCableLocator_put_ProgramNumber(This,ProgramNumber) (This)->lpVtbl->put_ProgramNumber(This,ProgramNumber)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDigitalCableLocator_QueryInterface(IDigitalCableLocator* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDigitalCableLocator_AddRef(IDigitalCableLocator* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDigitalCableLocator_Release(IDigitalCableLocator* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IDigitalCableLocator_GetTypeInfoCount(IDigitalCableLocator* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IDigitalCableLocator_GetTypeInfo(IDigitalCableLocator* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IDigitalCableLocator_GetIDsOfNames(IDigitalCableLocator* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IDigitalCableLocator_Invoke(IDigitalCableLocator* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ILocator methods ***/
+static FORCEINLINE HRESULT IDigitalCableLocator_get_CarrierFrequency(IDigitalCableLocator* This,LONG *Frequency) {
+    return This->lpVtbl->get_CarrierFrequency(This,Frequency);
+}
+static FORCEINLINE HRESULT IDigitalCableLocator_put_CarrierFrequency(IDigitalCableLocator* This,LONG Frequency) {
+    return This->lpVtbl->put_CarrierFrequency(This,Frequency);
+}
+static FORCEINLINE HRESULT IDigitalCableLocator_get_InnerFEC(IDigitalCableLocator* This,FECMethod *FEC) {
+    return This->lpVtbl->get_InnerFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDigitalCableLocator_put_InnerFEC(IDigitalCableLocator* This,FECMethod FEC) {
+    return This->lpVtbl->put_InnerFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDigitalCableLocator_get_InnerFECRate(IDigitalCableLocator* This,BinaryConvolutionCodeRate *FEC) {
+    return This->lpVtbl->get_InnerFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDigitalCableLocator_put_InnerFECRate(IDigitalCableLocator* This,BinaryConvolutionCodeRate FEC) {
+    return This->lpVtbl->put_InnerFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDigitalCableLocator_get_OuterFEC(IDigitalCableLocator* This,FECMethod *FEC) {
+    return This->lpVtbl->get_OuterFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDigitalCableLocator_put_OuterFEC(IDigitalCableLocator* This,FECMethod FEC) {
+    return This->lpVtbl->put_OuterFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDigitalCableLocator_get_OuterFECRate(IDigitalCableLocator* This,BinaryConvolutionCodeRate *FEC) {
+    return This->lpVtbl->get_OuterFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDigitalCableLocator_put_OuterFECRate(IDigitalCableLocator* This,BinaryConvolutionCodeRate FEC) {
+    return This->lpVtbl->put_OuterFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDigitalCableLocator_get_Modulation(IDigitalCableLocator* This,ModulationType *Modulation) {
+    return This->lpVtbl->get_Modulation(This,Modulation);
+}
+static FORCEINLINE HRESULT IDigitalCableLocator_put_Modulation(IDigitalCableLocator* This,ModulationType Modulation) {
+    return This->lpVtbl->put_Modulation(This,Modulation);
+}
+static FORCEINLINE HRESULT IDigitalCableLocator_get_SymbolRate(IDigitalCableLocator* This,LONG *Rate) {
+    return This->lpVtbl->get_SymbolRate(This,Rate);
+}
+static FORCEINLINE HRESULT IDigitalCableLocator_put_SymbolRate(IDigitalCableLocator* This,LONG Rate) {
+    return This->lpVtbl->put_SymbolRate(This,Rate);
+}
+static FORCEINLINE HRESULT IDigitalCableLocator_Clone(IDigitalCableLocator* This,ILocator **NewLocator) {
+    return This->lpVtbl->Clone(This,NewLocator);
+}
+/*** IATSCLocator methods ***/
+static FORCEINLINE HRESULT IDigitalCableLocator_get_PhysicalChannel(IDigitalCableLocator* This,LONG *PhysicalChannel) {
+    return This->lpVtbl->get_PhysicalChannel(This,PhysicalChannel);
+}
+static FORCEINLINE HRESULT IDigitalCableLocator_put_PhysicalChannel(IDigitalCableLocator* This,LONG PhysicalChannel) {
+    return This->lpVtbl->put_PhysicalChannel(This,PhysicalChannel);
+}
+static FORCEINLINE HRESULT IDigitalCableLocator_get_TSID(IDigitalCableLocator* This,LONG *TSID) {
+    return This->lpVtbl->get_TSID(This,TSID);
+}
+static FORCEINLINE HRESULT IDigitalCableLocator_put_TSID(IDigitalCableLocator* This,LONG TSID) {
+    return This->lpVtbl->put_TSID(This,TSID);
+}
+/*** IATSCLocator2 methods ***/
+static FORCEINLINE HRESULT IDigitalCableLocator_get_ProgramNumber(IDigitalCableLocator* This,LONG *ProgramNumber) {
+    return This->lpVtbl->get_ProgramNumber(This,ProgramNumber);
+}
+static FORCEINLINE HRESULT IDigitalCableLocator_put_ProgramNumber(IDigitalCableLocator* This,LONG ProgramNumber) {
+    return This->lpVtbl->put_ProgramNumber(This,ProgramNumber);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDigitalCableLocator_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDVBTLocator interface
+ */
+#ifndef __IDVBTLocator_INTERFACE_DEFINED__
+#define __IDVBTLocator_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDVBTLocator, 0x8664da16, 0xdda2, 0x42ac, 0x92,0x6a, 0xc1,0x8f,0x91,0x27,0xc3,0x02);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("8664da16-dda2-42ac-926a-c18f9127c302")
+IDVBTLocator : public IDigitalLocator
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Bandwidth(
+        LONG *BandWidthVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Bandwidth(
+        LONG BandwidthVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_LPInnerFEC(
+        FECMethod *FEC) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_LPInnerFEC(
+        FECMethod FEC) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_LPInnerFECRate(
+        BinaryConvolutionCodeRate *FEC) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_LPInnerFECRate(
+        BinaryConvolutionCodeRate FEC) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_HAlpha(
+        HierarchyAlpha *Alpha) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_HAlpha(
+        HierarchyAlpha Alpha) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Guard(
+        GuardInterval *GI) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Guard(
+        GuardInterval GI) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Mode(
+        TransmissionMode *mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Mode(
+        TransmissionMode mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_OtherFrequencyInUse(
+        VARIANT_BOOL *OtherFrequencyInUseVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_OtherFrequencyInUse(
+        VARIANT_BOOL OtherFrequencyInUseVal) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDVBTLocator, 0x8664da16, 0xdda2, 0x42ac, 0x92,0x6a, 0xc1,0x8f,0x91,0x27,0xc3,0x02)
+#endif
+#else
+typedef struct IDVBTLocatorVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDVBTLocator* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDVBTLocator* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDVBTLocator* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IDVBTLocator* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IDVBTLocator* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IDVBTLocator* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IDVBTLocator* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ILocator methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_CarrierFrequency)(
+        IDVBTLocator* This,
+        LONG *Frequency);
+
+    HRESULT (STDMETHODCALLTYPE *put_CarrierFrequency)(
+        IDVBTLocator* This,
+        LONG Frequency);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFEC)(
+        IDVBTLocator* This,
+        FECMethod *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFEC)(
+        IDVBTLocator* This,
+        FECMethod FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFECRate)(
+        IDVBTLocator* This,
+        BinaryConvolutionCodeRate *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFECRate)(
+        IDVBTLocator* This,
+        BinaryConvolutionCodeRate FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFEC)(
+        IDVBTLocator* This,
+        FECMethod *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFEC)(
+        IDVBTLocator* This,
+        FECMethod FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFECRate)(
+        IDVBTLocator* This,
+        BinaryConvolutionCodeRate *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFECRate)(
+        IDVBTLocator* This,
+        BinaryConvolutionCodeRate FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_Modulation)(
+        IDVBTLocator* This,
+        ModulationType *Modulation);
+
+    HRESULT (STDMETHODCALLTYPE *put_Modulation)(
+        IDVBTLocator* This,
+        ModulationType Modulation);
+
+    HRESULT (STDMETHODCALLTYPE *get_SymbolRate)(
+        IDVBTLocator* This,
+        LONG *Rate);
+
+    HRESULT (STDMETHODCALLTYPE *put_SymbolRate)(
+        IDVBTLocator* This,
+        LONG Rate);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IDVBTLocator* This,
+        ILocator **NewLocator);
+
+    /*** IDVBTLocator methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Bandwidth)(
+        IDVBTLocator* This,
+        LONG *BandWidthVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_Bandwidth)(
+        IDVBTLocator* This,
+        LONG BandwidthVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_LPInnerFEC)(
+        IDVBTLocator* This,
+        FECMethod *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_LPInnerFEC)(
+        IDVBTLocator* This,
+        FECMethod FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_LPInnerFECRate)(
+        IDVBTLocator* This,
+        BinaryConvolutionCodeRate *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_LPInnerFECRate)(
+        IDVBTLocator* This,
+        BinaryConvolutionCodeRate FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_HAlpha)(
+        IDVBTLocator* This,
+        HierarchyAlpha *Alpha);
+
+    HRESULT (STDMETHODCALLTYPE *put_HAlpha)(
+        IDVBTLocator* This,
+        HierarchyAlpha Alpha);
+
+    HRESULT (STDMETHODCALLTYPE *get_Guard)(
+        IDVBTLocator* This,
+        GuardInterval *GI);
+
+    HRESULT (STDMETHODCALLTYPE *put_Guard)(
+        IDVBTLocator* This,
+        GuardInterval GI);
+
+    HRESULT (STDMETHODCALLTYPE *get_Mode)(
+        IDVBTLocator* This,
+        TransmissionMode *mode);
+
+    HRESULT (STDMETHODCALLTYPE *put_Mode)(
+        IDVBTLocator* This,
+        TransmissionMode mode);
+
+    HRESULT (STDMETHODCALLTYPE *get_OtherFrequencyInUse)(
+        IDVBTLocator* This,
+        VARIANT_BOOL *OtherFrequencyInUseVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_OtherFrequencyInUse)(
+        IDVBTLocator* This,
+        VARIANT_BOOL OtherFrequencyInUseVal);
+
+    END_INTERFACE
+} IDVBTLocatorVtbl;
+interface IDVBTLocator {
+    CONST_VTBL IDVBTLocatorVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDVBTLocator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDVBTLocator_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDVBTLocator_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IDVBTLocator_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IDVBTLocator_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IDVBTLocator_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IDVBTLocator_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ILocator methods ***/
+#define IDVBTLocator_get_CarrierFrequency(This,Frequency) (This)->lpVtbl->get_CarrierFrequency(This,Frequency)
+#define IDVBTLocator_put_CarrierFrequency(This,Frequency) (This)->lpVtbl->put_CarrierFrequency(This,Frequency)
+#define IDVBTLocator_get_InnerFEC(This,FEC) (This)->lpVtbl->get_InnerFEC(This,FEC)
+#define IDVBTLocator_put_InnerFEC(This,FEC) (This)->lpVtbl->put_InnerFEC(This,FEC)
+#define IDVBTLocator_get_InnerFECRate(This,FEC) (This)->lpVtbl->get_InnerFECRate(This,FEC)
+#define IDVBTLocator_put_InnerFECRate(This,FEC) (This)->lpVtbl->put_InnerFECRate(This,FEC)
+#define IDVBTLocator_get_OuterFEC(This,FEC) (This)->lpVtbl->get_OuterFEC(This,FEC)
+#define IDVBTLocator_put_OuterFEC(This,FEC) (This)->lpVtbl->put_OuterFEC(This,FEC)
+#define IDVBTLocator_get_OuterFECRate(This,FEC) (This)->lpVtbl->get_OuterFECRate(This,FEC)
+#define IDVBTLocator_put_OuterFECRate(This,FEC) (This)->lpVtbl->put_OuterFECRate(This,FEC)
+#define IDVBTLocator_get_Modulation(This,Modulation) (This)->lpVtbl->get_Modulation(This,Modulation)
+#define IDVBTLocator_put_Modulation(This,Modulation) (This)->lpVtbl->put_Modulation(This,Modulation)
+#define IDVBTLocator_get_SymbolRate(This,Rate) (This)->lpVtbl->get_SymbolRate(This,Rate)
+#define IDVBTLocator_put_SymbolRate(This,Rate) (This)->lpVtbl->put_SymbolRate(This,Rate)
+#define IDVBTLocator_Clone(This,NewLocator) (This)->lpVtbl->Clone(This,NewLocator)
+/*** IDVBTLocator methods ***/
+#define IDVBTLocator_get_Bandwidth(This,BandWidthVal) (This)->lpVtbl->get_Bandwidth(This,BandWidthVal)
+#define IDVBTLocator_put_Bandwidth(This,BandwidthVal) (This)->lpVtbl->put_Bandwidth(This,BandwidthVal)
+#define IDVBTLocator_get_LPInnerFEC(This,FEC) (This)->lpVtbl->get_LPInnerFEC(This,FEC)
+#define IDVBTLocator_put_LPInnerFEC(This,FEC) (This)->lpVtbl->put_LPInnerFEC(This,FEC)
+#define IDVBTLocator_get_LPInnerFECRate(This,FEC) (This)->lpVtbl->get_LPInnerFECRate(This,FEC)
+#define IDVBTLocator_put_LPInnerFECRate(This,FEC) (This)->lpVtbl->put_LPInnerFECRate(This,FEC)
+#define IDVBTLocator_get_HAlpha(This,Alpha) (This)->lpVtbl->get_HAlpha(This,Alpha)
+#define IDVBTLocator_put_HAlpha(This,Alpha) (This)->lpVtbl->put_HAlpha(This,Alpha)
+#define IDVBTLocator_get_Guard(This,GI) (This)->lpVtbl->get_Guard(This,GI)
+#define IDVBTLocator_put_Guard(This,GI) (This)->lpVtbl->put_Guard(This,GI)
+#define IDVBTLocator_get_Mode(This,mode) (This)->lpVtbl->get_Mode(This,mode)
+#define IDVBTLocator_put_Mode(This,mode) (This)->lpVtbl->put_Mode(This,mode)
+#define IDVBTLocator_get_OtherFrequencyInUse(This,OtherFrequencyInUseVal) (This)->lpVtbl->get_OtherFrequencyInUse(This,OtherFrequencyInUseVal)
+#define IDVBTLocator_put_OtherFrequencyInUse(This,OtherFrequencyInUseVal) (This)->lpVtbl->put_OtherFrequencyInUse(This,OtherFrequencyInUseVal)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDVBTLocator_QueryInterface(IDVBTLocator* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDVBTLocator_AddRef(IDVBTLocator* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDVBTLocator_Release(IDVBTLocator* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IDVBTLocator_GetTypeInfoCount(IDVBTLocator* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IDVBTLocator_GetTypeInfo(IDVBTLocator* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IDVBTLocator_GetIDsOfNames(IDVBTLocator* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IDVBTLocator_Invoke(IDVBTLocator* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ILocator methods ***/
+static FORCEINLINE HRESULT IDVBTLocator_get_CarrierFrequency(IDVBTLocator* This,LONG *Frequency) {
+    return This->lpVtbl->get_CarrierFrequency(This,Frequency);
+}
+static FORCEINLINE HRESULT IDVBTLocator_put_CarrierFrequency(IDVBTLocator* This,LONG Frequency) {
+    return This->lpVtbl->put_CarrierFrequency(This,Frequency);
+}
+static FORCEINLINE HRESULT IDVBTLocator_get_InnerFEC(IDVBTLocator* This,FECMethod *FEC) {
+    return This->lpVtbl->get_InnerFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBTLocator_put_InnerFEC(IDVBTLocator* This,FECMethod FEC) {
+    return This->lpVtbl->put_InnerFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBTLocator_get_InnerFECRate(IDVBTLocator* This,BinaryConvolutionCodeRate *FEC) {
+    return This->lpVtbl->get_InnerFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBTLocator_put_InnerFECRate(IDVBTLocator* This,BinaryConvolutionCodeRate FEC) {
+    return This->lpVtbl->put_InnerFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBTLocator_get_OuterFEC(IDVBTLocator* This,FECMethod *FEC) {
+    return This->lpVtbl->get_OuterFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBTLocator_put_OuterFEC(IDVBTLocator* This,FECMethod FEC) {
+    return This->lpVtbl->put_OuterFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBTLocator_get_OuterFECRate(IDVBTLocator* This,BinaryConvolutionCodeRate *FEC) {
+    return This->lpVtbl->get_OuterFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBTLocator_put_OuterFECRate(IDVBTLocator* This,BinaryConvolutionCodeRate FEC) {
+    return This->lpVtbl->put_OuterFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBTLocator_get_Modulation(IDVBTLocator* This,ModulationType *Modulation) {
+    return This->lpVtbl->get_Modulation(This,Modulation);
+}
+static FORCEINLINE HRESULT IDVBTLocator_put_Modulation(IDVBTLocator* This,ModulationType Modulation) {
+    return This->lpVtbl->put_Modulation(This,Modulation);
+}
+static FORCEINLINE HRESULT IDVBTLocator_get_SymbolRate(IDVBTLocator* This,LONG *Rate) {
+    return This->lpVtbl->get_SymbolRate(This,Rate);
+}
+static FORCEINLINE HRESULT IDVBTLocator_put_SymbolRate(IDVBTLocator* This,LONG Rate) {
+    return This->lpVtbl->put_SymbolRate(This,Rate);
+}
+static FORCEINLINE HRESULT IDVBTLocator_Clone(IDVBTLocator* This,ILocator **NewLocator) {
+    return This->lpVtbl->Clone(This,NewLocator);
+}
+/*** IDVBTLocator methods ***/
+static FORCEINLINE HRESULT IDVBTLocator_get_Bandwidth(IDVBTLocator* This,LONG *BandWidthVal) {
+    return This->lpVtbl->get_Bandwidth(This,BandWidthVal);
+}
+static FORCEINLINE HRESULT IDVBTLocator_put_Bandwidth(IDVBTLocator* This,LONG BandwidthVal) {
+    return This->lpVtbl->put_Bandwidth(This,BandwidthVal);
+}
+static FORCEINLINE HRESULT IDVBTLocator_get_LPInnerFEC(IDVBTLocator* This,FECMethod *FEC) {
+    return This->lpVtbl->get_LPInnerFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBTLocator_put_LPInnerFEC(IDVBTLocator* This,FECMethod FEC) {
+    return This->lpVtbl->put_LPInnerFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBTLocator_get_LPInnerFECRate(IDVBTLocator* This,BinaryConvolutionCodeRate *FEC) {
+    return This->lpVtbl->get_LPInnerFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBTLocator_put_LPInnerFECRate(IDVBTLocator* This,BinaryConvolutionCodeRate FEC) {
+    return This->lpVtbl->put_LPInnerFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBTLocator_get_HAlpha(IDVBTLocator* This,HierarchyAlpha *Alpha) {
+    return This->lpVtbl->get_HAlpha(This,Alpha);
+}
+static FORCEINLINE HRESULT IDVBTLocator_put_HAlpha(IDVBTLocator* This,HierarchyAlpha Alpha) {
+    return This->lpVtbl->put_HAlpha(This,Alpha);
+}
+static FORCEINLINE HRESULT IDVBTLocator_get_Guard(IDVBTLocator* This,GuardInterval *GI) {
+    return This->lpVtbl->get_Guard(This,GI);
+}
+static FORCEINLINE HRESULT IDVBTLocator_put_Guard(IDVBTLocator* This,GuardInterval GI) {
+    return This->lpVtbl->put_Guard(This,GI);
+}
+static FORCEINLINE HRESULT IDVBTLocator_get_Mode(IDVBTLocator* This,TransmissionMode *mode) {
+    return This->lpVtbl->get_Mode(This,mode);
+}
+static FORCEINLINE HRESULT IDVBTLocator_put_Mode(IDVBTLocator* This,TransmissionMode mode) {
+    return This->lpVtbl->put_Mode(This,mode);
+}
+static FORCEINLINE HRESULT IDVBTLocator_get_OtherFrequencyInUse(IDVBTLocator* This,VARIANT_BOOL *OtherFrequencyInUseVal) {
+    return This->lpVtbl->get_OtherFrequencyInUse(This,OtherFrequencyInUseVal);
+}
+static FORCEINLINE HRESULT IDVBTLocator_put_OtherFrequencyInUse(IDVBTLocator* This,VARIANT_BOOL OtherFrequencyInUseVal) {
+    return This->lpVtbl->put_OtherFrequencyInUse(This,OtherFrequencyInUseVal);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IDVBTLocator_get_Bandwidth_Proxy(
+    IDVBTLocator* This,
+    LONG *BandWidthVal);
+void __RPC_STUB IDVBTLocator_get_Bandwidth_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBTLocator_put_Bandwidth_Proxy(
+    IDVBTLocator* This,
+    LONG BandwidthVal);
+void __RPC_STUB IDVBTLocator_put_Bandwidth_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBTLocator_get_LPInnerFEC_Proxy(
+    IDVBTLocator* This,
+    FECMethod *FEC);
+void __RPC_STUB IDVBTLocator_get_LPInnerFEC_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBTLocator_put_LPInnerFEC_Proxy(
+    IDVBTLocator* This,
+    FECMethod FEC);
+void __RPC_STUB IDVBTLocator_put_LPInnerFEC_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBTLocator_get_LPInnerFECRate_Proxy(
+    IDVBTLocator* This,
+    BinaryConvolutionCodeRate *FEC);
+void __RPC_STUB IDVBTLocator_get_LPInnerFECRate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBTLocator_put_LPInnerFECRate_Proxy(
+    IDVBTLocator* This,
+    BinaryConvolutionCodeRate FEC);
+void __RPC_STUB IDVBTLocator_put_LPInnerFECRate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBTLocator_get_HAlpha_Proxy(
+    IDVBTLocator* This,
+    HierarchyAlpha *Alpha);
+void __RPC_STUB IDVBTLocator_get_HAlpha_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBTLocator_put_HAlpha_Proxy(
+    IDVBTLocator* This,
+    HierarchyAlpha Alpha);
+void __RPC_STUB IDVBTLocator_put_HAlpha_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBTLocator_get_Guard_Proxy(
+    IDVBTLocator* This,
+    GuardInterval *GI);
+void __RPC_STUB IDVBTLocator_get_Guard_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBTLocator_put_Guard_Proxy(
+    IDVBTLocator* This,
+    GuardInterval GI);
+void __RPC_STUB IDVBTLocator_put_Guard_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBTLocator_get_Mode_Proxy(
+    IDVBTLocator* This,
+    TransmissionMode *mode);
+void __RPC_STUB IDVBTLocator_get_Mode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBTLocator_put_Mode_Proxy(
+    IDVBTLocator* This,
+    TransmissionMode mode);
+void __RPC_STUB IDVBTLocator_put_Mode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBTLocator_get_OtherFrequencyInUse_Proxy(
+    IDVBTLocator* This,
+    VARIANT_BOOL *OtherFrequencyInUseVal);
+void __RPC_STUB IDVBTLocator_get_OtherFrequencyInUse_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBTLocator_put_OtherFrequencyInUse_Proxy(
+    IDVBTLocator* This,
+    VARIANT_BOOL OtherFrequencyInUseVal);
+void __RPC_STUB IDVBTLocator_put_OtherFrequencyInUse_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IDVBTLocator_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDVBTLocator2 interface
+ */
+#ifndef __IDVBTLocator2_INTERFACE_DEFINED__
+#define __IDVBTLocator2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDVBTLocator2, 0x448a2edf, 0xae95, 0x4b43, 0xa3,0xcc, 0x74,0x78,0x43,0xc4,0x53,0xd4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("448a2edf-ae95-4b43-a3cc-747843c453d4")
+IDVBTLocator2 : public IDVBTLocator
+{
+    virtual HRESULT STDMETHODCALLTYPE get_PhysicalLayerPipeId(
+        LONG *PhysicalLayerPipeIdVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_PhysicalLayerPipeId(
+        LONG PhysicalLayerPipeIdVal) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDVBTLocator2, 0x448a2edf, 0xae95, 0x4b43, 0xa3,0xcc, 0x74,0x78,0x43,0xc4,0x53,0xd4)
+#endif
+#else
+typedef struct IDVBTLocator2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDVBTLocator2* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDVBTLocator2* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDVBTLocator2* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IDVBTLocator2* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IDVBTLocator2* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IDVBTLocator2* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IDVBTLocator2* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ILocator methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_CarrierFrequency)(
+        IDVBTLocator2* This,
+        LONG *Frequency);
+
+    HRESULT (STDMETHODCALLTYPE *put_CarrierFrequency)(
+        IDVBTLocator2* This,
+        LONG Frequency);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFEC)(
+        IDVBTLocator2* This,
+        FECMethod *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFEC)(
+        IDVBTLocator2* This,
+        FECMethod FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFECRate)(
+        IDVBTLocator2* This,
+        BinaryConvolutionCodeRate *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFECRate)(
+        IDVBTLocator2* This,
+        BinaryConvolutionCodeRate FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFEC)(
+        IDVBTLocator2* This,
+        FECMethod *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFEC)(
+        IDVBTLocator2* This,
+        FECMethod FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFECRate)(
+        IDVBTLocator2* This,
+        BinaryConvolutionCodeRate *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFECRate)(
+        IDVBTLocator2* This,
+        BinaryConvolutionCodeRate FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_Modulation)(
+        IDVBTLocator2* This,
+        ModulationType *Modulation);
+
+    HRESULT (STDMETHODCALLTYPE *put_Modulation)(
+        IDVBTLocator2* This,
+        ModulationType Modulation);
+
+    HRESULT (STDMETHODCALLTYPE *get_SymbolRate)(
+        IDVBTLocator2* This,
+        LONG *Rate);
+
+    HRESULT (STDMETHODCALLTYPE *put_SymbolRate)(
+        IDVBTLocator2* This,
+        LONG Rate);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IDVBTLocator2* This,
+        ILocator **NewLocator);
+
+    /*** IDVBTLocator methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Bandwidth)(
+        IDVBTLocator2* This,
+        LONG *BandWidthVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_Bandwidth)(
+        IDVBTLocator2* This,
+        LONG BandwidthVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_LPInnerFEC)(
+        IDVBTLocator2* This,
+        FECMethod *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_LPInnerFEC)(
+        IDVBTLocator2* This,
+        FECMethod FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_LPInnerFECRate)(
+        IDVBTLocator2* This,
+        BinaryConvolutionCodeRate *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_LPInnerFECRate)(
+        IDVBTLocator2* This,
+        BinaryConvolutionCodeRate FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_HAlpha)(
+        IDVBTLocator2* This,
+        HierarchyAlpha *Alpha);
+
+    HRESULT (STDMETHODCALLTYPE *put_HAlpha)(
+        IDVBTLocator2* This,
+        HierarchyAlpha Alpha);
+
+    HRESULT (STDMETHODCALLTYPE *get_Guard)(
+        IDVBTLocator2* This,
+        GuardInterval *GI);
+
+    HRESULT (STDMETHODCALLTYPE *put_Guard)(
+        IDVBTLocator2* This,
+        GuardInterval GI);
+
+    HRESULT (STDMETHODCALLTYPE *get_Mode)(
+        IDVBTLocator2* This,
+        TransmissionMode *mode);
+
+    HRESULT (STDMETHODCALLTYPE *put_Mode)(
+        IDVBTLocator2* This,
+        TransmissionMode mode);
+
+    HRESULT (STDMETHODCALLTYPE *get_OtherFrequencyInUse)(
+        IDVBTLocator2* This,
+        VARIANT_BOOL *OtherFrequencyInUseVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_OtherFrequencyInUse)(
+        IDVBTLocator2* This,
+        VARIANT_BOOL OtherFrequencyInUseVal);
+
+    /*** IDVBTLocator2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_PhysicalLayerPipeId)(
+        IDVBTLocator2* This,
+        LONG *PhysicalLayerPipeIdVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_PhysicalLayerPipeId)(
+        IDVBTLocator2* This,
+        LONG PhysicalLayerPipeIdVal);
+
+    END_INTERFACE
+} IDVBTLocator2Vtbl;
+interface IDVBTLocator2 {
+    CONST_VTBL IDVBTLocator2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDVBTLocator2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDVBTLocator2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDVBTLocator2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IDVBTLocator2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IDVBTLocator2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IDVBTLocator2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IDVBTLocator2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ILocator methods ***/
+#define IDVBTLocator2_get_CarrierFrequency(This,Frequency) (This)->lpVtbl->get_CarrierFrequency(This,Frequency)
+#define IDVBTLocator2_put_CarrierFrequency(This,Frequency) (This)->lpVtbl->put_CarrierFrequency(This,Frequency)
+#define IDVBTLocator2_get_InnerFEC(This,FEC) (This)->lpVtbl->get_InnerFEC(This,FEC)
+#define IDVBTLocator2_put_InnerFEC(This,FEC) (This)->lpVtbl->put_InnerFEC(This,FEC)
+#define IDVBTLocator2_get_InnerFECRate(This,FEC) (This)->lpVtbl->get_InnerFECRate(This,FEC)
+#define IDVBTLocator2_put_InnerFECRate(This,FEC) (This)->lpVtbl->put_InnerFECRate(This,FEC)
+#define IDVBTLocator2_get_OuterFEC(This,FEC) (This)->lpVtbl->get_OuterFEC(This,FEC)
+#define IDVBTLocator2_put_OuterFEC(This,FEC) (This)->lpVtbl->put_OuterFEC(This,FEC)
+#define IDVBTLocator2_get_OuterFECRate(This,FEC) (This)->lpVtbl->get_OuterFECRate(This,FEC)
+#define IDVBTLocator2_put_OuterFECRate(This,FEC) (This)->lpVtbl->put_OuterFECRate(This,FEC)
+#define IDVBTLocator2_get_Modulation(This,Modulation) (This)->lpVtbl->get_Modulation(This,Modulation)
+#define IDVBTLocator2_put_Modulation(This,Modulation) (This)->lpVtbl->put_Modulation(This,Modulation)
+#define IDVBTLocator2_get_SymbolRate(This,Rate) (This)->lpVtbl->get_SymbolRate(This,Rate)
+#define IDVBTLocator2_put_SymbolRate(This,Rate) (This)->lpVtbl->put_SymbolRate(This,Rate)
+#define IDVBTLocator2_Clone(This,NewLocator) (This)->lpVtbl->Clone(This,NewLocator)
+/*** IDVBTLocator methods ***/
+#define IDVBTLocator2_get_Bandwidth(This,BandWidthVal) (This)->lpVtbl->get_Bandwidth(This,BandWidthVal)
+#define IDVBTLocator2_put_Bandwidth(This,BandwidthVal) (This)->lpVtbl->put_Bandwidth(This,BandwidthVal)
+#define IDVBTLocator2_get_LPInnerFEC(This,FEC) (This)->lpVtbl->get_LPInnerFEC(This,FEC)
+#define IDVBTLocator2_put_LPInnerFEC(This,FEC) (This)->lpVtbl->put_LPInnerFEC(This,FEC)
+#define IDVBTLocator2_get_LPInnerFECRate(This,FEC) (This)->lpVtbl->get_LPInnerFECRate(This,FEC)
+#define IDVBTLocator2_put_LPInnerFECRate(This,FEC) (This)->lpVtbl->put_LPInnerFECRate(This,FEC)
+#define IDVBTLocator2_get_HAlpha(This,Alpha) (This)->lpVtbl->get_HAlpha(This,Alpha)
+#define IDVBTLocator2_put_HAlpha(This,Alpha) (This)->lpVtbl->put_HAlpha(This,Alpha)
+#define IDVBTLocator2_get_Guard(This,GI) (This)->lpVtbl->get_Guard(This,GI)
+#define IDVBTLocator2_put_Guard(This,GI) (This)->lpVtbl->put_Guard(This,GI)
+#define IDVBTLocator2_get_Mode(This,mode) (This)->lpVtbl->get_Mode(This,mode)
+#define IDVBTLocator2_put_Mode(This,mode) (This)->lpVtbl->put_Mode(This,mode)
+#define IDVBTLocator2_get_OtherFrequencyInUse(This,OtherFrequencyInUseVal) (This)->lpVtbl->get_OtherFrequencyInUse(This,OtherFrequencyInUseVal)
+#define IDVBTLocator2_put_OtherFrequencyInUse(This,OtherFrequencyInUseVal) (This)->lpVtbl->put_OtherFrequencyInUse(This,OtherFrequencyInUseVal)
+/*** IDVBTLocator2 methods ***/
+#define IDVBTLocator2_get_PhysicalLayerPipeId(This,PhysicalLayerPipeIdVal) (This)->lpVtbl->get_PhysicalLayerPipeId(This,PhysicalLayerPipeIdVal)
+#define IDVBTLocator2_put_PhysicalLayerPipeId(This,PhysicalLayerPipeIdVal) (This)->lpVtbl->put_PhysicalLayerPipeId(This,PhysicalLayerPipeIdVal)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDVBTLocator2_QueryInterface(IDVBTLocator2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDVBTLocator2_AddRef(IDVBTLocator2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDVBTLocator2_Release(IDVBTLocator2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IDVBTLocator2_GetTypeInfoCount(IDVBTLocator2* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_GetTypeInfo(IDVBTLocator2* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_GetIDsOfNames(IDVBTLocator2* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_Invoke(IDVBTLocator2* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ILocator methods ***/
+static FORCEINLINE HRESULT IDVBTLocator2_get_CarrierFrequency(IDVBTLocator2* This,LONG *Frequency) {
+    return This->lpVtbl->get_CarrierFrequency(This,Frequency);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_put_CarrierFrequency(IDVBTLocator2* This,LONG Frequency) {
+    return This->lpVtbl->put_CarrierFrequency(This,Frequency);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_get_InnerFEC(IDVBTLocator2* This,FECMethod *FEC) {
+    return This->lpVtbl->get_InnerFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_put_InnerFEC(IDVBTLocator2* This,FECMethod FEC) {
+    return This->lpVtbl->put_InnerFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_get_InnerFECRate(IDVBTLocator2* This,BinaryConvolutionCodeRate *FEC) {
+    return This->lpVtbl->get_InnerFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_put_InnerFECRate(IDVBTLocator2* This,BinaryConvolutionCodeRate FEC) {
+    return This->lpVtbl->put_InnerFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_get_OuterFEC(IDVBTLocator2* This,FECMethod *FEC) {
+    return This->lpVtbl->get_OuterFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_put_OuterFEC(IDVBTLocator2* This,FECMethod FEC) {
+    return This->lpVtbl->put_OuterFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_get_OuterFECRate(IDVBTLocator2* This,BinaryConvolutionCodeRate *FEC) {
+    return This->lpVtbl->get_OuterFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_put_OuterFECRate(IDVBTLocator2* This,BinaryConvolutionCodeRate FEC) {
+    return This->lpVtbl->put_OuterFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_get_Modulation(IDVBTLocator2* This,ModulationType *Modulation) {
+    return This->lpVtbl->get_Modulation(This,Modulation);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_put_Modulation(IDVBTLocator2* This,ModulationType Modulation) {
+    return This->lpVtbl->put_Modulation(This,Modulation);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_get_SymbolRate(IDVBTLocator2* This,LONG *Rate) {
+    return This->lpVtbl->get_SymbolRate(This,Rate);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_put_SymbolRate(IDVBTLocator2* This,LONG Rate) {
+    return This->lpVtbl->put_SymbolRate(This,Rate);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_Clone(IDVBTLocator2* This,ILocator **NewLocator) {
+    return This->lpVtbl->Clone(This,NewLocator);
+}
+/*** IDVBTLocator methods ***/
+static FORCEINLINE HRESULT IDVBTLocator2_get_Bandwidth(IDVBTLocator2* This,LONG *BandWidthVal) {
+    return This->lpVtbl->get_Bandwidth(This,BandWidthVal);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_put_Bandwidth(IDVBTLocator2* This,LONG BandwidthVal) {
+    return This->lpVtbl->put_Bandwidth(This,BandwidthVal);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_get_LPInnerFEC(IDVBTLocator2* This,FECMethod *FEC) {
+    return This->lpVtbl->get_LPInnerFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_put_LPInnerFEC(IDVBTLocator2* This,FECMethod FEC) {
+    return This->lpVtbl->put_LPInnerFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_get_LPInnerFECRate(IDVBTLocator2* This,BinaryConvolutionCodeRate *FEC) {
+    return This->lpVtbl->get_LPInnerFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_put_LPInnerFECRate(IDVBTLocator2* This,BinaryConvolutionCodeRate FEC) {
+    return This->lpVtbl->put_LPInnerFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_get_HAlpha(IDVBTLocator2* This,HierarchyAlpha *Alpha) {
+    return This->lpVtbl->get_HAlpha(This,Alpha);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_put_HAlpha(IDVBTLocator2* This,HierarchyAlpha Alpha) {
+    return This->lpVtbl->put_HAlpha(This,Alpha);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_get_Guard(IDVBTLocator2* This,GuardInterval *GI) {
+    return This->lpVtbl->get_Guard(This,GI);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_put_Guard(IDVBTLocator2* This,GuardInterval GI) {
+    return This->lpVtbl->put_Guard(This,GI);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_get_Mode(IDVBTLocator2* This,TransmissionMode *mode) {
+    return This->lpVtbl->get_Mode(This,mode);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_put_Mode(IDVBTLocator2* This,TransmissionMode mode) {
+    return This->lpVtbl->put_Mode(This,mode);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_get_OtherFrequencyInUse(IDVBTLocator2* This,VARIANT_BOOL *OtherFrequencyInUseVal) {
+    return This->lpVtbl->get_OtherFrequencyInUse(This,OtherFrequencyInUseVal);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_put_OtherFrequencyInUse(IDVBTLocator2* This,VARIANT_BOOL OtherFrequencyInUseVal) {
+    return This->lpVtbl->put_OtherFrequencyInUse(This,OtherFrequencyInUseVal);
+}
+/*** IDVBTLocator2 methods ***/
+static FORCEINLINE HRESULT IDVBTLocator2_get_PhysicalLayerPipeId(IDVBTLocator2* This,LONG *PhysicalLayerPipeIdVal) {
+    return This->lpVtbl->get_PhysicalLayerPipeId(This,PhysicalLayerPipeIdVal);
+}
+static FORCEINLINE HRESULT IDVBTLocator2_put_PhysicalLayerPipeId(IDVBTLocator2* This,LONG PhysicalLayerPipeIdVal) {
+    return This->lpVtbl->put_PhysicalLayerPipeId(This,PhysicalLayerPipeIdVal);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IDVBTLocator2_get_PhysicalLayerPipeId_Proxy(
+    IDVBTLocator2* This,
+    LONG *PhysicalLayerPipeIdVal);
+void __RPC_STUB IDVBTLocator2_get_PhysicalLayerPipeId_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBTLocator2_put_PhysicalLayerPipeId_Proxy(
+    IDVBTLocator2* This,
+    LONG PhysicalLayerPipeIdVal);
+void __RPC_STUB IDVBTLocator2_put_PhysicalLayerPipeId_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IDVBTLocator2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDVBSLocator interface
+ */
+#ifndef __IDVBSLocator_INTERFACE_DEFINED__
+#define __IDVBSLocator_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDVBSLocator, 0x3d7c353c, 0x0d04, 0x45f1, 0xa7,0x42, 0xf9,0x7c,0xc1,0x18,0x8d,0xc8);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("3d7c353c-0d04-45f1-a742-f97cc1188dc8")
+IDVBSLocator : public IDigitalLocator
+{
+    virtual HRESULT STDMETHODCALLTYPE get_SignalPolarisation(
+        Polarisation *PolarisationVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_SignalPolarisation(
+        Polarisation PolarisationVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_WestPosition(
+        VARIANT_BOOL *WestLongitude) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_WestPosition(
+        VARIANT_BOOL WestLongitude) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_OrbitalPosition(
+        LONG *longitude) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_OrbitalPosition(
+        LONG longitude) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Azimuth(
+        LONG *Azimuth) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Azimuth(
+        LONG Azimuth) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Elevation(
+        LONG *Elevation) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Elevation(
+        LONG Elevation) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDVBSLocator, 0x3d7c353c, 0x0d04, 0x45f1, 0xa7,0x42, 0xf9,0x7c,0xc1,0x18,0x8d,0xc8)
+#endif
+#else
+typedef struct IDVBSLocatorVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDVBSLocator* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDVBSLocator* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDVBSLocator* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IDVBSLocator* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IDVBSLocator* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IDVBSLocator* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IDVBSLocator* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ILocator methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_CarrierFrequency)(
+        IDVBSLocator* This,
+        LONG *Frequency);
+
+    HRESULT (STDMETHODCALLTYPE *put_CarrierFrequency)(
+        IDVBSLocator* This,
+        LONG Frequency);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFEC)(
+        IDVBSLocator* This,
+        FECMethod *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFEC)(
+        IDVBSLocator* This,
+        FECMethod FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFECRate)(
+        IDVBSLocator* This,
+        BinaryConvolutionCodeRate *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFECRate)(
+        IDVBSLocator* This,
+        BinaryConvolutionCodeRate FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFEC)(
+        IDVBSLocator* This,
+        FECMethod *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFEC)(
+        IDVBSLocator* This,
+        FECMethod FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFECRate)(
+        IDVBSLocator* This,
+        BinaryConvolutionCodeRate *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFECRate)(
+        IDVBSLocator* This,
+        BinaryConvolutionCodeRate FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_Modulation)(
+        IDVBSLocator* This,
+        ModulationType *Modulation);
+
+    HRESULT (STDMETHODCALLTYPE *put_Modulation)(
+        IDVBSLocator* This,
+        ModulationType Modulation);
+
+    HRESULT (STDMETHODCALLTYPE *get_SymbolRate)(
+        IDVBSLocator* This,
+        LONG *Rate);
+
+    HRESULT (STDMETHODCALLTYPE *put_SymbolRate)(
+        IDVBSLocator* This,
+        LONG Rate);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IDVBSLocator* This,
+        ILocator **NewLocator);
+
+    /*** IDVBSLocator methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_SignalPolarisation)(
+        IDVBSLocator* This,
+        Polarisation *PolarisationVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_SignalPolarisation)(
+        IDVBSLocator* This,
+        Polarisation PolarisationVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_WestPosition)(
+        IDVBSLocator* This,
+        VARIANT_BOOL *WestLongitude);
+
+    HRESULT (STDMETHODCALLTYPE *put_WestPosition)(
+        IDVBSLocator* This,
+        VARIANT_BOOL WestLongitude);
+
+    HRESULT (STDMETHODCALLTYPE *get_OrbitalPosition)(
+        IDVBSLocator* This,
+        LONG *longitude);
+
+    HRESULT (STDMETHODCALLTYPE *put_OrbitalPosition)(
+        IDVBSLocator* This,
+        LONG longitude);
+
+    HRESULT (STDMETHODCALLTYPE *get_Azimuth)(
+        IDVBSLocator* This,
+        LONG *Azimuth);
+
+    HRESULT (STDMETHODCALLTYPE *put_Azimuth)(
+        IDVBSLocator* This,
+        LONG Azimuth);
+
+    HRESULT (STDMETHODCALLTYPE *get_Elevation)(
+        IDVBSLocator* This,
+        LONG *Elevation);
+
+    HRESULT (STDMETHODCALLTYPE *put_Elevation)(
+        IDVBSLocator* This,
+        LONG Elevation);
+
+    END_INTERFACE
+} IDVBSLocatorVtbl;
+interface IDVBSLocator {
+    CONST_VTBL IDVBSLocatorVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDVBSLocator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDVBSLocator_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDVBSLocator_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IDVBSLocator_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IDVBSLocator_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IDVBSLocator_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IDVBSLocator_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ILocator methods ***/
+#define IDVBSLocator_get_CarrierFrequency(This,Frequency) (This)->lpVtbl->get_CarrierFrequency(This,Frequency)
+#define IDVBSLocator_put_CarrierFrequency(This,Frequency) (This)->lpVtbl->put_CarrierFrequency(This,Frequency)
+#define IDVBSLocator_get_InnerFEC(This,FEC) (This)->lpVtbl->get_InnerFEC(This,FEC)
+#define IDVBSLocator_put_InnerFEC(This,FEC) (This)->lpVtbl->put_InnerFEC(This,FEC)
+#define IDVBSLocator_get_InnerFECRate(This,FEC) (This)->lpVtbl->get_InnerFECRate(This,FEC)
+#define IDVBSLocator_put_InnerFECRate(This,FEC) (This)->lpVtbl->put_InnerFECRate(This,FEC)
+#define IDVBSLocator_get_OuterFEC(This,FEC) (This)->lpVtbl->get_OuterFEC(This,FEC)
+#define IDVBSLocator_put_OuterFEC(This,FEC) (This)->lpVtbl->put_OuterFEC(This,FEC)
+#define IDVBSLocator_get_OuterFECRate(This,FEC) (This)->lpVtbl->get_OuterFECRate(This,FEC)
+#define IDVBSLocator_put_OuterFECRate(This,FEC) (This)->lpVtbl->put_OuterFECRate(This,FEC)
+#define IDVBSLocator_get_Modulation(This,Modulation) (This)->lpVtbl->get_Modulation(This,Modulation)
+#define IDVBSLocator_put_Modulation(This,Modulation) (This)->lpVtbl->put_Modulation(This,Modulation)
+#define IDVBSLocator_get_SymbolRate(This,Rate) (This)->lpVtbl->get_SymbolRate(This,Rate)
+#define IDVBSLocator_put_SymbolRate(This,Rate) (This)->lpVtbl->put_SymbolRate(This,Rate)
+#define IDVBSLocator_Clone(This,NewLocator) (This)->lpVtbl->Clone(This,NewLocator)
+/*** IDVBSLocator methods ***/
+#define IDVBSLocator_get_SignalPolarisation(This,PolarisationVal) (This)->lpVtbl->get_SignalPolarisation(This,PolarisationVal)
+#define IDVBSLocator_put_SignalPolarisation(This,PolarisationVal) (This)->lpVtbl->put_SignalPolarisation(This,PolarisationVal)
+#define IDVBSLocator_get_WestPosition(This,WestLongitude) (This)->lpVtbl->get_WestPosition(This,WestLongitude)
+#define IDVBSLocator_put_WestPosition(This,WestLongitude) (This)->lpVtbl->put_WestPosition(This,WestLongitude)
+#define IDVBSLocator_get_OrbitalPosition(This,longitude) (This)->lpVtbl->get_OrbitalPosition(This,longitude)
+#define IDVBSLocator_put_OrbitalPosition(This,longitude) (This)->lpVtbl->put_OrbitalPosition(This,longitude)
+#define IDVBSLocator_get_Azimuth(This,Azimuth) (This)->lpVtbl->get_Azimuth(This,Azimuth)
+#define IDVBSLocator_put_Azimuth(This,Azimuth) (This)->lpVtbl->put_Azimuth(This,Azimuth)
+#define IDVBSLocator_get_Elevation(This,Elevation) (This)->lpVtbl->get_Elevation(This,Elevation)
+#define IDVBSLocator_put_Elevation(This,Elevation) (This)->lpVtbl->put_Elevation(This,Elevation)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDVBSLocator_QueryInterface(IDVBSLocator* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDVBSLocator_AddRef(IDVBSLocator* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDVBSLocator_Release(IDVBSLocator* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IDVBSLocator_GetTypeInfoCount(IDVBSLocator* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IDVBSLocator_GetTypeInfo(IDVBSLocator* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IDVBSLocator_GetIDsOfNames(IDVBSLocator* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IDVBSLocator_Invoke(IDVBSLocator* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ILocator methods ***/
+static FORCEINLINE HRESULT IDVBSLocator_get_CarrierFrequency(IDVBSLocator* This,LONG *Frequency) {
+    return This->lpVtbl->get_CarrierFrequency(This,Frequency);
+}
+static FORCEINLINE HRESULT IDVBSLocator_put_CarrierFrequency(IDVBSLocator* This,LONG Frequency) {
+    return This->lpVtbl->put_CarrierFrequency(This,Frequency);
+}
+static FORCEINLINE HRESULT IDVBSLocator_get_InnerFEC(IDVBSLocator* This,FECMethod *FEC) {
+    return This->lpVtbl->get_InnerFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBSLocator_put_InnerFEC(IDVBSLocator* This,FECMethod FEC) {
+    return This->lpVtbl->put_InnerFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBSLocator_get_InnerFECRate(IDVBSLocator* This,BinaryConvolutionCodeRate *FEC) {
+    return This->lpVtbl->get_InnerFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBSLocator_put_InnerFECRate(IDVBSLocator* This,BinaryConvolutionCodeRate FEC) {
+    return This->lpVtbl->put_InnerFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBSLocator_get_OuterFEC(IDVBSLocator* This,FECMethod *FEC) {
+    return This->lpVtbl->get_OuterFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBSLocator_put_OuterFEC(IDVBSLocator* This,FECMethod FEC) {
+    return This->lpVtbl->put_OuterFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBSLocator_get_OuterFECRate(IDVBSLocator* This,BinaryConvolutionCodeRate *FEC) {
+    return This->lpVtbl->get_OuterFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBSLocator_put_OuterFECRate(IDVBSLocator* This,BinaryConvolutionCodeRate FEC) {
+    return This->lpVtbl->put_OuterFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBSLocator_get_Modulation(IDVBSLocator* This,ModulationType *Modulation) {
+    return This->lpVtbl->get_Modulation(This,Modulation);
+}
+static FORCEINLINE HRESULT IDVBSLocator_put_Modulation(IDVBSLocator* This,ModulationType Modulation) {
+    return This->lpVtbl->put_Modulation(This,Modulation);
+}
+static FORCEINLINE HRESULT IDVBSLocator_get_SymbolRate(IDVBSLocator* This,LONG *Rate) {
+    return This->lpVtbl->get_SymbolRate(This,Rate);
+}
+static FORCEINLINE HRESULT IDVBSLocator_put_SymbolRate(IDVBSLocator* This,LONG Rate) {
+    return This->lpVtbl->put_SymbolRate(This,Rate);
+}
+static FORCEINLINE HRESULT IDVBSLocator_Clone(IDVBSLocator* This,ILocator **NewLocator) {
+    return This->lpVtbl->Clone(This,NewLocator);
+}
+/*** IDVBSLocator methods ***/
+static FORCEINLINE HRESULT IDVBSLocator_get_SignalPolarisation(IDVBSLocator* This,Polarisation *PolarisationVal) {
+    return This->lpVtbl->get_SignalPolarisation(This,PolarisationVal);
+}
+static FORCEINLINE HRESULT IDVBSLocator_put_SignalPolarisation(IDVBSLocator* This,Polarisation PolarisationVal) {
+    return This->lpVtbl->put_SignalPolarisation(This,PolarisationVal);
+}
+static FORCEINLINE HRESULT IDVBSLocator_get_WestPosition(IDVBSLocator* This,VARIANT_BOOL *WestLongitude) {
+    return This->lpVtbl->get_WestPosition(This,WestLongitude);
+}
+static FORCEINLINE HRESULT IDVBSLocator_put_WestPosition(IDVBSLocator* This,VARIANT_BOOL WestLongitude) {
+    return This->lpVtbl->put_WestPosition(This,WestLongitude);
+}
+static FORCEINLINE HRESULT IDVBSLocator_get_OrbitalPosition(IDVBSLocator* This,LONG *longitude) {
+    return This->lpVtbl->get_OrbitalPosition(This,longitude);
+}
+static FORCEINLINE HRESULT IDVBSLocator_put_OrbitalPosition(IDVBSLocator* This,LONG longitude) {
+    return This->lpVtbl->put_OrbitalPosition(This,longitude);
+}
+static FORCEINLINE HRESULT IDVBSLocator_get_Azimuth(IDVBSLocator* This,LONG *Azimuth) {
+    return This->lpVtbl->get_Azimuth(This,Azimuth);
+}
+static FORCEINLINE HRESULT IDVBSLocator_put_Azimuth(IDVBSLocator* This,LONG Azimuth) {
+    return This->lpVtbl->put_Azimuth(This,Azimuth);
+}
+static FORCEINLINE HRESULT IDVBSLocator_get_Elevation(IDVBSLocator* This,LONG *Elevation) {
+    return This->lpVtbl->get_Elevation(This,Elevation);
+}
+static FORCEINLINE HRESULT IDVBSLocator_put_Elevation(IDVBSLocator* This,LONG Elevation) {
+    return This->lpVtbl->put_Elevation(This,Elevation);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IDVBSLocator_get_SignalPolarisation_Proxy(
+    IDVBSLocator* This,
+    Polarisation *PolarisationVal);
+void __RPC_STUB IDVBSLocator_get_SignalPolarisation_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSLocator_put_SignalPolarisation_Proxy(
+    IDVBSLocator* This,
+    Polarisation PolarisationVal);
+void __RPC_STUB IDVBSLocator_put_SignalPolarisation_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSLocator_get_WestPosition_Proxy(
+    IDVBSLocator* This,
+    VARIANT_BOOL *WestLongitude);
+void __RPC_STUB IDVBSLocator_get_WestPosition_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSLocator_put_WestPosition_Proxy(
+    IDVBSLocator* This,
+    VARIANT_BOOL WestLongitude);
+void __RPC_STUB IDVBSLocator_put_WestPosition_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSLocator_get_OrbitalPosition_Proxy(
+    IDVBSLocator* This,
+    LONG *longitude);
+void __RPC_STUB IDVBSLocator_get_OrbitalPosition_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSLocator_put_OrbitalPosition_Proxy(
+    IDVBSLocator* This,
+    LONG longitude);
+void __RPC_STUB IDVBSLocator_put_OrbitalPosition_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSLocator_get_Azimuth_Proxy(
+    IDVBSLocator* This,
+    LONG *Azimuth);
+void __RPC_STUB IDVBSLocator_get_Azimuth_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSLocator_put_Azimuth_Proxy(
+    IDVBSLocator* This,
+    LONG Azimuth);
+void __RPC_STUB IDVBSLocator_put_Azimuth_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSLocator_get_Elevation_Proxy(
+    IDVBSLocator* This,
+    LONG *Elevation);
+void __RPC_STUB IDVBSLocator_get_Elevation_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSLocator_put_Elevation_Proxy(
+    IDVBSLocator* This,
+    LONG Elevation);
+void __RPC_STUB IDVBSLocator_put_Elevation_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IDVBSLocator_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDVBSLocator2 interface
+ */
+#ifndef __IDVBSLocator2_INTERFACE_DEFINED__
+#define __IDVBSLocator2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDVBSLocator2, 0x6044634a, 0x1733, 0x4f99, 0xb9,0x82, 0x5f,0xb1,0x2a,0xfc,0xe4,0xf0);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("6044634a-1733-4f99-b982-5fb12afce4f0")
+IDVBSLocator2 : public IDVBSLocator
+{
+    virtual HRESULT STDMETHODCALLTYPE get_DiseqLNBSource(
+        LNB_Source *DiseqLNBSourceVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_DiseqLNBSource(
+        LNB_Source DiseqLNBSourceVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_LocalOscillatorOverrideLow(
+        LONG *LocalOscillatorOverrideLowVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_LocalOscillatorOverrideLow(
+        LONG LocalOscillatorOverrideLowVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_LocalOscillatorOverrideHigh(
+        LONG *LocalOscillatorOverrideHighVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_LocalOscillatorOverrideHigh(
+        LONG LocalOscillatorOverrideHighVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_LocalLNBSwitchOverride(
+        LONG *LocalLNBSwitchOverrideVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_LocalLNBSwitchOverride(
+        LONG LocalLNBSwitchOverrideVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_LocalSpectralInversionOverride(
+        SpectralInversion *LocalSpectralInversionOverrideVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_LocalSpectralInversionOverride(
+        SpectralInversion LocalSpectralInversionOverrideVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SignalRollOff(
+        RollOff *RollOffVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_SignalRollOff(
+        RollOff RollOffVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SignalPilot(
+        Pilot *PilotVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_SignalPilot(
+        Pilot PilotVal) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDVBSLocator2, 0x6044634a, 0x1733, 0x4f99, 0xb9,0x82, 0x5f,0xb1,0x2a,0xfc,0xe4,0xf0)
+#endif
+#else
+typedef struct IDVBSLocator2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDVBSLocator2* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDVBSLocator2* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDVBSLocator2* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IDVBSLocator2* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IDVBSLocator2* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IDVBSLocator2* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IDVBSLocator2* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ILocator methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_CarrierFrequency)(
+        IDVBSLocator2* This,
+        LONG *Frequency);
+
+    HRESULT (STDMETHODCALLTYPE *put_CarrierFrequency)(
+        IDVBSLocator2* This,
+        LONG Frequency);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFEC)(
+        IDVBSLocator2* This,
+        FECMethod *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFEC)(
+        IDVBSLocator2* This,
+        FECMethod FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFECRate)(
+        IDVBSLocator2* This,
+        BinaryConvolutionCodeRate *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFECRate)(
+        IDVBSLocator2* This,
+        BinaryConvolutionCodeRate FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFEC)(
+        IDVBSLocator2* This,
+        FECMethod *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFEC)(
+        IDVBSLocator2* This,
+        FECMethod FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFECRate)(
+        IDVBSLocator2* This,
+        BinaryConvolutionCodeRate *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFECRate)(
+        IDVBSLocator2* This,
+        BinaryConvolutionCodeRate FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_Modulation)(
+        IDVBSLocator2* This,
+        ModulationType *Modulation);
+
+    HRESULT (STDMETHODCALLTYPE *put_Modulation)(
+        IDVBSLocator2* This,
+        ModulationType Modulation);
+
+    HRESULT (STDMETHODCALLTYPE *get_SymbolRate)(
+        IDVBSLocator2* This,
+        LONG *Rate);
+
+    HRESULT (STDMETHODCALLTYPE *put_SymbolRate)(
+        IDVBSLocator2* This,
+        LONG Rate);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IDVBSLocator2* This,
+        ILocator **NewLocator);
+
+    /*** IDVBSLocator methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_SignalPolarisation)(
+        IDVBSLocator2* This,
+        Polarisation *PolarisationVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_SignalPolarisation)(
+        IDVBSLocator2* This,
+        Polarisation PolarisationVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_WestPosition)(
+        IDVBSLocator2* This,
+        VARIANT_BOOL *WestLongitude);
+
+    HRESULT (STDMETHODCALLTYPE *put_WestPosition)(
+        IDVBSLocator2* This,
+        VARIANT_BOOL WestLongitude);
+
+    HRESULT (STDMETHODCALLTYPE *get_OrbitalPosition)(
+        IDVBSLocator2* This,
+        LONG *longitude);
+
+    HRESULT (STDMETHODCALLTYPE *put_OrbitalPosition)(
+        IDVBSLocator2* This,
+        LONG longitude);
+
+    HRESULT (STDMETHODCALLTYPE *get_Azimuth)(
+        IDVBSLocator2* This,
+        LONG *Azimuth);
+
+    HRESULT (STDMETHODCALLTYPE *put_Azimuth)(
+        IDVBSLocator2* This,
+        LONG Azimuth);
+
+    HRESULT (STDMETHODCALLTYPE *get_Elevation)(
+        IDVBSLocator2* This,
+        LONG *Elevation);
+
+    HRESULT (STDMETHODCALLTYPE *put_Elevation)(
+        IDVBSLocator2* This,
+        LONG Elevation);
+
+    /*** IDVBSLocator2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_DiseqLNBSource)(
+        IDVBSLocator2* This,
+        LNB_Source *DiseqLNBSourceVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_DiseqLNBSource)(
+        IDVBSLocator2* This,
+        LNB_Source DiseqLNBSourceVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_LocalOscillatorOverrideLow)(
+        IDVBSLocator2* This,
+        LONG *LocalOscillatorOverrideLowVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_LocalOscillatorOverrideLow)(
+        IDVBSLocator2* This,
+        LONG LocalOscillatorOverrideLowVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_LocalOscillatorOverrideHigh)(
+        IDVBSLocator2* This,
+        LONG *LocalOscillatorOverrideHighVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_LocalOscillatorOverrideHigh)(
+        IDVBSLocator2* This,
+        LONG LocalOscillatorOverrideHighVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_LocalLNBSwitchOverride)(
+        IDVBSLocator2* This,
+        LONG *LocalLNBSwitchOverrideVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_LocalLNBSwitchOverride)(
+        IDVBSLocator2* This,
+        LONG LocalLNBSwitchOverrideVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_LocalSpectralInversionOverride)(
+        IDVBSLocator2* This,
+        SpectralInversion *LocalSpectralInversionOverrideVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_LocalSpectralInversionOverride)(
+        IDVBSLocator2* This,
+        SpectralInversion LocalSpectralInversionOverrideVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_SignalRollOff)(
+        IDVBSLocator2* This,
+        RollOff *RollOffVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_SignalRollOff)(
+        IDVBSLocator2* This,
+        RollOff RollOffVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_SignalPilot)(
+        IDVBSLocator2* This,
+        Pilot *PilotVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_SignalPilot)(
+        IDVBSLocator2* This,
+        Pilot PilotVal);
+
+    END_INTERFACE
+} IDVBSLocator2Vtbl;
+interface IDVBSLocator2 {
+    CONST_VTBL IDVBSLocator2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDVBSLocator2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDVBSLocator2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDVBSLocator2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IDVBSLocator2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IDVBSLocator2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IDVBSLocator2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IDVBSLocator2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ILocator methods ***/
+#define IDVBSLocator2_get_CarrierFrequency(This,Frequency) (This)->lpVtbl->get_CarrierFrequency(This,Frequency)
+#define IDVBSLocator2_put_CarrierFrequency(This,Frequency) (This)->lpVtbl->put_CarrierFrequency(This,Frequency)
+#define IDVBSLocator2_get_InnerFEC(This,FEC) (This)->lpVtbl->get_InnerFEC(This,FEC)
+#define IDVBSLocator2_put_InnerFEC(This,FEC) (This)->lpVtbl->put_InnerFEC(This,FEC)
+#define IDVBSLocator2_get_InnerFECRate(This,FEC) (This)->lpVtbl->get_InnerFECRate(This,FEC)
+#define IDVBSLocator2_put_InnerFECRate(This,FEC) (This)->lpVtbl->put_InnerFECRate(This,FEC)
+#define IDVBSLocator2_get_OuterFEC(This,FEC) (This)->lpVtbl->get_OuterFEC(This,FEC)
+#define IDVBSLocator2_put_OuterFEC(This,FEC) (This)->lpVtbl->put_OuterFEC(This,FEC)
+#define IDVBSLocator2_get_OuterFECRate(This,FEC) (This)->lpVtbl->get_OuterFECRate(This,FEC)
+#define IDVBSLocator2_put_OuterFECRate(This,FEC) (This)->lpVtbl->put_OuterFECRate(This,FEC)
+#define IDVBSLocator2_get_Modulation(This,Modulation) (This)->lpVtbl->get_Modulation(This,Modulation)
+#define IDVBSLocator2_put_Modulation(This,Modulation) (This)->lpVtbl->put_Modulation(This,Modulation)
+#define IDVBSLocator2_get_SymbolRate(This,Rate) (This)->lpVtbl->get_SymbolRate(This,Rate)
+#define IDVBSLocator2_put_SymbolRate(This,Rate) (This)->lpVtbl->put_SymbolRate(This,Rate)
+#define IDVBSLocator2_Clone(This,NewLocator) (This)->lpVtbl->Clone(This,NewLocator)
+/*** IDVBSLocator methods ***/
+#define IDVBSLocator2_get_SignalPolarisation(This,PolarisationVal) (This)->lpVtbl->get_SignalPolarisation(This,PolarisationVal)
+#define IDVBSLocator2_put_SignalPolarisation(This,PolarisationVal) (This)->lpVtbl->put_SignalPolarisation(This,PolarisationVal)
+#define IDVBSLocator2_get_WestPosition(This,WestLongitude) (This)->lpVtbl->get_WestPosition(This,WestLongitude)
+#define IDVBSLocator2_put_WestPosition(This,WestLongitude) (This)->lpVtbl->put_WestPosition(This,WestLongitude)
+#define IDVBSLocator2_get_OrbitalPosition(This,longitude) (This)->lpVtbl->get_OrbitalPosition(This,longitude)
+#define IDVBSLocator2_put_OrbitalPosition(This,longitude) (This)->lpVtbl->put_OrbitalPosition(This,longitude)
+#define IDVBSLocator2_get_Azimuth(This,Azimuth) (This)->lpVtbl->get_Azimuth(This,Azimuth)
+#define IDVBSLocator2_put_Azimuth(This,Azimuth) (This)->lpVtbl->put_Azimuth(This,Azimuth)
+#define IDVBSLocator2_get_Elevation(This,Elevation) (This)->lpVtbl->get_Elevation(This,Elevation)
+#define IDVBSLocator2_put_Elevation(This,Elevation) (This)->lpVtbl->put_Elevation(This,Elevation)
+/*** IDVBSLocator2 methods ***/
+#define IDVBSLocator2_get_DiseqLNBSource(This,DiseqLNBSourceVal) (This)->lpVtbl->get_DiseqLNBSource(This,DiseqLNBSourceVal)
+#define IDVBSLocator2_put_DiseqLNBSource(This,DiseqLNBSourceVal) (This)->lpVtbl->put_DiseqLNBSource(This,DiseqLNBSourceVal)
+#define IDVBSLocator2_get_LocalOscillatorOverrideLow(This,LocalOscillatorOverrideLowVal) (This)->lpVtbl->get_LocalOscillatorOverrideLow(This,LocalOscillatorOverrideLowVal)
+#define IDVBSLocator2_put_LocalOscillatorOverrideLow(This,LocalOscillatorOverrideLowVal) (This)->lpVtbl->put_LocalOscillatorOverrideLow(This,LocalOscillatorOverrideLowVal)
+#define IDVBSLocator2_get_LocalOscillatorOverrideHigh(This,LocalOscillatorOverrideHighVal) (This)->lpVtbl->get_LocalOscillatorOverrideHigh(This,LocalOscillatorOverrideHighVal)
+#define IDVBSLocator2_put_LocalOscillatorOverrideHigh(This,LocalOscillatorOverrideHighVal) (This)->lpVtbl->put_LocalOscillatorOverrideHigh(This,LocalOscillatorOverrideHighVal)
+#define IDVBSLocator2_get_LocalLNBSwitchOverride(This,LocalLNBSwitchOverrideVal) (This)->lpVtbl->get_LocalLNBSwitchOverride(This,LocalLNBSwitchOverrideVal)
+#define IDVBSLocator2_put_LocalLNBSwitchOverride(This,LocalLNBSwitchOverrideVal) (This)->lpVtbl->put_LocalLNBSwitchOverride(This,LocalLNBSwitchOverrideVal)
+#define IDVBSLocator2_get_LocalSpectralInversionOverride(This,LocalSpectralInversionOverrideVal) (This)->lpVtbl->get_LocalSpectralInversionOverride(This,LocalSpectralInversionOverrideVal)
+#define IDVBSLocator2_put_LocalSpectralInversionOverride(This,LocalSpectralInversionOverrideVal) (This)->lpVtbl->put_LocalSpectralInversionOverride(This,LocalSpectralInversionOverrideVal)
+#define IDVBSLocator2_get_SignalRollOff(This,RollOffVal) (This)->lpVtbl->get_SignalRollOff(This,RollOffVal)
+#define IDVBSLocator2_put_SignalRollOff(This,RollOffVal) (This)->lpVtbl->put_SignalRollOff(This,RollOffVal)
+#define IDVBSLocator2_get_SignalPilot(This,PilotVal) (This)->lpVtbl->get_SignalPilot(This,PilotVal)
+#define IDVBSLocator2_put_SignalPilot(This,PilotVal) (This)->lpVtbl->put_SignalPilot(This,PilotVal)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDVBSLocator2_QueryInterface(IDVBSLocator2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDVBSLocator2_AddRef(IDVBSLocator2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDVBSLocator2_Release(IDVBSLocator2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IDVBSLocator2_GetTypeInfoCount(IDVBSLocator2* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_GetTypeInfo(IDVBSLocator2* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_GetIDsOfNames(IDVBSLocator2* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_Invoke(IDVBSLocator2* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ILocator methods ***/
+static FORCEINLINE HRESULT IDVBSLocator2_get_CarrierFrequency(IDVBSLocator2* This,LONG *Frequency) {
+    return This->lpVtbl->get_CarrierFrequency(This,Frequency);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_put_CarrierFrequency(IDVBSLocator2* This,LONG Frequency) {
+    return This->lpVtbl->put_CarrierFrequency(This,Frequency);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_get_InnerFEC(IDVBSLocator2* This,FECMethod *FEC) {
+    return This->lpVtbl->get_InnerFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_put_InnerFEC(IDVBSLocator2* This,FECMethod FEC) {
+    return This->lpVtbl->put_InnerFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_get_InnerFECRate(IDVBSLocator2* This,BinaryConvolutionCodeRate *FEC) {
+    return This->lpVtbl->get_InnerFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_put_InnerFECRate(IDVBSLocator2* This,BinaryConvolutionCodeRate FEC) {
+    return This->lpVtbl->put_InnerFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_get_OuterFEC(IDVBSLocator2* This,FECMethod *FEC) {
+    return This->lpVtbl->get_OuterFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_put_OuterFEC(IDVBSLocator2* This,FECMethod FEC) {
+    return This->lpVtbl->put_OuterFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_get_OuterFECRate(IDVBSLocator2* This,BinaryConvolutionCodeRate *FEC) {
+    return This->lpVtbl->get_OuterFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_put_OuterFECRate(IDVBSLocator2* This,BinaryConvolutionCodeRate FEC) {
+    return This->lpVtbl->put_OuterFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_get_Modulation(IDVBSLocator2* This,ModulationType *Modulation) {
+    return This->lpVtbl->get_Modulation(This,Modulation);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_put_Modulation(IDVBSLocator2* This,ModulationType Modulation) {
+    return This->lpVtbl->put_Modulation(This,Modulation);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_get_SymbolRate(IDVBSLocator2* This,LONG *Rate) {
+    return This->lpVtbl->get_SymbolRate(This,Rate);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_put_SymbolRate(IDVBSLocator2* This,LONG Rate) {
+    return This->lpVtbl->put_SymbolRate(This,Rate);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_Clone(IDVBSLocator2* This,ILocator **NewLocator) {
+    return This->lpVtbl->Clone(This,NewLocator);
+}
+/*** IDVBSLocator methods ***/
+static FORCEINLINE HRESULT IDVBSLocator2_get_SignalPolarisation(IDVBSLocator2* This,Polarisation *PolarisationVal) {
+    return This->lpVtbl->get_SignalPolarisation(This,PolarisationVal);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_put_SignalPolarisation(IDVBSLocator2* This,Polarisation PolarisationVal) {
+    return This->lpVtbl->put_SignalPolarisation(This,PolarisationVal);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_get_WestPosition(IDVBSLocator2* This,VARIANT_BOOL *WestLongitude) {
+    return This->lpVtbl->get_WestPosition(This,WestLongitude);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_put_WestPosition(IDVBSLocator2* This,VARIANT_BOOL WestLongitude) {
+    return This->lpVtbl->put_WestPosition(This,WestLongitude);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_get_OrbitalPosition(IDVBSLocator2* This,LONG *longitude) {
+    return This->lpVtbl->get_OrbitalPosition(This,longitude);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_put_OrbitalPosition(IDVBSLocator2* This,LONG longitude) {
+    return This->lpVtbl->put_OrbitalPosition(This,longitude);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_get_Azimuth(IDVBSLocator2* This,LONG *Azimuth) {
+    return This->lpVtbl->get_Azimuth(This,Azimuth);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_put_Azimuth(IDVBSLocator2* This,LONG Azimuth) {
+    return This->lpVtbl->put_Azimuth(This,Azimuth);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_get_Elevation(IDVBSLocator2* This,LONG *Elevation) {
+    return This->lpVtbl->get_Elevation(This,Elevation);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_put_Elevation(IDVBSLocator2* This,LONG Elevation) {
+    return This->lpVtbl->put_Elevation(This,Elevation);
+}
+/*** IDVBSLocator2 methods ***/
+static FORCEINLINE HRESULT IDVBSLocator2_get_DiseqLNBSource(IDVBSLocator2* This,LNB_Source *DiseqLNBSourceVal) {
+    return This->lpVtbl->get_DiseqLNBSource(This,DiseqLNBSourceVal);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_put_DiseqLNBSource(IDVBSLocator2* This,LNB_Source DiseqLNBSourceVal) {
+    return This->lpVtbl->put_DiseqLNBSource(This,DiseqLNBSourceVal);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_get_LocalOscillatorOverrideLow(IDVBSLocator2* This,LONG *LocalOscillatorOverrideLowVal) {
+    return This->lpVtbl->get_LocalOscillatorOverrideLow(This,LocalOscillatorOverrideLowVal);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_put_LocalOscillatorOverrideLow(IDVBSLocator2* This,LONG LocalOscillatorOverrideLowVal) {
+    return This->lpVtbl->put_LocalOscillatorOverrideLow(This,LocalOscillatorOverrideLowVal);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_get_LocalOscillatorOverrideHigh(IDVBSLocator2* This,LONG *LocalOscillatorOverrideHighVal) {
+    return This->lpVtbl->get_LocalOscillatorOverrideHigh(This,LocalOscillatorOverrideHighVal);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_put_LocalOscillatorOverrideHigh(IDVBSLocator2* This,LONG LocalOscillatorOverrideHighVal) {
+    return This->lpVtbl->put_LocalOscillatorOverrideHigh(This,LocalOscillatorOverrideHighVal);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_get_LocalLNBSwitchOverride(IDVBSLocator2* This,LONG *LocalLNBSwitchOverrideVal) {
+    return This->lpVtbl->get_LocalLNBSwitchOverride(This,LocalLNBSwitchOverrideVal);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_put_LocalLNBSwitchOverride(IDVBSLocator2* This,LONG LocalLNBSwitchOverrideVal) {
+    return This->lpVtbl->put_LocalLNBSwitchOverride(This,LocalLNBSwitchOverrideVal);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_get_LocalSpectralInversionOverride(IDVBSLocator2* This,SpectralInversion *LocalSpectralInversionOverrideVal) {
+    return This->lpVtbl->get_LocalSpectralInversionOverride(This,LocalSpectralInversionOverrideVal);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_put_LocalSpectralInversionOverride(IDVBSLocator2* This,SpectralInversion LocalSpectralInversionOverrideVal) {
+    return This->lpVtbl->put_LocalSpectralInversionOverride(This,LocalSpectralInversionOverrideVal);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_get_SignalRollOff(IDVBSLocator2* This,RollOff *RollOffVal) {
+    return This->lpVtbl->get_SignalRollOff(This,RollOffVal);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_put_SignalRollOff(IDVBSLocator2* This,RollOff RollOffVal) {
+    return This->lpVtbl->put_SignalRollOff(This,RollOffVal);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_get_SignalPilot(IDVBSLocator2* This,Pilot *PilotVal) {
+    return This->lpVtbl->get_SignalPilot(This,PilotVal);
+}
+static FORCEINLINE HRESULT IDVBSLocator2_put_SignalPilot(IDVBSLocator2* This,Pilot PilotVal) {
+    return This->lpVtbl->put_SignalPilot(This,PilotVal);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IDVBSLocator2_get_DiseqLNBSource_Proxy(
+    IDVBSLocator2* This,
+    LNB_Source *DiseqLNBSourceVal);
+void __RPC_STUB IDVBSLocator2_get_DiseqLNBSource_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSLocator2_put_DiseqLNBSource_Proxy(
+    IDVBSLocator2* This,
+    LNB_Source DiseqLNBSourceVal);
+void __RPC_STUB IDVBSLocator2_put_DiseqLNBSource_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSLocator2_get_LocalOscillatorOverrideLow_Proxy(
+    IDVBSLocator2* This,
+    LONG *LocalOscillatorOverrideLowVal);
+void __RPC_STUB IDVBSLocator2_get_LocalOscillatorOverrideLow_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSLocator2_put_LocalOscillatorOverrideLow_Proxy(
+    IDVBSLocator2* This,
+    LONG LocalOscillatorOverrideLowVal);
+void __RPC_STUB IDVBSLocator2_put_LocalOscillatorOverrideLow_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSLocator2_get_LocalOscillatorOverrideHigh_Proxy(
+    IDVBSLocator2* This,
+    LONG *LocalOscillatorOverrideHighVal);
+void __RPC_STUB IDVBSLocator2_get_LocalOscillatorOverrideHigh_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSLocator2_put_LocalOscillatorOverrideHigh_Proxy(
+    IDVBSLocator2* This,
+    LONG LocalOscillatorOverrideHighVal);
+void __RPC_STUB IDVBSLocator2_put_LocalOscillatorOverrideHigh_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSLocator2_get_LocalLNBSwitchOverride_Proxy(
+    IDVBSLocator2* This,
+    LONG *LocalLNBSwitchOverrideVal);
+void __RPC_STUB IDVBSLocator2_get_LocalLNBSwitchOverride_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSLocator2_put_LocalLNBSwitchOverride_Proxy(
+    IDVBSLocator2* This,
+    LONG LocalLNBSwitchOverrideVal);
+void __RPC_STUB IDVBSLocator2_put_LocalLNBSwitchOverride_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSLocator2_get_LocalSpectralInversionOverride_Proxy(
+    IDVBSLocator2* This,
+    SpectralInversion *LocalSpectralInversionOverrideVal);
+void __RPC_STUB IDVBSLocator2_get_LocalSpectralInversionOverride_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSLocator2_put_LocalSpectralInversionOverride_Proxy(
+    IDVBSLocator2* This,
+    SpectralInversion LocalSpectralInversionOverrideVal);
+void __RPC_STUB IDVBSLocator2_put_LocalSpectralInversionOverride_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSLocator2_get_SignalRollOff_Proxy(
+    IDVBSLocator2* This,
+    RollOff *RollOffVal);
+void __RPC_STUB IDVBSLocator2_get_SignalRollOff_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSLocator2_put_SignalRollOff_Proxy(
+    IDVBSLocator2* This,
+    RollOff RollOffVal);
+void __RPC_STUB IDVBSLocator2_put_SignalRollOff_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSLocator2_get_SignalPilot_Proxy(
+    IDVBSLocator2* This,
+    Pilot *PilotVal);
+void __RPC_STUB IDVBSLocator2_get_SignalPilot_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDVBSLocator2_put_SignalPilot_Proxy(
+    IDVBSLocator2* This,
+    Pilot PilotVal);
+void __RPC_STUB IDVBSLocator2_put_SignalPilot_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IDVBSLocator2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDVBCLocator interface
+ */
+#ifndef __IDVBCLocator_INTERFACE_DEFINED__
+#define __IDVBCLocator_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDVBCLocator, 0x6e42f36e, 0x1dd2, 0x43c4, 0x9f,0x78, 0x69,0xd2,0x5a,0xe3,0x90,0x34);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("6e42f36e-1dd2-43c4-9f78-69d25ae39034")
+IDVBCLocator : public IDigitalLocator
+{
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDVBCLocator, 0x6e42f36e, 0x1dd2, 0x43c4, 0x9f,0x78, 0x69,0xd2,0x5a,0xe3,0x90,0x34)
+#endif
+#else
+typedef struct IDVBCLocatorVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDVBCLocator* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDVBCLocator* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDVBCLocator* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IDVBCLocator* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IDVBCLocator* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IDVBCLocator* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IDVBCLocator* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ILocator methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_CarrierFrequency)(
+        IDVBCLocator* This,
+        LONG *Frequency);
+
+    HRESULT (STDMETHODCALLTYPE *put_CarrierFrequency)(
+        IDVBCLocator* This,
+        LONG Frequency);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFEC)(
+        IDVBCLocator* This,
+        FECMethod *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFEC)(
+        IDVBCLocator* This,
+        FECMethod FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFECRate)(
+        IDVBCLocator* This,
+        BinaryConvolutionCodeRate *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFECRate)(
+        IDVBCLocator* This,
+        BinaryConvolutionCodeRate FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFEC)(
+        IDVBCLocator* This,
+        FECMethod *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFEC)(
+        IDVBCLocator* This,
+        FECMethod FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFECRate)(
+        IDVBCLocator* This,
+        BinaryConvolutionCodeRate *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFECRate)(
+        IDVBCLocator* This,
+        BinaryConvolutionCodeRate FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_Modulation)(
+        IDVBCLocator* This,
+        ModulationType *Modulation);
+
+    HRESULT (STDMETHODCALLTYPE *put_Modulation)(
+        IDVBCLocator* This,
+        ModulationType Modulation);
+
+    HRESULT (STDMETHODCALLTYPE *get_SymbolRate)(
+        IDVBCLocator* This,
+        LONG *Rate);
+
+    HRESULT (STDMETHODCALLTYPE *put_SymbolRate)(
+        IDVBCLocator* This,
+        LONG Rate);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IDVBCLocator* This,
+        ILocator **NewLocator);
+
+    END_INTERFACE
+} IDVBCLocatorVtbl;
+interface IDVBCLocator {
+    CONST_VTBL IDVBCLocatorVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDVBCLocator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDVBCLocator_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDVBCLocator_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IDVBCLocator_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IDVBCLocator_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IDVBCLocator_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IDVBCLocator_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ILocator methods ***/
+#define IDVBCLocator_get_CarrierFrequency(This,Frequency) (This)->lpVtbl->get_CarrierFrequency(This,Frequency)
+#define IDVBCLocator_put_CarrierFrequency(This,Frequency) (This)->lpVtbl->put_CarrierFrequency(This,Frequency)
+#define IDVBCLocator_get_InnerFEC(This,FEC) (This)->lpVtbl->get_InnerFEC(This,FEC)
+#define IDVBCLocator_put_InnerFEC(This,FEC) (This)->lpVtbl->put_InnerFEC(This,FEC)
+#define IDVBCLocator_get_InnerFECRate(This,FEC) (This)->lpVtbl->get_InnerFECRate(This,FEC)
+#define IDVBCLocator_put_InnerFECRate(This,FEC) (This)->lpVtbl->put_InnerFECRate(This,FEC)
+#define IDVBCLocator_get_OuterFEC(This,FEC) (This)->lpVtbl->get_OuterFEC(This,FEC)
+#define IDVBCLocator_put_OuterFEC(This,FEC) (This)->lpVtbl->put_OuterFEC(This,FEC)
+#define IDVBCLocator_get_OuterFECRate(This,FEC) (This)->lpVtbl->get_OuterFECRate(This,FEC)
+#define IDVBCLocator_put_OuterFECRate(This,FEC) (This)->lpVtbl->put_OuterFECRate(This,FEC)
+#define IDVBCLocator_get_Modulation(This,Modulation) (This)->lpVtbl->get_Modulation(This,Modulation)
+#define IDVBCLocator_put_Modulation(This,Modulation) (This)->lpVtbl->put_Modulation(This,Modulation)
+#define IDVBCLocator_get_SymbolRate(This,Rate) (This)->lpVtbl->get_SymbolRate(This,Rate)
+#define IDVBCLocator_put_SymbolRate(This,Rate) (This)->lpVtbl->put_SymbolRate(This,Rate)
+#define IDVBCLocator_Clone(This,NewLocator) (This)->lpVtbl->Clone(This,NewLocator)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDVBCLocator_QueryInterface(IDVBCLocator* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDVBCLocator_AddRef(IDVBCLocator* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDVBCLocator_Release(IDVBCLocator* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IDVBCLocator_GetTypeInfoCount(IDVBCLocator* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IDVBCLocator_GetTypeInfo(IDVBCLocator* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IDVBCLocator_GetIDsOfNames(IDVBCLocator* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IDVBCLocator_Invoke(IDVBCLocator* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ILocator methods ***/
+static FORCEINLINE HRESULT IDVBCLocator_get_CarrierFrequency(IDVBCLocator* This,LONG *Frequency) {
+    return This->lpVtbl->get_CarrierFrequency(This,Frequency);
+}
+static FORCEINLINE HRESULT IDVBCLocator_put_CarrierFrequency(IDVBCLocator* This,LONG Frequency) {
+    return This->lpVtbl->put_CarrierFrequency(This,Frequency);
+}
+static FORCEINLINE HRESULT IDVBCLocator_get_InnerFEC(IDVBCLocator* This,FECMethod *FEC) {
+    return This->lpVtbl->get_InnerFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBCLocator_put_InnerFEC(IDVBCLocator* This,FECMethod FEC) {
+    return This->lpVtbl->put_InnerFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBCLocator_get_InnerFECRate(IDVBCLocator* This,BinaryConvolutionCodeRate *FEC) {
+    return This->lpVtbl->get_InnerFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBCLocator_put_InnerFECRate(IDVBCLocator* This,BinaryConvolutionCodeRate FEC) {
+    return This->lpVtbl->put_InnerFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBCLocator_get_OuterFEC(IDVBCLocator* This,FECMethod *FEC) {
+    return This->lpVtbl->get_OuterFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBCLocator_put_OuterFEC(IDVBCLocator* This,FECMethod FEC) {
+    return This->lpVtbl->put_OuterFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBCLocator_get_OuterFECRate(IDVBCLocator* This,BinaryConvolutionCodeRate *FEC) {
+    return This->lpVtbl->get_OuterFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBCLocator_put_OuterFECRate(IDVBCLocator* This,BinaryConvolutionCodeRate FEC) {
+    return This->lpVtbl->put_OuterFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IDVBCLocator_get_Modulation(IDVBCLocator* This,ModulationType *Modulation) {
+    return This->lpVtbl->get_Modulation(This,Modulation);
+}
+static FORCEINLINE HRESULT IDVBCLocator_put_Modulation(IDVBCLocator* This,ModulationType Modulation) {
+    return This->lpVtbl->put_Modulation(This,Modulation);
+}
+static FORCEINLINE HRESULT IDVBCLocator_get_SymbolRate(IDVBCLocator* This,LONG *Rate) {
+    return This->lpVtbl->get_SymbolRate(This,Rate);
+}
+static FORCEINLINE HRESULT IDVBCLocator_put_SymbolRate(IDVBCLocator* This,LONG Rate) {
+    return This->lpVtbl->put_SymbolRate(This,Rate);
+}
+static FORCEINLINE HRESULT IDVBCLocator_Clone(IDVBCLocator* This,ILocator **NewLocator) {
+    return This->lpVtbl->Clone(This,NewLocator);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDVBCLocator_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IISDBSLocator interface
+ */
+#ifndef __IISDBSLocator_INTERFACE_DEFINED__
+#define __IISDBSLocator_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IISDBSLocator, 0xc9897087, 0xe29c, 0x473f, 0x9e,0x4b, 0x70,0x72,0x12,0x3d,0xea,0x14);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("c9897087-e29c-473f-9e4b-7072123dea14")
+IISDBSLocator : public IDVBSLocator
+{
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IISDBSLocator, 0xc9897087, 0xe29c, 0x473f, 0x9e,0x4b, 0x70,0x72,0x12,0x3d,0xea,0x14)
+#endif
+#else
+typedef struct IISDBSLocatorVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IISDBSLocator* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IISDBSLocator* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IISDBSLocator* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IISDBSLocator* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IISDBSLocator* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IISDBSLocator* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IISDBSLocator* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** ILocator methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_CarrierFrequency)(
+        IISDBSLocator* This,
+        LONG *Frequency);
+
+    HRESULT (STDMETHODCALLTYPE *put_CarrierFrequency)(
+        IISDBSLocator* This,
+        LONG Frequency);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFEC)(
+        IISDBSLocator* This,
+        FECMethod *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFEC)(
+        IISDBSLocator* This,
+        FECMethod FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_InnerFECRate)(
+        IISDBSLocator* This,
+        BinaryConvolutionCodeRate *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_InnerFECRate)(
+        IISDBSLocator* This,
+        BinaryConvolutionCodeRate FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFEC)(
+        IISDBSLocator* This,
+        FECMethod *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFEC)(
+        IISDBSLocator* This,
+        FECMethod FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_OuterFECRate)(
+        IISDBSLocator* This,
+        BinaryConvolutionCodeRate *FEC);
+
+    HRESULT (STDMETHODCALLTYPE *put_OuterFECRate)(
+        IISDBSLocator* This,
+        BinaryConvolutionCodeRate FEC);
+
+    HRESULT (STDMETHODCALLTYPE *get_Modulation)(
+        IISDBSLocator* This,
+        ModulationType *Modulation);
+
+    HRESULT (STDMETHODCALLTYPE *put_Modulation)(
+        IISDBSLocator* This,
+        ModulationType Modulation);
+
+    HRESULT (STDMETHODCALLTYPE *get_SymbolRate)(
+        IISDBSLocator* This,
+        LONG *Rate);
+
+    HRESULT (STDMETHODCALLTYPE *put_SymbolRate)(
+        IISDBSLocator* This,
+        LONG Rate);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IISDBSLocator* This,
+        ILocator **NewLocator);
+
+    /*** IDVBSLocator methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_SignalPolarisation)(
+        IISDBSLocator* This,
+        Polarisation *PolarisationVal);
+
+    HRESULT (STDMETHODCALLTYPE *put_SignalPolarisation)(
+        IISDBSLocator* This,
+        Polarisation PolarisationVal);
+
+    HRESULT (STDMETHODCALLTYPE *get_WestPosition)(
+        IISDBSLocator* This,
+        VARIANT_BOOL *WestLongitude);
+
+    HRESULT (STDMETHODCALLTYPE *put_WestPosition)(
+        IISDBSLocator* This,
+        VARIANT_BOOL WestLongitude);
+
+    HRESULT (STDMETHODCALLTYPE *get_OrbitalPosition)(
+        IISDBSLocator* This,
+        LONG *longitude);
+
+    HRESULT (STDMETHODCALLTYPE *put_OrbitalPosition)(
+        IISDBSLocator* This,
+        LONG longitude);
+
+    HRESULT (STDMETHODCALLTYPE *get_Azimuth)(
+        IISDBSLocator* This,
+        LONG *Azimuth);
+
+    HRESULT (STDMETHODCALLTYPE *put_Azimuth)(
+        IISDBSLocator* This,
+        LONG Azimuth);
+
+    HRESULT (STDMETHODCALLTYPE *get_Elevation)(
+        IISDBSLocator* This,
+        LONG *Elevation);
+
+    HRESULT (STDMETHODCALLTYPE *put_Elevation)(
+        IISDBSLocator* This,
+        LONG Elevation);
+
+    END_INTERFACE
+} IISDBSLocatorVtbl;
+interface IISDBSLocator {
+    CONST_VTBL IISDBSLocatorVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IISDBSLocator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IISDBSLocator_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IISDBSLocator_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IISDBSLocator_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IISDBSLocator_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IISDBSLocator_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IISDBSLocator_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** ILocator methods ***/
+#define IISDBSLocator_get_CarrierFrequency(This,Frequency) (This)->lpVtbl->get_CarrierFrequency(This,Frequency)
+#define IISDBSLocator_put_CarrierFrequency(This,Frequency) (This)->lpVtbl->put_CarrierFrequency(This,Frequency)
+#define IISDBSLocator_get_InnerFEC(This,FEC) (This)->lpVtbl->get_InnerFEC(This,FEC)
+#define IISDBSLocator_put_InnerFEC(This,FEC) (This)->lpVtbl->put_InnerFEC(This,FEC)
+#define IISDBSLocator_get_InnerFECRate(This,FEC) (This)->lpVtbl->get_InnerFECRate(This,FEC)
+#define IISDBSLocator_put_InnerFECRate(This,FEC) (This)->lpVtbl->put_InnerFECRate(This,FEC)
+#define IISDBSLocator_get_OuterFEC(This,FEC) (This)->lpVtbl->get_OuterFEC(This,FEC)
+#define IISDBSLocator_put_OuterFEC(This,FEC) (This)->lpVtbl->put_OuterFEC(This,FEC)
+#define IISDBSLocator_get_OuterFECRate(This,FEC) (This)->lpVtbl->get_OuterFECRate(This,FEC)
+#define IISDBSLocator_put_OuterFECRate(This,FEC) (This)->lpVtbl->put_OuterFECRate(This,FEC)
+#define IISDBSLocator_get_Modulation(This,Modulation) (This)->lpVtbl->get_Modulation(This,Modulation)
+#define IISDBSLocator_put_Modulation(This,Modulation) (This)->lpVtbl->put_Modulation(This,Modulation)
+#define IISDBSLocator_get_SymbolRate(This,Rate) (This)->lpVtbl->get_SymbolRate(This,Rate)
+#define IISDBSLocator_put_SymbolRate(This,Rate) (This)->lpVtbl->put_SymbolRate(This,Rate)
+#define IISDBSLocator_Clone(This,NewLocator) (This)->lpVtbl->Clone(This,NewLocator)
+/*** IDVBSLocator methods ***/
+#define IISDBSLocator_get_SignalPolarisation(This,PolarisationVal) (This)->lpVtbl->get_SignalPolarisation(This,PolarisationVal)
+#define IISDBSLocator_put_SignalPolarisation(This,PolarisationVal) (This)->lpVtbl->put_SignalPolarisation(This,PolarisationVal)
+#define IISDBSLocator_get_WestPosition(This,WestLongitude) (This)->lpVtbl->get_WestPosition(This,WestLongitude)
+#define IISDBSLocator_put_WestPosition(This,WestLongitude) (This)->lpVtbl->put_WestPosition(This,WestLongitude)
+#define IISDBSLocator_get_OrbitalPosition(This,longitude) (This)->lpVtbl->get_OrbitalPosition(This,longitude)
+#define IISDBSLocator_put_OrbitalPosition(This,longitude) (This)->lpVtbl->put_OrbitalPosition(This,longitude)
+#define IISDBSLocator_get_Azimuth(This,Azimuth) (This)->lpVtbl->get_Azimuth(This,Azimuth)
+#define IISDBSLocator_put_Azimuth(This,Azimuth) (This)->lpVtbl->put_Azimuth(This,Azimuth)
+#define IISDBSLocator_get_Elevation(This,Elevation) (This)->lpVtbl->get_Elevation(This,Elevation)
+#define IISDBSLocator_put_Elevation(This,Elevation) (This)->lpVtbl->put_Elevation(This,Elevation)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IISDBSLocator_QueryInterface(IISDBSLocator* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IISDBSLocator_AddRef(IISDBSLocator* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IISDBSLocator_Release(IISDBSLocator* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDispatch methods ***/
+static FORCEINLINE HRESULT IISDBSLocator_GetTypeInfoCount(IISDBSLocator* This,UINT *pctinfo) {
+    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
+}
+static FORCEINLINE HRESULT IISDBSLocator_GetTypeInfo(IISDBSLocator* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
+    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
+}
+static FORCEINLINE HRESULT IISDBSLocator_GetIDsOfNames(IISDBSLocator* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
+    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
+}
+static FORCEINLINE HRESULT IISDBSLocator_Invoke(IISDBSLocator* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
+    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
+}
+/*** ILocator methods ***/
+static FORCEINLINE HRESULT IISDBSLocator_get_CarrierFrequency(IISDBSLocator* This,LONG *Frequency) {
+    return This->lpVtbl->get_CarrierFrequency(This,Frequency);
+}
+static FORCEINLINE HRESULT IISDBSLocator_put_CarrierFrequency(IISDBSLocator* This,LONG Frequency) {
+    return This->lpVtbl->put_CarrierFrequency(This,Frequency);
+}
+static FORCEINLINE HRESULT IISDBSLocator_get_InnerFEC(IISDBSLocator* This,FECMethod *FEC) {
+    return This->lpVtbl->get_InnerFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IISDBSLocator_put_InnerFEC(IISDBSLocator* This,FECMethod FEC) {
+    return This->lpVtbl->put_InnerFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IISDBSLocator_get_InnerFECRate(IISDBSLocator* This,BinaryConvolutionCodeRate *FEC) {
+    return This->lpVtbl->get_InnerFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IISDBSLocator_put_InnerFECRate(IISDBSLocator* This,BinaryConvolutionCodeRate FEC) {
+    return This->lpVtbl->put_InnerFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IISDBSLocator_get_OuterFEC(IISDBSLocator* This,FECMethod *FEC) {
+    return This->lpVtbl->get_OuterFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IISDBSLocator_put_OuterFEC(IISDBSLocator* This,FECMethod FEC) {
+    return This->lpVtbl->put_OuterFEC(This,FEC);
+}
+static FORCEINLINE HRESULT IISDBSLocator_get_OuterFECRate(IISDBSLocator* This,BinaryConvolutionCodeRate *FEC) {
+    return This->lpVtbl->get_OuterFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IISDBSLocator_put_OuterFECRate(IISDBSLocator* This,BinaryConvolutionCodeRate FEC) {
+    return This->lpVtbl->put_OuterFECRate(This,FEC);
+}
+static FORCEINLINE HRESULT IISDBSLocator_get_Modulation(IISDBSLocator* This,ModulationType *Modulation) {
+    return This->lpVtbl->get_Modulation(This,Modulation);
+}
+static FORCEINLINE HRESULT IISDBSLocator_put_Modulation(IISDBSLocator* This,ModulationType Modulation) {
+    return This->lpVtbl->put_Modulation(This,Modulation);
+}
+static FORCEINLINE HRESULT IISDBSLocator_get_SymbolRate(IISDBSLocator* This,LONG *Rate) {
+    return This->lpVtbl->get_SymbolRate(This,Rate);
+}
+static FORCEINLINE HRESULT IISDBSLocator_put_SymbolRate(IISDBSLocator* This,LONG Rate) {
+    return This->lpVtbl->put_SymbolRate(This,Rate);
+}
+static FORCEINLINE HRESULT IISDBSLocator_Clone(IISDBSLocator* This,ILocator **NewLocator) {
+    return This->lpVtbl->Clone(This,NewLocator);
+}
+/*** IDVBSLocator methods ***/
+static FORCEINLINE HRESULT IISDBSLocator_get_SignalPolarisation(IISDBSLocator* This,Polarisation *PolarisationVal) {
+    return This->lpVtbl->get_SignalPolarisation(This,PolarisationVal);
+}
+static FORCEINLINE HRESULT IISDBSLocator_put_SignalPolarisation(IISDBSLocator* This,Polarisation PolarisationVal) {
+    return This->lpVtbl->put_SignalPolarisation(This,PolarisationVal);
+}
+static FORCEINLINE HRESULT IISDBSLocator_get_WestPosition(IISDBSLocator* This,VARIANT_BOOL *WestLongitude) {
+    return This->lpVtbl->get_WestPosition(This,WestLongitude);
+}
+static FORCEINLINE HRESULT IISDBSLocator_put_WestPosition(IISDBSLocator* This,VARIANT_BOOL WestLongitude) {
+    return This->lpVtbl->put_WestPosition(This,WestLongitude);
+}
+static FORCEINLINE HRESULT IISDBSLocator_get_OrbitalPosition(IISDBSLocator* This,LONG *longitude) {
+    return This->lpVtbl->get_OrbitalPosition(This,longitude);
+}
+static FORCEINLINE HRESULT IISDBSLocator_put_OrbitalPosition(IISDBSLocator* This,LONG longitude) {
+    return This->lpVtbl->put_OrbitalPosition(This,longitude);
+}
+static FORCEINLINE HRESULT IISDBSLocator_get_Azimuth(IISDBSLocator* This,LONG *Azimuth) {
+    return This->lpVtbl->get_Azimuth(This,Azimuth);
+}
+static FORCEINLINE HRESULT IISDBSLocator_put_Azimuth(IISDBSLocator* This,LONG Azimuth) {
+    return This->lpVtbl->put_Azimuth(This,Azimuth);
+}
+static FORCEINLINE HRESULT IISDBSLocator_get_Elevation(IISDBSLocator* This,LONG *Elevation) {
+    return This->lpVtbl->get_Elevation(This,Elevation);
+}
+static FORCEINLINE HRESULT IISDBSLocator_put_Elevation(IISDBSLocator* This,LONG Elevation) {
+    return This->lpVtbl->put_Elevation(This,Elevation);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IISDBSLocator_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IESEvent interface
+ */
+#ifndef __IESEvent_INTERFACE_DEFINED__
+#define __IESEvent_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IESEvent, 0x1f0e5357, 0xaf43, 0x44e6, 0x85,0x47, 0x65,0x4c,0x64,0x51,0x45,0xd2);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("1f0e5357-af43-44e6-8547-654c645145d2")
+IESEvent : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetEventId(
+        DWORD *pdwEventId) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetEventType(
+        GUID *pguidEventType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetCompletionStatus(
+        DWORD dwResult) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetData(
+        SAFEARRAY **pbData) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetStringData(
+        BSTR *pbstrData) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IESEvent, 0x1f0e5357, 0xaf43, 0x44e6, 0x85,0x47, 0x65,0x4c,0x64,0x51,0x45,0xd2)
+#endif
+#else
+typedef struct IESEventVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IESEvent* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IESEvent* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IESEvent* This);
+
+    /*** IESEvent methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetEventId)(
+        IESEvent* This,
+        DWORD *pdwEventId);
+
+    HRESULT (STDMETHODCALLTYPE *GetEventType)(
+        IESEvent* This,
+        GUID *pguidEventType);
+
+    HRESULT (STDMETHODCALLTYPE *SetCompletionStatus)(
+        IESEvent* This,
+        DWORD dwResult);
+
+    HRESULT (STDMETHODCALLTYPE *GetData)(
+        IESEvent* This,
+        SAFEARRAY **pbData);
+
+    HRESULT (STDMETHODCALLTYPE *GetStringData)(
+        IESEvent* This,
+        BSTR *pbstrData);
+
+    END_INTERFACE
+} IESEventVtbl;
+interface IESEvent {
+    CONST_VTBL IESEventVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IESEvent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IESEvent_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IESEvent_Release(This) (This)->lpVtbl->Release(This)
+/*** IESEvent methods ***/
+#define IESEvent_GetEventId(This,pdwEventId) (This)->lpVtbl->GetEventId(This,pdwEventId)
+#define IESEvent_GetEventType(This,pguidEventType) (This)->lpVtbl->GetEventType(This,pguidEventType)
+#define IESEvent_SetCompletionStatus(This,dwResult) (This)->lpVtbl->SetCompletionStatus(This,dwResult)
+#define IESEvent_GetData(This,pbData) (This)->lpVtbl->GetData(This,pbData)
+#define IESEvent_GetStringData(This,pbstrData) (This)->lpVtbl->GetStringData(This,pbstrData)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IESEvent_QueryInterface(IESEvent* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IESEvent_AddRef(IESEvent* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IESEvent_Release(IESEvent* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IESEvent methods ***/
+static FORCEINLINE HRESULT IESEvent_GetEventId(IESEvent* This,DWORD *pdwEventId) {
+    return This->lpVtbl->GetEventId(This,pdwEventId);
+}
+static FORCEINLINE HRESULT IESEvent_GetEventType(IESEvent* This,GUID *pguidEventType) {
+    return This->lpVtbl->GetEventType(This,pguidEventType);
+}
+static FORCEINLINE HRESULT IESEvent_SetCompletionStatus(IESEvent* This,DWORD dwResult) {
+    return This->lpVtbl->SetCompletionStatus(This,dwResult);
+}
+static FORCEINLINE HRESULT IESEvent_GetData(IESEvent* This,SAFEARRAY **pbData) {
+    return This->lpVtbl->GetData(This,pbData);
+}
+static FORCEINLINE HRESULT IESEvent_GetStringData(IESEvent* This,BSTR *pbstrData) {
+    return This->lpVtbl->GetStringData(This,pbstrData);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IESEvent_GetEventId_Proxy(
+    IESEvent* This,
+    DWORD *pdwEventId);
+void __RPC_STUB IESEvent_GetEventId_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESEvent_GetEventType_Proxy(
+    IESEvent* This,
+    GUID *pguidEventType);
+void __RPC_STUB IESEvent_GetEventType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESEvent_SetCompletionStatus_Proxy(
+    IESEvent* This,
+    DWORD dwResult);
+void __RPC_STUB IESEvent_SetCompletionStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESEvent_GetData_Proxy(
+    IESEvent* This,
+    SAFEARRAY **pbData);
+void __RPC_STUB IESEvent_GetData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESEvent_GetStringData_Proxy(
+    IESEvent* This,
+    BSTR *pbstrData);
+void __RPC_STUB IESEvent_GetStringData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IESEvent_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IESOpenMmiEvent interface
+ */
+#ifndef __IESOpenMmiEvent_INTERFACE_DEFINED__
+#define __IESOpenMmiEvent_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IESOpenMmiEvent, 0xba4b6526, 0x1a35, 0x4635, 0x8b,0x56, 0x3e,0xc6,0x12,0x74,0x6a,0x8c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("ba4b6526-1a35-4635-8b56-3ec612746a8c")
+IESOpenMmiEvent : public IESEvent
+{
+    virtual HRESULT STDMETHODCALLTYPE GetDialogNumber(
+        DWORD *pDialogRequest,
+        DWORD *pDialogNumber) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDialogType(
+        GUID *guidDialogType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDialogData(
+        SAFEARRAY **pbData) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDialogStringData(
+        BSTR *pbstrBaseUrl,
+        BSTR *pbstrData) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IESOpenMmiEvent, 0xba4b6526, 0x1a35, 0x4635, 0x8b,0x56, 0x3e,0xc6,0x12,0x74,0x6a,0x8c)
+#endif
+#else
+typedef struct IESOpenMmiEventVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IESOpenMmiEvent* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IESOpenMmiEvent* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IESOpenMmiEvent* This);
+
+    /*** IESEvent methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetEventId)(
+        IESOpenMmiEvent* This,
+        DWORD *pdwEventId);
+
+    HRESULT (STDMETHODCALLTYPE *GetEventType)(
+        IESOpenMmiEvent* This,
+        GUID *pguidEventType);
+
+    HRESULT (STDMETHODCALLTYPE *SetCompletionStatus)(
+        IESOpenMmiEvent* This,
+        DWORD dwResult);
+
+    HRESULT (STDMETHODCALLTYPE *GetData)(
+        IESOpenMmiEvent* This,
+        SAFEARRAY **pbData);
+
+    HRESULT (STDMETHODCALLTYPE *GetStringData)(
+        IESOpenMmiEvent* This,
+        BSTR *pbstrData);
+
+    /*** IESOpenMmiEvent methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDialogNumber)(
+        IESOpenMmiEvent* This,
+        DWORD *pDialogRequest,
+        DWORD *pDialogNumber);
+
+    HRESULT (STDMETHODCALLTYPE *GetDialogType)(
+        IESOpenMmiEvent* This,
+        GUID *guidDialogType);
+
+    HRESULT (STDMETHODCALLTYPE *GetDialogData)(
+        IESOpenMmiEvent* This,
+        SAFEARRAY **pbData);
+
+    HRESULT (STDMETHODCALLTYPE *GetDialogStringData)(
+        IESOpenMmiEvent* This,
+        BSTR *pbstrBaseUrl,
+        BSTR *pbstrData);
+
+    END_INTERFACE
+} IESOpenMmiEventVtbl;
+interface IESOpenMmiEvent {
+    CONST_VTBL IESOpenMmiEventVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IESOpenMmiEvent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IESOpenMmiEvent_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IESOpenMmiEvent_Release(This) (This)->lpVtbl->Release(This)
+/*** IESEvent methods ***/
+#define IESOpenMmiEvent_GetEventId(This,pdwEventId) (This)->lpVtbl->GetEventId(This,pdwEventId)
+#define IESOpenMmiEvent_GetEventType(This,pguidEventType) (This)->lpVtbl->GetEventType(This,pguidEventType)
+#define IESOpenMmiEvent_SetCompletionStatus(This,dwResult) (This)->lpVtbl->SetCompletionStatus(This,dwResult)
+#define IESOpenMmiEvent_GetData(This,pbData) (This)->lpVtbl->GetData(This,pbData)
+#define IESOpenMmiEvent_GetStringData(This,pbstrData) (This)->lpVtbl->GetStringData(This,pbstrData)
+/*** IESOpenMmiEvent methods ***/
+#define IESOpenMmiEvent_GetDialogNumber(This,pDialogRequest,pDialogNumber) (This)->lpVtbl->GetDialogNumber(This,pDialogRequest,pDialogNumber)
+#define IESOpenMmiEvent_GetDialogType(This,guidDialogType) (This)->lpVtbl->GetDialogType(This,guidDialogType)
+#define IESOpenMmiEvent_GetDialogData(This,pbData) (This)->lpVtbl->GetDialogData(This,pbData)
+#define IESOpenMmiEvent_GetDialogStringData(This,pbstrBaseUrl,pbstrData) (This)->lpVtbl->GetDialogStringData(This,pbstrBaseUrl,pbstrData)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IESOpenMmiEvent_QueryInterface(IESOpenMmiEvent* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IESOpenMmiEvent_AddRef(IESOpenMmiEvent* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IESOpenMmiEvent_Release(IESOpenMmiEvent* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IESEvent methods ***/
+static FORCEINLINE HRESULT IESOpenMmiEvent_GetEventId(IESOpenMmiEvent* This,DWORD *pdwEventId) {
+    return This->lpVtbl->GetEventId(This,pdwEventId);
+}
+static FORCEINLINE HRESULT IESOpenMmiEvent_GetEventType(IESOpenMmiEvent* This,GUID *pguidEventType) {
+    return This->lpVtbl->GetEventType(This,pguidEventType);
+}
+static FORCEINLINE HRESULT IESOpenMmiEvent_SetCompletionStatus(IESOpenMmiEvent* This,DWORD dwResult) {
+    return This->lpVtbl->SetCompletionStatus(This,dwResult);
+}
+static FORCEINLINE HRESULT IESOpenMmiEvent_GetData(IESOpenMmiEvent* This,SAFEARRAY **pbData) {
+    return This->lpVtbl->GetData(This,pbData);
+}
+static FORCEINLINE HRESULT IESOpenMmiEvent_GetStringData(IESOpenMmiEvent* This,BSTR *pbstrData) {
+    return This->lpVtbl->GetStringData(This,pbstrData);
+}
+/*** IESOpenMmiEvent methods ***/
+static FORCEINLINE HRESULT IESOpenMmiEvent_GetDialogNumber(IESOpenMmiEvent* This,DWORD *pDialogRequest,DWORD *pDialogNumber) {
+    return This->lpVtbl->GetDialogNumber(This,pDialogRequest,pDialogNumber);
+}
+static FORCEINLINE HRESULT IESOpenMmiEvent_GetDialogType(IESOpenMmiEvent* This,GUID *guidDialogType) {
+    return This->lpVtbl->GetDialogType(This,guidDialogType);
+}
+static FORCEINLINE HRESULT IESOpenMmiEvent_GetDialogData(IESOpenMmiEvent* This,SAFEARRAY **pbData) {
+    return This->lpVtbl->GetDialogData(This,pbData);
+}
+static FORCEINLINE HRESULT IESOpenMmiEvent_GetDialogStringData(IESOpenMmiEvent* This,BSTR *pbstrBaseUrl,BSTR *pbstrData) {
+    return This->lpVtbl->GetDialogStringData(This,pbstrBaseUrl,pbstrData);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IESOpenMmiEvent_GetDialogNumber_Proxy(
+    IESOpenMmiEvent* This,
+    DWORD *pDialogRequest,
+    DWORD *pDialogNumber);
+void __RPC_STUB IESOpenMmiEvent_GetDialogNumber_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESOpenMmiEvent_GetDialogType_Proxy(
+    IESOpenMmiEvent* This,
+    GUID *guidDialogType);
+void __RPC_STUB IESOpenMmiEvent_GetDialogType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESOpenMmiEvent_GetDialogData_Proxy(
+    IESOpenMmiEvent* This,
+    SAFEARRAY **pbData);
+void __RPC_STUB IESOpenMmiEvent_GetDialogData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESOpenMmiEvent_GetDialogStringData_Proxy(
+    IESOpenMmiEvent* This,
+    BSTR *pbstrBaseUrl,
+    BSTR *pbstrData);
+void __RPC_STUB IESOpenMmiEvent_GetDialogStringData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IESOpenMmiEvent_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IESCloseMmiEvent interface
+ */
+#ifndef __IESCloseMmiEvent_INTERFACE_DEFINED__
+#define __IESCloseMmiEvent_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IESCloseMmiEvent, 0x6b80e96f, 0x55e2, 0x45aa, 0xb7,0x54, 0x0c,0x23,0xc8,0xe7,0xd5,0xc1);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("6b80e96f-55e2-45aa-b754-0c23c8e7d5c1")
+IESCloseMmiEvent : public IESEvent
+{
+    virtual HRESULT STDMETHODCALLTYPE GetDialogNumber(
+        DWORD *pDialogNumber) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IESCloseMmiEvent, 0x6b80e96f, 0x55e2, 0x45aa, 0xb7,0x54, 0x0c,0x23,0xc8,0xe7,0xd5,0xc1)
+#endif
+#else
+typedef struct IESCloseMmiEventVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IESCloseMmiEvent* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IESCloseMmiEvent* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IESCloseMmiEvent* This);
+
+    /*** IESEvent methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetEventId)(
+        IESCloseMmiEvent* This,
+        DWORD *pdwEventId);
+
+    HRESULT (STDMETHODCALLTYPE *GetEventType)(
+        IESCloseMmiEvent* This,
+        GUID *pguidEventType);
+
+    HRESULT (STDMETHODCALLTYPE *SetCompletionStatus)(
+        IESCloseMmiEvent* This,
+        DWORD dwResult);
+
+    HRESULT (STDMETHODCALLTYPE *GetData)(
+        IESCloseMmiEvent* This,
+        SAFEARRAY **pbData);
+
+    HRESULT (STDMETHODCALLTYPE *GetStringData)(
+        IESCloseMmiEvent* This,
+        BSTR *pbstrData);
+
+    /*** IESCloseMmiEvent methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDialogNumber)(
+        IESCloseMmiEvent* This,
+        DWORD *pDialogNumber);
+
+    END_INTERFACE
+} IESCloseMmiEventVtbl;
+interface IESCloseMmiEvent {
+    CONST_VTBL IESCloseMmiEventVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IESCloseMmiEvent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IESCloseMmiEvent_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IESCloseMmiEvent_Release(This) (This)->lpVtbl->Release(This)
+/*** IESEvent methods ***/
+#define IESCloseMmiEvent_GetEventId(This,pdwEventId) (This)->lpVtbl->GetEventId(This,pdwEventId)
+#define IESCloseMmiEvent_GetEventType(This,pguidEventType) (This)->lpVtbl->GetEventType(This,pguidEventType)
+#define IESCloseMmiEvent_SetCompletionStatus(This,dwResult) (This)->lpVtbl->SetCompletionStatus(This,dwResult)
+#define IESCloseMmiEvent_GetData(This,pbData) (This)->lpVtbl->GetData(This,pbData)
+#define IESCloseMmiEvent_GetStringData(This,pbstrData) (This)->lpVtbl->GetStringData(This,pbstrData)
+/*** IESCloseMmiEvent methods ***/
+#define IESCloseMmiEvent_GetDialogNumber(This,pDialogNumber) (This)->lpVtbl->GetDialogNumber(This,pDialogNumber)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IESCloseMmiEvent_QueryInterface(IESCloseMmiEvent* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IESCloseMmiEvent_AddRef(IESCloseMmiEvent* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IESCloseMmiEvent_Release(IESCloseMmiEvent* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IESEvent methods ***/
+static FORCEINLINE HRESULT IESCloseMmiEvent_GetEventId(IESCloseMmiEvent* This,DWORD *pdwEventId) {
+    return This->lpVtbl->GetEventId(This,pdwEventId);
+}
+static FORCEINLINE HRESULT IESCloseMmiEvent_GetEventType(IESCloseMmiEvent* This,GUID *pguidEventType) {
+    return This->lpVtbl->GetEventType(This,pguidEventType);
+}
+static FORCEINLINE HRESULT IESCloseMmiEvent_SetCompletionStatus(IESCloseMmiEvent* This,DWORD dwResult) {
+    return This->lpVtbl->SetCompletionStatus(This,dwResult);
+}
+static FORCEINLINE HRESULT IESCloseMmiEvent_GetData(IESCloseMmiEvent* This,SAFEARRAY **pbData) {
+    return This->lpVtbl->GetData(This,pbData);
+}
+static FORCEINLINE HRESULT IESCloseMmiEvent_GetStringData(IESCloseMmiEvent* This,BSTR *pbstrData) {
+    return This->lpVtbl->GetStringData(This,pbstrData);
+}
+/*** IESCloseMmiEvent methods ***/
+static FORCEINLINE HRESULT IESCloseMmiEvent_GetDialogNumber(IESCloseMmiEvent* This,DWORD *pDialogNumber) {
+    return This->lpVtbl->GetDialogNumber(This,pDialogNumber);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IESCloseMmiEvent_GetDialogNumber_Proxy(
+    IESCloseMmiEvent* This,
+    DWORD *pDialogNumber);
+void __RPC_STUB IESCloseMmiEvent_GetDialogNumber_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IESCloseMmiEvent_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IESValueUpdatedEvent interface
+ */
+#ifndef __IESValueUpdatedEvent_INTERFACE_DEFINED__
+#define __IESValueUpdatedEvent_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IESValueUpdatedEvent, 0x8a24c46e, 0xbb63, 0x4664, 0x86,0x02, 0x5d,0x9c,0x71,0x8c,0x14,0x6d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("8a24c46e-bb63-4664-8602-5d9c718c146d")
+IESValueUpdatedEvent : public IESEvent
+{
+    virtual HRESULT STDMETHODCALLTYPE GetValueNames(
+        SAFEARRAY **pbstrNames) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IESValueUpdatedEvent, 0x8a24c46e, 0xbb63, 0x4664, 0x86,0x02, 0x5d,0x9c,0x71,0x8c,0x14,0x6d)
+#endif
+#else
+typedef struct IESValueUpdatedEventVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IESValueUpdatedEvent* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IESValueUpdatedEvent* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IESValueUpdatedEvent* This);
+
+    /*** IESEvent methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetEventId)(
+        IESValueUpdatedEvent* This,
+        DWORD *pdwEventId);
+
+    HRESULT (STDMETHODCALLTYPE *GetEventType)(
+        IESValueUpdatedEvent* This,
+        GUID *pguidEventType);
+
+    HRESULT (STDMETHODCALLTYPE *SetCompletionStatus)(
+        IESValueUpdatedEvent* This,
+        DWORD dwResult);
+
+    HRESULT (STDMETHODCALLTYPE *GetData)(
+        IESValueUpdatedEvent* This,
+        SAFEARRAY **pbData);
+
+    HRESULT (STDMETHODCALLTYPE *GetStringData)(
+        IESValueUpdatedEvent* This,
+        BSTR *pbstrData);
+
+    /*** IESValueUpdatedEvent methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetValueNames)(
+        IESValueUpdatedEvent* This,
+        SAFEARRAY **pbstrNames);
+
+    END_INTERFACE
+} IESValueUpdatedEventVtbl;
+interface IESValueUpdatedEvent {
+    CONST_VTBL IESValueUpdatedEventVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IESValueUpdatedEvent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IESValueUpdatedEvent_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IESValueUpdatedEvent_Release(This) (This)->lpVtbl->Release(This)
+/*** IESEvent methods ***/
+#define IESValueUpdatedEvent_GetEventId(This,pdwEventId) (This)->lpVtbl->GetEventId(This,pdwEventId)
+#define IESValueUpdatedEvent_GetEventType(This,pguidEventType) (This)->lpVtbl->GetEventType(This,pguidEventType)
+#define IESValueUpdatedEvent_SetCompletionStatus(This,dwResult) (This)->lpVtbl->SetCompletionStatus(This,dwResult)
+#define IESValueUpdatedEvent_GetData(This,pbData) (This)->lpVtbl->GetData(This,pbData)
+#define IESValueUpdatedEvent_GetStringData(This,pbstrData) (This)->lpVtbl->GetStringData(This,pbstrData)
+/*** IESValueUpdatedEvent methods ***/
+#define IESValueUpdatedEvent_GetValueNames(This,pbstrNames) (This)->lpVtbl->GetValueNames(This,pbstrNames)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IESValueUpdatedEvent_QueryInterface(IESValueUpdatedEvent* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IESValueUpdatedEvent_AddRef(IESValueUpdatedEvent* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IESValueUpdatedEvent_Release(IESValueUpdatedEvent* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IESEvent methods ***/
+static FORCEINLINE HRESULT IESValueUpdatedEvent_GetEventId(IESValueUpdatedEvent* This,DWORD *pdwEventId) {
+    return This->lpVtbl->GetEventId(This,pdwEventId);
+}
+static FORCEINLINE HRESULT IESValueUpdatedEvent_GetEventType(IESValueUpdatedEvent* This,GUID *pguidEventType) {
+    return This->lpVtbl->GetEventType(This,pguidEventType);
+}
+static FORCEINLINE HRESULT IESValueUpdatedEvent_SetCompletionStatus(IESValueUpdatedEvent* This,DWORD dwResult) {
+    return This->lpVtbl->SetCompletionStatus(This,dwResult);
+}
+static FORCEINLINE HRESULT IESValueUpdatedEvent_GetData(IESValueUpdatedEvent* This,SAFEARRAY **pbData) {
+    return This->lpVtbl->GetData(This,pbData);
+}
+static FORCEINLINE HRESULT IESValueUpdatedEvent_GetStringData(IESValueUpdatedEvent* This,BSTR *pbstrData) {
+    return This->lpVtbl->GetStringData(This,pbstrData);
+}
+/*** IESValueUpdatedEvent methods ***/
+static FORCEINLINE HRESULT IESValueUpdatedEvent_GetValueNames(IESValueUpdatedEvent* This,SAFEARRAY **pbstrNames) {
+    return This->lpVtbl->GetValueNames(This,pbstrNames);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IESValueUpdatedEvent_GetValueNames_Proxy(
+    IESValueUpdatedEvent* This,
+    SAFEARRAY **pbstrNames);
+void __RPC_STUB IESValueUpdatedEvent_GetValueNames_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IESValueUpdatedEvent_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IESRequestTunerEvent interface
+ */
+#ifndef __IESRequestTunerEvent_INTERFACE_DEFINED__
+#define __IESRequestTunerEvent_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IESRequestTunerEvent, 0x54c7a5e8, 0xc3bb, 0x4f51, 0xaf,0x14, 0xe0,0xe2,0xc0,0xe3,0x4c,0x6d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("54c7a5e8-c3bb-4f51-af14-e0e2c0e34c6d")
+IESRequestTunerEvent : public IESEvent
+{
+    virtual HRESULT STDMETHODCALLTYPE GetPriority(
+        BYTE *pbyPriority) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetReason(
+        BYTE *pbyReason) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetConsequences(
+        BYTE *pbyConsequences) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetEstimatedTime(
+        DWORD *pdwEstimatedTime) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IESRequestTunerEvent, 0x54c7a5e8, 0xc3bb, 0x4f51, 0xaf,0x14, 0xe0,0xe2,0xc0,0xe3,0x4c,0x6d)
+#endif
+#else
+typedef struct IESRequestTunerEventVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IESRequestTunerEvent* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IESRequestTunerEvent* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IESRequestTunerEvent* This);
+
+    /*** IESEvent methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetEventId)(
+        IESRequestTunerEvent* This,
+        DWORD *pdwEventId);
+
+    HRESULT (STDMETHODCALLTYPE *GetEventType)(
+        IESRequestTunerEvent* This,
+        GUID *pguidEventType);
+
+    HRESULT (STDMETHODCALLTYPE *SetCompletionStatus)(
+        IESRequestTunerEvent* This,
+        DWORD dwResult);
+
+    HRESULT (STDMETHODCALLTYPE *GetData)(
+        IESRequestTunerEvent* This,
+        SAFEARRAY **pbData);
+
+    HRESULT (STDMETHODCALLTYPE *GetStringData)(
+        IESRequestTunerEvent* This,
+        BSTR *pbstrData);
+
+    /*** IESRequestTunerEvent methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetPriority)(
+        IESRequestTunerEvent* This,
+        BYTE *pbyPriority);
+
+    HRESULT (STDMETHODCALLTYPE *GetReason)(
+        IESRequestTunerEvent* This,
+        BYTE *pbyReason);
+
+    HRESULT (STDMETHODCALLTYPE *GetConsequences)(
+        IESRequestTunerEvent* This,
+        BYTE *pbyConsequences);
+
+    HRESULT (STDMETHODCALLTYPE *GetEstimatedTime)(
+        IESRequestTunerEvent* This,
+        DWORD *pdwEstimatedTime);
+
+    END_INTERFACE
+} IESRequestTunerEventVtbl;
+interface IESRequestTunerEvent {
+    CONST_VTBL IESRequestTunerEventVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IESRequestTunerEvent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IESRequestTunerEvent_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IESRequestTunerEvent_Release(This) (This)->lpVtbl->Release(This)
+/*** IESEvent methods ***/
+#define IESRequestTunerEvent_GetEventId(This,pdwEventId) (This)->lpVtbl->GetEventId(This,pdwEventId)
+#define IESRequestTunerEvent_GetEventType(This,pguidEventType) (This)->lpVtbl->GetEventType(This,pguidEventType)
+#define IESRequestTunerEvent_SetCompletionStatus(This,dwResult) (This)->lpVtbl->SetCompletionStatus(This,dwResult)
+#define IESRequestTunerEvent_GetData(This,pbData) (This)->lpVtbl->GetData(This,pbData)
+#define IESRequestTunerEvent_GetStringData(This,pbstrData) (This)->lpVtbl->GetStringData(This,pbstrData)
+/*** IESRequestTunerEvent methods ***/
+#define IESRequestTunerEvent_GetPriority(This,pbyPriority) (This)->lpVtbl->GetPriority(This,pbyPriority)
+#define IESRequestTunerEvent_GetReason(This,pbyReason) (This)->lpVtbl->GetReason(This,pbyReason)
+#define IESRequestTunerEvent_GetConsequences(This,pbyConsequences) (This)->lpVtbl->GetConsequences(This,pbyConsequences)
+#define IESRequestTunerEvent_GetEstimatedTime(This,pdwEstimatedTime) (This)->lpVtbl->GetEstimatedTime(This,pdwEstimatedTime)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IESRequestTunerEvent_QueryInterface(IESRequestTunerEvent* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IESRequestTunerEvent_AddRef(IESRequestTunerEvent* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IESRequestTunerEvent_Release(IESRequestTunerEvent* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IESEvent methods ***/
+static FORCEINLINE HRESULT IESRequestTunerEvent_GetEventId(IESRequestTunerEvent* This,DWORD *pdwEventId) {
+    return This->lpVtbl->GetEventId(This,pdwEventId);
+}
+static FORCEINLINE HRESULT IESRequestTunerEvent_GetEventType(IESRequestTunerEvent* This,GUID *pguidEventType) {
+    return This->lpVtbl->GetEventType(This,pguidEventType);
+}
+static FORCEINLINE HRESULT IESRequestTunerEvent_SetCompletionStatus(IESRequestTunerEvent* This,DWORD dwResult) {
+    return This->lpVtbl->SetCompletionStatus(This,dwResult);
+}
+static FORCEINLINE HRESULT IESRequestTunerEvent_GetData(IESRequestTunerEvent* This,SAFEARRAY **pbData) {
+    return This->lpVtbl->GetData(This,pbData);
+}
+static FORCEINLINE HRESULT IESRequestTunerEvent_GetStringData(IESRequestTunerEvent* This,BSTR *pbstrData) {
+    return This->lpVtbl->GetStringData(This,pbstrData);
+}
+/*** IESRequestTunerEvent methods ***/
+static FORCEINLINE HRESULT IESRequestTunerEvent_GetPriority(IESRequestTunerEvent* This,BYTE *pbyPriority) {
+    return This->lpVtbl->GetPriority(This,pbyPriority);
+}
+static FORCEINLINE HRESULT IESRequestTunerEvent_GetReason(IESRequestTunerEvent* This,BYTE *pbyReason) {
+    return This->lpVtbl->GetReason(This,pbyReason);
+}
+static FORCEINLINE HRESULT IESRequestTunerEvent_GetConsequences(IESRequestTunerEvent* This,BYTE *pbyConsequences) {
+    return This->lpVtbl->GetConsequences(This,pbyConsequences);
+}
+static FORCEINLINE HRESULT IESRequestTunerEvent_GetEstimatedTime(IESRequestTunerEvent* This,DWORD *pdwEstimatedTime) {
+    return This->lpVtbl->GetEstimatedTime(This,pdwEstimatedTime);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IESRequestTunerEvent_GetPriority_Proxy(
+    IESRequestTunerEvent* This,
+    BYTE *pbyPriority);
+void __RPC_STUB IESRequestTunerEvent_GetPriority_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESRequestTunerEvent_GetReason_Proxy(
+    IESRequestTunerEvent* This,
+    BYTE *pbyReason);
+void __RPC_STUB IESRequestTunerEvent_GetReason_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESRequestTunerEvent_GetConsequences_Proxy(
+    IESRequestTunerEvent* This,
+    BYTE *pbyConsequences);
+void __RPC_STUB IESRequestTunerEvent_GetConsequences_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESRequestTunerEvent_GetEstimatedTime_Proxy(
+    IESRequestTunerEvent* This,
+    DWORD *pdwEstimatedTime);
+void __RPC_STUB IESRequestTunerEvent_GetEstimatedTime_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IESRequestTunerEvent_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IESIsdbCasResponseEvent interface
+ */
+#ifndef __IESIsdbCasResponseEvent_INTERFACE_DEFINED__
+#define __IESIsdbCasResponseEvent_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IESIsdbCasResponseEvent, 0x2017cb03, 0xdc0f, 0x4c24, 0x83,0xca, 0x36,0x30,0x7b,0x2c,0xd1,0x9f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("2017cb03-dc0f-4c24-83ca-36307b2cd19f")
+IESIsdbCasResponseEvent : public IESEvent
+{
+    virtual HRESULT STDMETHODCALLTYPE GetRequestId(
+        DWORD *pRequestId) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetStatus(
+        DWORD *pStatus) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDataLength(
+        DWORD *pRequestLength) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetResponseData(
+        SAFEARRAY **pbData) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IESIsdbCasResponseEvent, 0x2017cb03, 0xdc0f, 0x4c24, 0x83,0xca, 0x36,0x30,0x7b,0x2c,0xd1,0x9f)
+#endif
+#else
+typedef struct IESIsdbCasResponseEventVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IESIsdbCasResponseEvent* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IESIsdbCasResponseEvent* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IESIsdbCasResponseEvent* This);
+
+    /*** IESEvent methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetEventId)(
+        IESIsdbCasResponseEvent* This,
+        DWORD *pdwEventId);
+
+    HRESULT (STDMETHODCALLTYPE *GetEventType)(
+        IESIsdbCasResponseEvent* This,
+        GUID *pguidEventType);
+
+    HRESULT (STDMETHODCALLTYPE *SetCompletionStatus)(
+        IESIsdbCasResponseEvent* This,
+        DWORD dwResult);
+
+    HRESULT (STDMETHODCALLTYPE *GetData)(
+        IESIsdbCasResponseEvent* This,
+        SAFEARRAY **pbData);
+
+    HRESULT (STDMETHODCALLTYPE *GetStringData)(
+        IESIsdbCasResponseEvent* This,
+        BSTR *pbstrData);
+
+    /*** IESIsdbCasResponseEvent methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetRequestId)(
+        IESIsdbCasResponseEvent* This,
+        DWORD *pRequestId);
+
+    HRESULT (STDMETHODCALLTYPE *GetStatus)(
+        IESIsdbCasResponseEvent* This,
+        DWORD *pStatus);
+
+    HRESULT (STDMETHODCALLTYPE *GetDataLength)(
+        IESIsdbCasResponseEvent* This,
+        DWORD *pRequestLength);
+
+    HRESULT (STDMETHODCALLTYPE *GetResponseData)(
+        IESIsdbCasResponseEvent* This,
+        SAFEARRAY **pbData);
+
+    END_INTERFACE
+} IESIsdbCasResponseEventVtbl;
+interface IESIsdbCasResponseEvent {
+    CONST_VTBL IESIsdbCasResponseEventVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IESIsdbCasResponseEvent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IESIsdbCasResponseEvent_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IESIsdbCasResponseEvent_Release(This) (This)->lpVtbl->Release(This)
+/*** IESEvent methods ***/
+#define IESIsdbCasResponseEvent_GetEventId(This,pdwEventId) (This)->lpVtbl->GetEventId(This,pdwEventId)
+#define IESIsdbCasResponseEvent_GetEventType(This,pguidEventType) (This)->lpVtbl->GetEventType(This,pguidEventType)
+#define IESIsdbCasResponseEvent_SetCompletionStatus(This,dwResult) (This)->lpVtbl->SetCompletionStatus(This,dwResult)
+#define IESIsdbCasResponseEvent_GetData(This,pbData) (This)->lpVtbl->GetData(This,pbData)
+#define IESIsdbCasResponseEvent_GetStringData(This,pbstrData) (This)->lpVtbl->GetStringData(This,pbstrData)
+/*** IESIsdbCasResponseEvent methods ***/
+#define IESIsdbCasResponseEvent_GetRequestId(This,pRequestId) (This)->lpVtbl->GetRequestId(This,pRequestId)
+#define IESIsdbCasResponseEvent_GetStatus(This,pStatus) (This)->lpVtbl->GetStatus(This,pStatus)
+#define IESIsdbCasResponseEvent_GetDataLength(This,pRequestLength) (This)->lpVtbl->GetDataLength(This,pRequestLength)
+#define IESIsdbCasResponseEvent_GetResponseData(This,pbData) (This)->lpVtbl->GetResponseData(This,pbData)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IESIsdbCasResponseEvent_QueryInterface(IESIsdbCasResponseEvent* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IESIsdbCasResponseEvent_AddRef(IESIsdbCasResponseEvent* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IESIsdbCasResponseEvent_Release(IESIsdbCasResponseEvent* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IESEvent methods ***/
+static FORCEINLINE HRESULT IESIsdbCasResponseEvent_GetEventId(IESIsdbCasResponseEvent* This,DWORD *pdwEventId) {
+    return This->lpVtbl->GetEventId(This,pdwEventId);
+}
+static FORCEINLINE HRESULT IESIsdbCasResponseEvent_GetEventType(IESIsdbCasResponseEvent* This,GUID *pguidEventType) {
+    return This->lpVtbl->GetEventType(This,pguidEventType);
+}
+static FORCEINLINE HRESULT IESIsdbCasResponseEvent_SetCompletionStatus(IESIsdbCasResponseEvent* This,DWORD dwResult) {
+    return This->lpVtbl->SetCompletionStatus(This,dwResult);
+}
+static FORCEINLINE HRESULT IESIsdbCasResponseEvent_GetData(IESIsdbCasResponseEvent* This,SAFEARRAY **pbData) {
+    return This->lpVtbl->GetData(This,pbData);
+}
+static FORCEINLINE HRESULT IESIsdbCasResponseEvent_GetStringData(IESIsdbCasResponseEvent* This,BSTR *pbstrData) {
+    return This->lpVtbl->GetStringData(This,pbstrData);
+}
+/*** IESIsdbCasResponseEvent methods ***/
+static FORCEINLINE HRESULT IESIsdbCasResponseEvent_GetRequestId(IESIsdbCasResponseEvent* This,DWORD *pRequestId) {
+    return This->lpVtbl->GetRequestId(This,pRequestId);
+}
+static FORCEINLINE HRESULT IESIsdbCasResponseEvent_GetStatus(IESIsdbCasResponseEvent* This,DWORD *pStatus) {
+    return This->lpVtbl->GetStatus(This,pStatus);
+}
+static FORCEINLINE HRESULT IESIsdbCasResponseEvent_GetDataLength(IESIsdbCasResponseEvent* This,DWORD *pRequestLength) {
+    return This->lpVtbl->GetDataLength(This,pRequestLength);
+}
+static FORCEINLINE HRESULT IESIsdbCasResponseEvent_GetResponseData(IESIsdbCasResponseEvent* This,SAFEARRAY **pbData) {
+    return This->lpVtbl->GetResponseData(This,pbData);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IESIsdbCasResponseEvent_GetRequestId_Proxy(
+    IESIsdbCasResponseEvent* This,
+    DWORD *pRequestId);
+void __RPC_STUB IESIsdbCasResponseEvent_GetRequestId_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESIsdbCasResponseEvent_GetStatus_Proxy(
+    IESIsdbCasResponseEvent* This,
+    DWORD *pStatus);
+void __RPC_STUB IESIsdbCasResponseEvent_GetStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESIsdbCasResponseEvent_GetDataLength_Proxy(
+    IESIsdbCasResponseEvent* This,
+    DWORD *pRequestLength);
+void __RPC_STUB IESIsdbCasResponseEvent_GetDataLength_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESIsdbCasResponseEvent_GetResponseData_Proxy(
+    IESIsdbCasResponseEvent* This,
+    SAFEARRAY **pbData);
+void __RPC_STUB IESIsdbCasResponseEvent_GetResponseData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IESIsdbCasResponseEvent_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IGpnvsCommonBase interface
+ */
+#ifndef __IGpnvsCommonBase_INTERFACE_DEFINED__
+#define __IGpnvsCommonBase_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IGpnvsCommonBase, 0x907e0b5c, 0xe42d, 0x4f04, 0x91,0xf0, 0x26,0xf4,0x01,0xf3,0x69,0x07);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("907e0b5c-e42d-4f04-91f0-26f401f36907")
+IGpnvsCommonBase : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetValueUpdateName(
+        BSTR *pbstrName) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IGpnvsCommonBase, 0x907e0b5c, 0xe42d, 0x4f04, 0x91,0xf0, 0x26,0xf4,0x01,0xf3,0x69,0x07)
+#endif
+#else
+typedef struct IGpnvsCommonBaseVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IGpnvsCommonBase* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IGpnvsCommonBase* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IGpnvsCommonBase* This);
+
+    /*** IGpnvsCommonBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetValueUpdateName)(
+        IGpnvsCommonBase* This,
+        BSTR *pbstrName);
+
+    END_INTERFACE
+} IGpnvsCommonBaseVtbl;
+interface IGpnvsCommonBase {
+    CONST_VTBL IGpnvsCommonBaseVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IGpnvsCommonBase_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IGpnvsCommonBase_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IGpnvsCommonBase_Release(This) (This)->lpVtbl->Release(This)
+/*** IGpnvsCommonBase methods ***/
+#define IGpnvsCommonBase_GetValueUpdateName(This,pbstrName) (This)->lpVtbl->GetValueUpdateName(This,pbstrName)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IGpnvsCommonBase_QueryInterface(IGpnvsCommonBase* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IGpnvsCommonBase_AddRef(IGpnvsCommonBase* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IGpnvsCommonBase_Release(IGpnvsCommonBase* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IGpnvsCommonBase methods ***/
+static FORCEINLINE HRESULT IGpnvsCommonBase_GetValueUpdateName(IGpnvsCommonBase* This,BSTR *pbstrName) {
+    return This->lpVtbl->GetValueUpdateName(This,pbstrName);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IGpnvsCommonBase_GetValueUpdateName_Proxy(
+    IGpnvsCommonBase* This,
+    BSTR *pbstrName);
+void __RPC_STUB IGpnvsCommonBase_GetValueUpdateName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IGpnvsCommonBase_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IESEventFactory interface
+ */
+#ifndef __IESEventFactory_INTERFACE_DEFINED__
+#define __IESEventFactory_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IESEventFactory, 0x506a09b8, 0x7f86, 0x4e04, 0xac,0x05, 0x33,0x03,0xbf,0xe8,0xfc,0x49);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("506a09b8-7f86-4e04-ac05-3303bfe8fc49")
+IESEventFactory : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateESEvent(
+        IUnknown *pServiceProvider,
+        DWORD dwEventId,
+        GUID guidEventType,
+        DWORD dwEventDataLength,
+        BYTE *pEventData,
+        BSTR bstrBaseUrl,
+        IUnknown *pInitContext,
+        IESEvent **ppESEvent) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IESEventFactory, 0x506a09b8, 0x7f86, 0x4e04, 0xac,0x05, 0x33,0x03,0xbf,0xe8,0xfc,0x49)
+#endif
+#else
+typedef struct IESEventFactoryVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IESEventFactory* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IESEventFactory* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IESEventFactory* This);
+
+    /*** IESEventFactory methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateESEvent)(
+        IESEventFactory* This,
+        IUnknown *pServiceProvider,
+        DWORD dwEventId,
+        GUID guidEventType,
+        DWORD dwEventDataLength,
+        BYTE *pEventData,
+        BSTR bstrBaseUrl,
+        IUnknown *pInitContext,
+        IESEvent **ppESEvent);
+
+    END_INTERFACE
+} IESEventFactoryVtbl;
+interface IESEventFactory {
+    CONST_VTBL IESEventFactoryVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IESEventFactory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IESEventFactory_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IESEventFactory_Release(This) (This)->lpVtbl->Release(This)
+/*** IESEventFactory methods ***/
+#define IESEventFactory_CreateESEvent(This,pServiceProvider,dwEventId,guidEventType,dwEventDataLength,pEventData,bstrBaseUrl,pInitContext,ppESEvent) (This)->lpVtbl->CreateESEvent(This,pServiceProvider,dwEventId,guidEventType,dwEventDataLength,pEventData,bstrBaseUrl,pInitContext,ppESEvent)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IESEventFactory_QueryInterface(IESEventFactory* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IESEventFactory_AddRef(IESEventFactory* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IESEventFactory_Release(IESEventFactory* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IESEventFactory methods ***/
+static FORCEINLINE HRESULT IESEventFactory_CreateESEvent(IESEventFactory* This,IUnknown *pServiceProvider,DWORD dwEventId,GUID guidEventType,DWORD dwEventDataLength,BYTE *pEventData,BSTR bstrBaseUrl,IUnknown *pInitContext,IESEvent **ppESEvent) {
+    return This->lpVtbl->CreateESEvent(This,pServiceProvider,dwEventId,guidEventType,dwEventDataLength,pEventData,bstrBaseUrl,pInitContext,ppESEvent);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IESEventFactory_CreateESEvent_Proxy(
+    IESEventFactory* This,
+    IUnknown *pServiceProvider,
+    DWORD dwEventId,
+    GUID guidEventType,
+    DWORD dwEventDataLength,
+    BYTE *pEventData,
+    BSTR bstrBaseUrl,
+    IUnknown *pInitContext,
+    IESEvent **ppESEvent);
+void __RPC_STUB IESEventFactory_CreateESEvent_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IESEventFactory_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IESLicenseRenewalResultEvent interface
+ */
+#ifndef __IESLicenseRenewalResultEvent_INTERFACE_DEFINED__
+#define __IESLicenseRenewalResultEvent_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IESLicenseRenewalResultEvent, 0xd5a48ef5, 0xa81b, 0x4df0, 0xac,0xaa, 0x5e,0x35,0xe7,0xea,0x45,0xd4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("d5a48ef5-a81b-4df0-acaa-5e35e7ea45d4")
+IESLicenseRenewalResultEvent : public IESEvent
+{
+    virtual HRESULT STDMETHODCALLTYPE GetCallersId(
+        DWORD *pdwCallersId) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFileName(
+        BSTR *pbstrFilename) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsRenewalSuccessful(
+        WINBOOL *pfRenewalSuccessful) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsCheckEntitlementCallRequired(
+        WINBOOL *pfCheckEntTokenCallNeeded) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDescrambledStatus(
+        DWORD *pDescrambledStatus) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRenewalResultCode(
+        DWORD *pdwRenewalResultCode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCASFailureCode(
+        DWORD *pdwCASFailureCode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRenewalHResult(
+        HRESULT *phr) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetEntitlementTokenLength(
+        DWORD *pdwLength) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetEntitlementToken(
+        SAFEARRAY **pbData) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetExpiryDate(
+        DWORD64 *pqwExpiryDate) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IESLicenseRenewalResultEvent, 0xd5a48ef5, 0xa81b, 0x4df0, 0xac,0xaa, 0x5e,0x35,0xe7,0xea,0x45,0xd4)
+#endif
+#else
+typedef struct IESLicenseRenewalResultEventVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IESLicenseRenewalResultEvent* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IESLicenseRenewalResultEvent* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IESLicenseRenewalResultEvent* This);
+
+    /*** IESEvent methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetEventId)(
+        IESLicenseRenewalResultEvent* This,
+        DWORD *pdwEventId);
+
+    HRESULT (STDMETHODCALLTYPE *GetEventType)(
+        IESLicenseRenewalResultEvent* This,
+        GUID *pguidEventType);
+
+    HRESULT (STDMETHODCALLTYPE *SetCompletionStatus)(
+        IESLicenseRenewalResultEvent* This,
+        DWORD dwResult);
+
+    HRESULT (STDMETHODCALLTYPE *GetData)(
+        IESLicenseRenewalResultEvent* This,
+        SAFEARRAY **pbData);
+
+    HRESULT (STDMETHODCALLTYPE *GetStringData)(
+        IESLicenseRenewalResultEvent* This,
+        BSTR *pbstrData);
+
+    /*** IESLicenseRenewalResultEvent methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetCallersId)(
+        IESLicenseRenewalResultEvent* This,
+        DWORD *pdwCallersId);
+
+    HRESULT (STDMETHODCALLTYPE *GetFileName)(
+        IESLicenseRenewalResultEvent* This,
+        BSTR *pbstrFilename);
+
+    HRESULT (STDMETHODCALLTYPE *IsRenewalSuccessful)(
+        IESLicenseRenewalResultEvent* This,
+        WINBOOL *pfRenewalSuccessful);
+
+    HRESULT (STDMETHODCALLTYPE *IsCheckEntitlementCallRequired)(
+        IESLicenseRenewalResultEvent* This,
+        WINBOOL *pfCheckEntTokenCallNeeded);
+
+    HRESULT (STDMETHODCALLTYPE *GetDescrambledStatus)(
+        IESLicenseRenewalResultEvent* This,
+        DWORD *pDescrambledStatus);
+
+    HRESULT (STDMETHODCALLTYPE *GetRenewalResultCode)(
+        IESLicenseRenewalResultEvent* This,
+        DWORD *pdwRenewalResultCode);
+
+    HRESULT (STDMETHODCALLTYPE *GetCASFailureCode)(
+        IESLicenseRenewalResultEvent* This,
+        DWORD *pdwCASFailureCode);
+
+    HRESULT (STDMETHODCALLTYPE *GetRenewalHResult)(
+        IESLicenseRenewalResultEvent* This,
+        HRESULT *phr);
+
+    HRESULT (STDMETHODCALLTYPE *GetEntitlementTokenLength)(
+        IESLicenseRenewalResultEvent* This,
+        DWORD *pdwLength);
+
+    HRESULT (STDMETHODCALLTYPE *GetEntitlementToken)(
+        IESLicenseRenewalResultEvent* This,
+        SAFEARRAY **pbData);
+
+    HRESULT (STDMETHODCALLTYPE *GetExpiryDate)(
+        IESLicenseRenewalResultEvent* This,
+        DWORD64 *pqwExpiryDate);
+
+    END_INTERFACE
+} IESLicenseRenewalResultEventVtbl;
+interface IESLicenseRenewalResultEvent {
+    CONST_VTBL IESLicenseRenewalResultEventVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IESLicenseRenewalResultEvent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IESLicenseRenewalResultEvent_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IESLicenseRenewalResultEvent_Release(This) (This)->lpVtbl->Release(This)
+/*** IESEvent methods ***/
+#define IESLicenseRenewalResultEvent_GetEventId(This,pdwEventId) (This)->lpVtbl->GetEventId(This,pdwEventId)
+#define IESLicenseRenewalResultEvent_GetEventType(This,pguidEventType) (This)->lpVtbl->GetEventType(This,pguidEventType)
+#define IESLicenseRenewalResultEvent_SetCompletionStatus(This,dwResult) (This)->lpVtbl->SetCompletionStatus(This,dwResult)
+#define IESLicenseRenewalResultEvent_GetData(This,pbData) (This)->lpVtbl->GetData(This,pbData)
+#define IESLicenseRenewalResultEvent_GetStringData(This,pbstrData) (This)->lpVtbl->GetStringData(This,pbstrData)
+/*** IESLicenseRenewalResultEvent methods ***/
+#define IESLicenseRenewalResultEvent_GetCallersId(This,pdwCallersId) (This)->lpVtbl->GetCallersId(This,pdwCallersId)
+#define IESLicenseRenewalResultEvent_GetFileName(This,pbstrFilename) (This)->lpVtbl->GetFileName(This,pbstrFilename)
+#define IESLicenseRenewalResultEvent_IsRenewalSuccessful(This,pfRenewalSuccessful) (This)->lpVtbl->IsRenewalSuccessful(This,pfRenewalSuccessful)
+#define IESLicenseRenewalResultEvent_IsCheckEntitlementCallRequired(This,pfCheckEntTokenCallNeeded) (This)->lpVtbl->IsCheckEntitlementCallRequired(This,pfCheckEntTokenCallNeeded)
+#define IESLicenseRenewalResultEvent_GetDescrambledStatus(This,pDescrambledStatus) (This)->lpVtbl->GetDescrambledStatus(This,pDescrambledStatus)
+#define IESLicenseRenewalResultEvent_GetRenewalResultCode(This,pdwRenewalResultCode) (This)->lpVtbl->GetRenewalResultCode(This,pdwRenewalResultCode)
+#define IESLicenseRenewalResultEvent_GetCASFailureCode(This,pdwCASFailureCode) (This)->lpVtbl->GetCASFailureCode(This,pdwCASFailureCode)
+#define IESLicenseRenewalResultEvent_GetRenewalHResult(This,phr) (This)->lpVtbl->GetRenewalHResult(This,phr)
+#define IESLicenseRenewalResultEvent_GetEntitlementTokenLength(This,pdwLength) (This)->lpVtbl->GetEntitlementTokenLength(This,pdwLength)
+#define IESLicenseRenewalResultEvent_GetEntitlementToken(This,pbData) (This)->lpVtbl->GetEntitlementToken(This,pbData)
+#define IESLicenseRenewalResultEvent_GetExpiryDate(This,pqwExpiryDate) (This)->lpVtbl->GetExpiryDate(This,pqwExpiryDate)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IESLicenseRenewalResultEvent_QueryInterface(IESLicenseRenewalResultEvent* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IESLicenseRenewalResultEvent_AddRef(IESLicenseRenewalResultEvent* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IESLicenseRenewalResultEvent_Release(IESLicenseRenewalResultEvent* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IESEvent methods ***/
+static FORCEINLINE HRESULT IESLicenseRenewalResultEvent_GetEventId(IESLicenseRenewalResultEvent* This,DWORD *pdwEventId) {
+    return This->lpVtbl->GetEventId(This,pdwEventId);
+}
+static FORCEINLINE HRESULT IESLicenseRenewalResultEvent_GetEventType(IESLicenseRenewalResultEvent* This,GUID *pguidEventType) {
+    return This->lpVtbl->GetEventType(This,pguidEventType);
+}
+static FORCEINLINE HRESULT IESLicenseRenewalResultEvent_SetCompletionStatus(IESLicenseRenewalResultEvent* This,DWORD dwResult) {
+    return This->lpVtbl->SetCompletionStatus(This,dwResult);
+}
+static FORCEINLINE HRESULT IESLicenseRenewalResultEvent_GetData(IESLicenseRenewalResultEvent* This,SAFEARRAY **pbData) {
+    return This->lpVtbl->GetData(This,pbData);
+}
+static FORCEINLINE HRESULT IESLicenseRenewalResultEvent_GetStringData(IESLicenseRenewalResultEvent* This,BSTR *pbstrData) {
+    return This->lpVtbl->GetStringData(This,pbstrData);
+}
+/*** IESLicenseRenewalResultEvent methods ***/
+static FORCEINLINE HRESULT IESLicenseRenewalResultEvent_GetCallersId(IESLicenseRenewalResultEvent* This,DWORD *pdwCallersId) {
+    return This->lpVtbl->GetCallersId(This,pdwCallersId);
+}
+static FORCEINLINE HRESULT IESLicenseRenewalResultEvent_GetFileName(IESLicenseRenewalResultEvent* This,BSTR *pbstrFilename) {
+    return This->lpVtbl->GetFileName(This,pbstrFilename);
+}
+static FORCEINLINE HRESULT IESLicenseRenewalResultEvent_IsRenewalSuccessful(IESLicenseRenewalResultEvent* This,WINBOOL *pfRenewalSuccessful) {
+    return This->lpVtbl->IsRenewalSuccessful(This,pfRenewalSuccessful);
+}
+static FORCEINLINE HRESULT IESLicenseRenewalResultEvent_IsCheckEntitlementCallRequired(IESLicenseRenewalResultEvent* This,WINBOOL *pfCheckEntTokenCallNeeded) {
+    return This->lpVtbl->IsCheckEntitlementCallRequired(This,pfCheckEntTokenCallNeeded);
+}
+static FORCEINLINE HRESULT IESLicenseRenewalResultEvent_GetDescrambledStatus(IESLicenseRenewalResultEvent* This,DWORD *pDescrambledStatus) {
+    return This->lpVtbl->GetDescrambledStatus(This,pDescrambledStatus);
+}
+static FORCEINLINE HRESULT IESLicenseRenewalResultEvent_GetRenewalResultCode(IESLicenseRenewalResultEvent* This,DWORD *pdwRenewalResultCode) {
+    return This->lpVtbl->GetRenewalResultCode(This,pdwRenewalResultCode);
+}
+static FORCEINLINE HRESULT IESLicenseRenewalResultEvent_GetCASFailureCode(IESLicenseRenewalResultEvent* This,DWORD *pdwCASFailureCode) {
+    return This->lpVtbl->GetCASFailureCode(This,pdwCASFailureCode);
+}
+static FORCEINLINE HRESULT IESLicenseRenewalResultEvent_GetRenewalHResult(IESLicenseRenewalResultEvent* This,HRESULT *phr) {
+    return This->lpVtbl->GetRenewalHResult(This,phr);
+}
+static FORCEINLINE HRESULT IESLicenseRenewalResultEvent_GetEntitlementTokenLength(IESLicenseRenewalResultEvent* This,DWORD *pdwLength) {
+    return This->lpVtbl->GetEntitlementTokenLength(This,pdwLength);
+}
+static FORCEINLINE HRESULT IESLicenseRenewalResultEvent_GetEntitlementToken(IESLicenseRenewalResultEvent* This,SAFEARRAY **pbData) {
+    return This->lpVtbl->GetEntitlementToken(This,pbData);
+}
+static FORCEINLINE HRESULT IESLicenseRenewalResultEvent_GetExpiryDate(IESLicenseRenewalResultEvent* This,DWORD64 *pqwExpiryDate) {
+    return This->lpVtbl->GetExpiryDate(This,pqwExpiryDate);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IESLicenseRenewalResultEvent_GetCallersId_Proxy(
+    IESLicenseRenewalResultEvent* This,
+    DWORD *pdwCallersId);
+void __RPC_STUB IESLicenseRenewalResultEvent_GetCallersId_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESLicenseRenewalResultEvent_GetFileName_Proxy(
+    IESLicenseRenewalResultEvent* This,
+    BSTR *pbstrFilename);
+void __RPC_STUB IESLicenseRenewalResultEvent_GetFileName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESLicenseRenewalResultEvent_IsRenewalSuccessful_Proxy(
+    IESLicenseRenewalResultEvent* This,
+    WINBOOL *pfRenewalSuccessful);
+void __RPC_STUB IESLicenseRenewalResultEvent_IsRenewalSuccessful_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESLicenseRenewalResultEvent_IsCheckEntitlementCallRequired_Proxy(
+    IESLicenseRenewalResultEvent* This,
+    WINBOOL *pfCheckEntTokenCallNeeded);
+void __RPC_STUB IESLicenseRenewalResultEvent_IsCheckEntitlementCallRequired_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESLicenseRenewalResultEvent_GetDescrambledStatus_Proxy(
+    IESLicenseRenewalResultEvent* This,
+    DWORD *pDescrambledStatus);
+void __RPC_STUB IESLicenseRenewalResultEvent_GetDescrambledStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESLicenseRenewalResultEvent_GetRenewalResultCode_Proxy(
+    IESLicenseRenewalResultEvent* This,
+    DWORD *pdwRenewalResultCode);
+void __RPC_STUB IESLicenseRenewalResultEvent_GetRenewalResultCode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESLicenseRenewalResultEvent_GetCASFailureCode_Proxy(
+    IESLicenseRenewalResultEvent* This,
+    DWORD *pdwCASFailureCode);
+void __RPC_STUB IESLicenseRenewalResultEvent_GetCASFailureCode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESLicenseRenewalResultEvent_GetRenewalHResult_Proxy(
+    IESLicenseRenewalResultEvent* This,
+    HRESULT *phr);
+void __RPC_STUB IESLicenseRenewalResultEvent_GetRenewalHResult_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESLicenseRenewalResultEvent_GetEntitlementTokenLength_Proxy(
+    IESLicenseRenewalResultEvent* This,
+    DWORD *pdwLength);
+void __RPC_STUB IESLicenseRenewalResultEvent_GetEntitlementTokenLength_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESLicenseRenewalResultEvent_GetEntitlementToken_Proxy(
+    IESLicenseRenewalResultEvent* This,
+    SAFEARRAY **pbData);
+void __RPC_STUB IESLicenseRenewalResultEvent_GetEntitlementToken_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESLicenseRenewalResultEvent_GetExpiryDate_Proxy(
+    IESLicenseRenewalResultEvent* This,
+    DWORD64 *pqwExpiryDate);
+void __RPC_STUB IESLicenseRenewalResultEvent_GetExpiryDate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IESLicenseRenewalResultEvent_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IESFileExpiryDateEvent interface
+ */
+#ifndef __IESFileExpiryDateEvent_INTERFACE_DEFINED__
+#define __IESFileExpiryDateEvent_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IESFileExpiryDateEvent, 0xba9edcb6, 0x4d36, 0x4cfe, 0x8c,0x56, 0x87,0xa6,0xb0,0xca,0x48,0xe1);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("ba9edcb6-4d36-4cfe-8c56-87a6b0ca48e1")
+IESFileExpiryDateEvent : public IESEvent
+{
+    virtual HRESULT STDMETHODCALLTYPE GetTunerId(
+        GUID *pguidTunerId) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetExpiryDate(
+        DWORD64 *pqwExpiryDate) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFinalExpiryDate(
+        DWORD64 *pqwExpiryDate) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMaxRenewalCount(
+        DWORD *dwMaxRenewalCount) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsEntitlementTokenPresent(
+        WINBOOL *pfEntTokenPresent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DoesExpireAfterFirstUse(
+        WINBOOL *pfExpireAfterFirstUse) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IESFileExpiryDateEvent, 0xba9edcb6, 0x4d36, 0x4cfe, 0x8c,0x56, 0x87,0xa6,0xb0,0xca,0x48,0xe1)
+#endif
+#else
+typedef struct IESFileExpiryDateEventVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IESFileExpiryDateEvent* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IESFileExpiryDateEvent* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IESFileExpiryDateEvent* This);
+
+    /*** IESEvent methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetEventId)(
+        IESFileExpiryDateEvent* This,
+        DWORD *pdwEventId);
+
+    HRESULT (STDMETHODCALLTYPE *GetEventType)(
+        IESFileExpiryDateEvent* This,
+        GUID *pguidEventType);
+
+    HRESULT (STDMETHODCALLTYPE *SetCompletionStatus)(
+        IESFileExpiryDateEvent* This,
+        DWORD dwResult);
+
+    HRESULT (STDMETHODCALLTYPE *GetData)(
+        IESFileExpiryDateEvent* This,
+        SAFEARRAY **pbData);
+
+    HRESULT (STDMETHODCALLTYPE *GetStringData)(
+        IESFileExpiryDateEvent* This,
+        BSTR *pbstrData);
+
+    /*** IESFileExpiryDateEvent methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTunerId)(
+        IESFileExpiryDateEvent* This,
+        GUID *pguidTunerId);
+
+    HRESULT (STDMETHODCALLTYPE *GetExpiryDate)(
+        IESFileExpiryDateEvent* This,
+        DWORD64 *pqwExpiryDate);
+
+    HRESULT (STDMETHODCALLTYPE *GetFinalExpiryDate)(
+        IESFileExpiryDateEvent* This,
+        DWORD64 *pqwExpiryDate);
+
+    HRESULT (STDMETHODCALLTYPE *GetMaxRenewalCount)(
+        IESFileExpiryDateEvent* This,
+        DWORD *dwMaxRenewalCount);
+
+    HRESULT (STDMETHODCALLTYPE *IsEntitlementTokenPresent)(
+        IESFileExpiryDateEvent* This,
+        WINBOOL *pfEntTokenPresent);
+
+    HRESULT (STDMETHODCALLTYPE *DoesExpireAfterFirstUse)(
+        IESFileExpiryDateEvent* This,
+        WINBOOL *pfExpireAfterFirstUse);
+
+    END_INTERFACE
+} IESFileExpiryDateEventVtbl;
+interface IESFileExpiryDateEvent {
+    CONST_VTBL IESFileExpiryDateEventVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IESFileExpiryDateEvent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IESFileExpiryDateEvent_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IESFileExpiryDateEvent_Release(This) (This)->lpVtbl->Release(This)
+/*** IESEvent methods ***/
+#define IESFileExpiryDateEvent_GetEventId(This,pdwEventId) (This)->lpVtbl->GetEventId(This,pdwEventId)
+#define IESFileExpiryDateEvent_GetEventType(This,pguidEventType) (This)->lpVtbl->GetEventType(This,pguidEventType)
+#define IESFileExpiryDateEvent_SetCompletionStatus(This,dwResult) (This)->lpVtbl->SetCompletionStatus(This,dwResult)
+#define IESFileExpiryDateEvent_GetData(This,pbData) (This)->lpVtbl->GetData(This,pbData)
+#define IESFileExpiryDateEvent_GetStringData(This,pbstrData) (This)->lpVtbl->GetStringData(This,pbstrData)
+/*** IESFileExpiryDateEvent methods ***/
+#define IESFileExpiryDateEvent_GetTunerId(This,pguidTunerId) (This)->lpVtbl->GetTunerId(This,pguidTunerId)
+#define IESFileExpiryDateEvent_GetExpiryDate(This,pqwExpiryDate) (This)->lpVtbl->GetExpiryDate(This,pqwExpiryDate)
+#define IESFileExpiryDateEvent_GetFinalExpiryDate(This,pqwExpiryDate) (This)->lpVtbl->GetFinalExpiryDate(This,pqwExpiryDate)
+#define IESFileExpiryDateEvent_GetMaxRenewalCount(This,dwMaxRenewalCount) (This)->lpVtbl->GetMaxRenewalCount(This,dwMaxRenewalCount)
+#define IESFileExpiryDateEvent_IsEntitlementTokenPresent(This,pfEntTokenPresent) (This)->lpVtbl->IsEntitlementTokenPresent(This,pfEntTokenPresent)
+#define IESFileExpiryDateEvent_DoesExpireAfterFirstUse(This,pfExpireAfterFirstUse) (This)->lpVtbl->DoesExpireAfterFirstUse(This,pfExpireAfterFirstUse)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IESFileExpiryDateEvent_QueryInterface(IESFileExpiryDateEvent* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IESFileExpiryDateEvent_AddRef(IESFileExpiryDateEvent* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IESFileExpiryDateEvent_Release(IESFileExpiryDateEvent* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IESEvent methods ***/
+static FORCEINLINE HRESULT IESFileExpiryDateEvent_GetEventId(IESFileExpiryDateEvent* This,DWORD *pdwEventId) {
+    return This->lpVtbl->GetEventId(This,pdwEventId);
+}
+static FORCEINLINE HRESULT IESFileExpiryDateEvent_GetEventType(IESFileExpiryDateEvent* This,GUID *pguidEventType) {
+    return This->lpVtbl->GetEventType(This,pguidEventType);
+}
+static FORCEINLINE HRESULT IESFileExpiryDateEvent_SetCompletionStatus(IESFileExpiryDateEvent* This,DWORD dwResult) {
+    return This->lpVtbl->SetCompletionStatus(This,dwResult);
+}
+static FORCEINLINE HRESULT IESFileExpiryDateEvent_GetData(IESFileExpiryDateEvent* This,SAFEARRAY **pbData) {
+    return This->lpVtbl->GetData(This,pbData);
+}
+static FORCEINLINE HRESULT IESFileExpiryDateEvent_GetStringData(IESFileExpiryDateEvent* This,BSTR *pbstrData) {
+    return This->lpVtbl->GetStringData(This,pbstrData);
+}
+/*** IESFileExpiryDateEvent methods ***/
+static FORCEINLINE HRESULT IESFileExpiryDateEvent_GetTunerId(IESFileExpiryDateEvent* This,GUID *pguidTunerId) {
+    return This->lpVtbl->GetTunerId(This,pguidTunerId);
+}
+static FORCEINLINE HRESULT IESFileExpiryDateEvent_GetExpiryDate(IESFileExpiryDateEvent* This,DWORD64 *pqwExpiryDate) {
+    return This->lpVtbl->GetExpiryDate(This,pqwExpiryDate);
+}
+static FORCEINLINE HRESULT IESFileExpiryDateEvent_GetFinalExpiryDate(IESFileExpiryDateEvent* This,DWORD64 *pqwExpiryDate) {
+    return This->lpVtbl->GetFinalExpiryDate(This,pqwExpiryDate);
+}
+static FORCEINLINE HRESULT IESFileExpiryDateEvent_GetMaxRenewalCount(IESFileExpiryDateEvent* This,DWORD *dwMaxRenewalCount) {
+    return This->lpVtbl->GetMaxRenewalCount(This,dwMaxRenewalCount);
+}
+static FORCEINLINE HRESULT IESFileExpiryDateEvent_IsEntitlementTokenPresent(IESFileExpiryDateEvent* This,WINBOOL *pfEntTokenPresent) {
+    return This->lpVtbl->IsEntitlementTokenPresent(This,pfEntTokenPresent);
+}
+static FORCEINLINE HRESULT IESFileExpiryDateEvent_DoesExpireAfterFirstUse(IESFileExpiryDateEvent* This,WINBOOL *pfExpireAfterFirstUse) {
+    return This->lpVtbl->DoesExpireAfterFirstUse(This,pfExpireAfterFirstUse);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IESFileExpiryDateEvent_GetTunerId_Proxy(
+    IESFileExpiryDateEvent* This,
+    GUID *pguidTunerId);
+void __RPC_STUB IESFileExpiryDateEvent_GetTunerId_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESFileExpiryDateEvent_GetExpiryDate_Proxy(
+    IESFileExpiryDateEvent* This,
+    DWORD64 *pqwExpiryDate);
+void __RPC_STUB IESFileExpiryDateEvent_GetExpiryDate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESFileExpiryDateEvent_GetFinalExpiryDate_Proxy(
+    IESFileExpiryDateEvent* This,
+    DWORD64 *pqwExpiryDate);
+void __RPC_STUB IESFileExpiryDateEvent_GetFinalExpiryDate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESFileExpiryDateEvent_GetMaxRenewalCount_Proxy(
+    IESFileExpiryDateEvent* This,
+    DWORD *dwMaxRenewalCount);
+void __RPC_STUB IESFileExpiryDateEvent_GetMaxRenewalCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESFileExpiryDateEvent_IsEntitlementTokenPresent_Proxy(
+    IESFileExpiryDateEvent* This,
+    WINBOOL *pfEntTokenPresent);
+void __RPC_STUB IESFileExpiryDateEvent_IsEntitlementTokenPresent_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESFileExpiryDateEvent_DoesExpireAfterFirstUse_Proxy(
+    IESFileExpiryDateEvent* This,
+    WINBOOL *pfExpireAfterFirstUse);
+void __RPC_STUB IESFileExpiryDateEvent_DoesExpireAfterFirstUse_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IESFileExpiryDateEvent_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IESEvents interface
+ */
+#ifndef __IESEvents_INTERFACE_DEFINED__
+#define __IESEvents_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IESEvents, 0xabd414bf, 0xcfe5, 0x4e5e, 0xaf,0x5b, 0x4b,0x4e,0x49,0xc5,0xbf,0xeb);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("abd414bf-cfe5-4e5e-af5b-4b4e49c5bfeb")
+IESEvents : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE OnESEventReceived(
+        GUID guidEventType,
+        IESEvent *pESEvent) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IESEvents, 0xabd414bf, 0xcfe5, 0x4e5e, 0xaf,0x5b, 0x4b,0x4e,0x49,0xc5,0xbf,0xeb)
+#endif
+#else
+typedef struct IESEventsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IESEvents* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IESEvents* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IESEvents* This);
+
+    /*** IESEvents methods ***/
+    HRESULT (STDMETHODCALLTYPE *OnESEventReceived)(
+        IESEvents* This,
+        GUID guidEventType,
+        IESEvent *pESEvent);
+
+    END_INTERFACE
+} IESEventsVtbl;
+interface IESEvents {
+    CONST_VTBL IESEventsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IESEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IESEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IESEvents_Release(This) (This)->lpVtbl->Release(This)
+/*** IESEvents methods ***/
+#define IESEvents_OnESEventReceived(This,guidEventType,pESEvent) (This)->lpVtbl->OnESEventReceived(This,guidEventType,pESEvent)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IESEvents_QueryInterface(IESEvents* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IESEvents_AddRef(IESEvents* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IESEvents_Release(IESEvents* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IESEvents methods ***/
+static FORCEINLINE HRESULT IESEvents_OnESEventReceived(IESEvents* This,GUID guidEventType,IESEvent *pESEvent) {
+    return This->lpVtbl->OnESEventReceived(This,guidEventType,pESEvent);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IESEvents_OnESEventReceived_Proxy(
+    IESEvents* This,
+    GUID guidEventType,
+    IESEvent *pESEvent);
+void __RPC_STUB IESEvents_OnESEventReceived_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IESEvents_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IESEventService interface
+ */
+#ifndef __IESEventService_INTERFACE_DEFINED__
+#define __IESEventService_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IESEventService, 0xed89a619, 0x4c06, 0x4b2f, 0x99,0xeb, 0xc7,0x66,0x9b,0x13,0x04,0x7c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("ed89a619-4c06-4b2f-99eb-c7669b13047c")
+IESEventService : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE FireESEvent(
+        IESEvent *pESEvent) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IESEventService, 0xed89a619, 0x4c06, 0x4b2f, 0x99,0xeb, 0xc7,0x66,0x9b,0x13,0x04,0x7c)
+#endif
+#else
+typedef struct IESEventServiceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IESEventService* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IESEventService* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IESEventService* This);
+
+    /*** IESEventService methods ***/
+    HRESULT (STDMETHODCALLTYPE *FireESEvent)(
+        IESEventService* This,
+        IESEvent *pESEvent);
+
+    END_INTERFACE
+} IESEventServiceVtbl;
+interface IESEventService {
+    CONST_VTBL IESEventServiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IESEventService_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IESEventService_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IESEventService_Release(This) (This)->lpVtbl->Release(This)
+/*** IESEventService methods ***/
+#define IESEventService_FireESEvent(This,pESEvent) (This)->lpVtbl->FireESEvent(This,pESEvent)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IESEventService_QueryInterface(IESEventService* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IESEventService_AddRef(IESEventService* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IESEventService_Release(IESEventService* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IESEventService methods ***/
+static FORCEINLINE HRESULT IESEventService_FireESEvent(IESEventService* This,IESEvent *pESEvent) {
+    return This->lpVtbl->FireESEvent(This,pESEvent);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IESEventService_FireESEvent_Proxy(
+    IESEventService* This,
+    IESEvent *pESEvent);
+void __RPC_STUB IESEventService_FireESEvent_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IESEventService_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IESEventServiceConfiguration interface
+ */
+#ifndef __IESEventServiceConfiguration_INTERFACE_DEFINED__
+#define __IESEventServiceConfiguration_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IESEventServiceConfiguration, 0x33b9daae, 0x9309, 0x491d, 0xa0,0x51, 0xbc,0xad,0x2a,0x70,0xcd,0x66);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("33b9daae-9309-491d-a051-bcad2a70cd66")
+IESEventServiceConfiguration : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE SetParent(
+        IESEventService *pEventService) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveParent(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetOwner(
+        IESEvents *pESEvents) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveOwner(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetGraph(
+        IFilterGraph *pGraph) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveGraph(
+        IFilterGraph *pGraph) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IESEventServiceConfiguration, 0x33b9daae, 0x9309, 0x491d, 0xa0,0x51, 0xbc,0xad,0x2a,0x70,0xcd,0x66)
+#endif
+#else
+typedef struct IESEventServiceConfigurationVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IESEventServiceConfiguration* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IESEventServiceConfiguration* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IESEventServiceConfiguration* This);
+
+    /*** IESEventServiceConfiguration methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetParent)(
+        IESEventServiceConfiguration* This,
+        IESEventService *pEventService);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveParent)(
+        IESEventServiceConfiguration* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetOwner)(
+        IESEventServiceConfiguration* This,
+        IESEvents *pESEvents);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveOwner)(
+        IESEventServiceConfiguration* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetGraph)(
+        IESEventServiceConfiguration* This,
+        IFilterGraph *pGraph);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveGraph)(
+        IESEventServiceConfiguration* This,
+        IFilterGraph *pGraph);
+
+    END_INTERFACE
+} IESEventServiceConfigurationVtbl;
+interface IESEventServiceConfiguration {
+    CONST_VTBL IESEventServiceConfigurationVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IESEventServiceConfiguration_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IESEventServiceConfiguration_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IESEventServiceConfiguration_Release(This) (This)->lpVtbl->Release(This)
+/*** IESEventServiceConfiguration methods ***/
+#define IESEventServiceConfiguration_SetParent(This,pEventService) (This)->lpVtbl->SetParent(This,pEventService)
+#define IESEventServiceConfiguration_RemoveParent(This) (This)->lpVtbl->RemoveParent(This)
+#define IESEventServiceConfiguration_SetOwner(This,pESEvents) (This)->lpVtbl->SetOwner(This,pESEvents)
+#define IESEventServiceConfiguration_RemoveOwner(This) (This)->lpVtbl->RemoveOwner(This)
+#define IESEventServiceConfiguration_SetGraph(This,pGraph) (This)->lpVtbl->SetGraph(This,pGraph)
+#define IESEventServiceConfiguration_RemoveGraph(This,pGraph) (This)->lpVtbl->RemoveGraph(This,pGraph)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IESEventServiceConfiguration_QueryInterface(IESEventServiceConfiguration* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IESEventServiceConfiguration_AddRef(IESEventServiceConfiguration* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IESEventServiceConfiguration_Release(IESEventServiceConfiguration* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IESEventServiceConfiguration methods ***/
+static FORCEINLINE HRESULT IESEventServiceConfiguration_SetParent(IESEventServiceConfiguration* This,IESEventService *pEventService) {
+    return This->lpVtbl->SetParent(This,pEventService);
+}
+static FORCEINLINE HRESULT IESEventServiceConfiguration_RemoveParent(IESEventServiceConfiguration* This) {
+    return This->lpVtbl->RemoveParent(This);
+}
+static FORCEINLINE HRESULT IESEventServiceConfiguration_SetOwner(IESEventServiceConfiguration* This,IESEvents *pESEvents) {
+    return This->lpVtbl->SetOwner(This,pESEvents);
+}
+static FORCEINLINE HRESULT IESEventServiceConfiguration_RemoveOwner(IESEventServiceConfiguration* This) {
+    return This->lpVtbl->RemoveOwner(This);
+}
+static FORCEINLINE HRESULT IESEventServiceConfiguration_SetGraph(IESEventServiceConfiguration* This,IFilterGraph *pGraph) {
+    return This->lpVtbl->SetGraph(This,pGraph);
+}
+static FORCEINLINE HRESULT IESEventServiceConfiguration_RemoveGraph(IESEventServiceConfiguration* This,IFilterGraph *pGraph) {
+    return This->lpVtbl->RemoveGraph(This,pGraph);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IESEventServiceConfiguration_SetParent_Proxy(
+    IESEventServiceConfiguration* This,
+    IESEventService *pEventService);
+void __RPC_STUB IESEventServiceConfiguration_SetParent_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESEventServiceConfiguration_RemoveParent_Proxy(
+    IESEventServiceConfiguration* This);
+void __RPC_STUB IESEventServiceConfiguration_RemoveParent_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESEventServiceConfiguration_SetOwner_Proxy(
+    IESEventServiceConfiguration* This,
+    IESEvents *pESEvents);
+void __RPC_STUB IESEventServiceConfiguration_SetOwner_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESEventServiceConfiguration_RemoveOwner_Proxy(
+    IESEventServiceConfiguration* This);
+void __RPC_STUB IESEventServiceConfiguration_RemoveOwner_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESEventServiceConfiguration_SetGraph_Proxy(
+    IESEventServiceConfiguration* This,
+    IFilterGraph *pGraph);
+void __RPC_STUB IESEventServiceConfiguration_SetGraph_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IESEventServiceConfiguration_RemoveGraph_Proxy(
+    IESEventServiceConfiguration* This,
+    IFilterGraph *pGraph);
+void __RPC_STUB IESEventServiceConfiguration_RemoveGraph_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IESEventServiceConfiguration_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBroadcastEvent interface
+ */
+#ifndef __IBroadcastEvent_INTERFACE_DEFINED__
+#define __IBroadcastEvent_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBroadcastEvent, 0x3b21263f, 0x26e8, 0x489d, 0xaa,0xc4, 0x92,0x4f,0x7e,0xfd,0x95,0x11);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("3b21263f-26e8-489d-aac4-924f7efd9511")
+IBroadcastEvent : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Fire(
+        GUID EventID) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBroadcastEvent, 0x3b21263f, 0x26e8, 0x489d, 0xaa,0xc4, 0x92,0x4f,0x7e,0xfd,0x95,0x11)
+#endif
+#else
+typedef struct IBroadcastEventVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBroadcastEvent* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBroadcastEvent* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBroadcastEvent* This);
+
+    /*** IBroadcastEvent methods ***/
+    HRESULT (STDMETHODCALLTYPE *Fire)(
+        IBroadcastEvent* This,
+        GUID EventID);
+
+    END_INTERFACE
+} IBroadcastEventVtbl;
+interface IBroadcastEvent {
+    CONST_VTBL IBroadcastEventVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBroadcastEvent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBroadcastEvent_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBroadcastEvent_Release(This) (This)->lpVtbl->Release(This)
+/*** IBroadcastEvent methods ***/
+#define IBroadcastEvent_Fire(This,EventID) (This)->lpVtbl->Fire(This,EventID)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBroadcastEvent_QueryInterface(IBroadcastEvent* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBroadcastEvent_AddRef(IBroadcastEvent* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBroadcastEvent_Release(IBroadcastEvent* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBroadcastEvent methods ***/
+static FORCEINLINE HRESULT IBroadcastEvent_Fire(IBroadcastEvent* This,GUID EventID) {
+    return This->lpVtbl->Fire(This,EventID);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBroadcastEvent_Fire_Proxy(
+    IBroadcastEvent* This,
+    GUID EventID);
+void __RPC_STUB IBroadcastEvent_Fire_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBroadcastEvent_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBroadcastEventEx interface
+ */
+#ifndef __IBroadcastEventEx_INTERFACE_DEFINED__
+#define __IBroadcastEventEx_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBroadcastEventEx, 0x3d9e3887, 0x1929, 0x423f, 0x80,0x21, 0x43,0x68,0x2d,0xe9,0x54,0x48);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("3d9e3887-1929-423f-8021-43682de95448")
+IBroadcastEventEx : public IBroadcastEvent
+{
+    virtual HRESULT STDMETHODCALLTYPE FireEx(
+        GUID EventID,
+        ULONG Param1,
+        ULONG Param2,
+        ULONG Param3,
+        ULONG Param4) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBroadcastEventEx, 0x3d9e3887, 0x1929, 0x423f, 0x80,0x21, 0x43,0x68,0x2d,0xe9,0x54,0x48)
+#endif
+#else
+typedef struct IBroadcastEventExVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBroadcastEventEx* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBroadcastEventEx* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBroadcastEventEx* This);
+
+    /*** IBroadcastEvent methods ***/
+    HRESULT (STDMETHODCALLTYPE *Fire)(
+        IBroadcastEventEx* This,
+        GUID EventID);
+
+    /*** IBroadcastEventEx methods ***/
+    HRESULT (STDMETHODCALLTYPE *FireEx)(
+        IBroadcastEventEx* This,
+        GUID EventID,
+        ULONG Param1,
+        ULONG Param2,
+        ULONG Param3,
+        ULONG Param4);
+
+    END_INTERFACE
+} IBroadcastEventExVtbl;
+interface IBroadcastEventEx {
+    CONST_VTBL IBroadcastEventExVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBroadcastEventEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBroadcastEventEx_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBroadcastEventEx_Release(This) (This)->lpVtbl->Release(This)
+/*** IBroadcastEvent methods ***/
+#define IBroadcastEventEx_Fire(This,EventID) (This)->lpVtbl->Fire(This,EventID)
+/*** IBroadcastEventEx methods ***/
+#define IBroadcastEventEx_FireEx(This,EventID,Param1,Param2,Param3,Param4) (This)->lpVtbl->FireEx(This,EventID,Param1,Param2,Param3,Param4)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBroadcastEventEx_QueryInterface(IBroadcastEventEx* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBroadcastEventEx_AddRef(IBroadcastEventEx* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBroadcastEventEx_Release(IBroadcastEventEx* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBroadcastEvent methods ***/
+static FORCEINLINE HRESULT IBroadcastEventEx_Fire(IBroadcastEventEx* This,GUID EventID) {
+    return This->lpVtbl->Fire(This,EventID);
+}
+/*** IBroadcastEventEx methods ***/
+static FORCEINLINE HRESULT IBroadcastEventEx_FireEx(IBroadcastEventEx* This,GUID EventID,ULONG Param1,ULONG Param2,ULONG Param3,ULONG Param4) {
+    return This->lpVtbl->FireEx(This,EventID,Param1,Param2,Param3,Param4);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBroadcastEventEx_FireEx_Proxy(
+    IBroadcastEventEx* This,
+    GUID EventID,
+    ULONG Param1,
+    ULONG Param2,
+    ULONG Param3,
+    ULONG Param4);
+void __RPC_STUB IBroadcastEventEx_FireEx_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBroadcastEventEx_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IRegisterTuner interface
+ */
+#ifndef __IRegisterTuner_INTERFACE_DEFINED__
+#define __IRegisterTuner_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IRegisterTuner, 0x359b3901, 0x572c, 0x4854, 0xbb,0x49, 0xcd,0xef,0x66,0x60,0x6a,0x25);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("359b3901-572c-4854-bb49-cdef66606a25")
+IRegisterTuner : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Register(
+        ITuner *pTuner,
+        IGraphBuilder *pGraph) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Unregister(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IRegisterTuner, 0x359b3901, 0x572c, 0x4854, 0xbb,0x49, 0xcd,0xef,0x66,0x60,0x6a,0x25)
+#endif
+#else
+typedef struct IRegisterTunerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IRegisterTuner* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IRegisterTuner* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IRegisterTuner* This);
+
+    /*** IRegisterTuner methods ***/
+    HRESULT (STDMETHODCALLTYPE *Register)(
+        IRegisterTuner* This,
+        ITuner *pTuner,
+        IGraphBuilder *pGraph);
+
+    HRESULT (STDMETHODCALLTYPE *Unregister)(
+        IRegisterTuner* This);
+
+    END_INTERFACE
+} IRegisterTunerVtbl;
+interface IRegisterTuner {
+    CONST_VTBL IRegisterTunerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IRegisterTuner_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IRegisterTuner_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRegisterTuner_Release(This) (This)->lpVtbl->Release(This)
+/*** IRegisterTuner methods ***/
+#define IRegisterTuner_Register(This,pTuner,pGraph) (This)->lpVtbl->Register(This,pTuner,pGraph)
+#define IRegisterTuner_Unregister(This) (This)->lpVtbl->Unregister(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IRegisterTuner_QueryInterface(IRegisterTuner* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IRegisterTuner_AddRef(IRegisterTuner* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IRegisterTuner_Release(IRegisterTuner* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IRegisterTuner methods ***/
+static FORCEINLINE HRESULT IRegisterTuner_Register(IRegisterTuner* This,ITuner *pTuner,IGraphBuilder *pGraph) {
+    return This->lpVtbl->Register(This,pTuner,pGraph);
+}
+static FORCEINLINE HRESULT IRegisterTuner_Unregister(IRegisterTuner* This) {
+    return This->lpVtbl->Unregister(This);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IRegisterTuner_Register_Proxy(
+    IRegisterTuner* This,
+    ITuner *pTuner,
+    IGraphBuilder *pGraph);
+void __RPC_STUB IRegisterTuner_Register_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRegisterTuner_Unregister_Proxy(
+    IRegisterTuner* This);
+void __RPC_STUB IRegisterTuner_Unregister_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IRegisterTuner_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDAComparable interface
+ */
+#ifndef __IBDAComparable_INTERFACE_DEFINED__
+#define __IBDAComparable_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDAComparable, 0xb34505e0, 0x2f0e, 0x497b, 0x80,0xbc, 0xd4,0x3f,0x3b,0x24,0xed,0x7f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("b34505e0-2f0e-497b-80bc-d43f3b24ed7f")
+IBDAComparable : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE CompareExact(
+        IDispatch *CompareTo,
+        LONG *Result) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CompareEquivalent(
+        IDispatch *CompareTo,
+        DWORD dwFlags,
+        LONG *Result) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE HashExact(
+        INT64 *Result) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE HashExactIncremental(
+        INT64 PartialResult,
+        INT64 *Result) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE HashEquivalent(
+        DWORD dwFlags,
+        INT64 *Result) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE HashEquivalentIncremental(
+        INT64 PartialResult,
+        DWORD dwFlags,
+        INT64 *Result) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDAComparable, 0xb34505e0, 0x2f0e, 0x497b, 0x80,0xbc, 0xd4,0x3f,0x3b,0x24,0xed,0x7f)
+#endif
+#else
+typedef struct IBDAComparableVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDAComparable* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDAComparable* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDAComparable* This);
+
+    /*** IBDAComparable methods ***/
+    HRESULT (STDMETHODCALLTYPE *CompareExact)(
+        IBDAComparable* This,
+        IDispatch *CompareTo,
+        LONG *Result);
+
+    HRESULT (STDMETHODCALLTYPE *CompareEquivalent)(
+        IBDAComparable* This,
+        IDispatch *CompareTo,
+        DWORD dwFlags,
+        LONG *Result);
+
+    HRESULT (STDMETHODCALLTYPE *HashExact)(
+        IBDAComparable* This,
+        INT64 *Result);
+
+    HRESULT (STDMETHODCALLTYPE *HashExactIncremental)(
+        IBDAComparable* This,
+        INT64 PartialResult,
+        INT64 *Result);
+
+    HRESULT (STDMETHODCALLTYPE *HashEquivalent)(
+        IBDAComparable* This,
+        DWORD dwFlags,
+        INT64 *Result);
+
+    HRESULT (STDMETHODCALLTYPE *HashEquivalentIncremental)(
+        IBDAComparable* This,
+        INT64 PartialResult,
+        DWORD dwFlags,
+        INT64 *Result);
+
+    END_INTERFACE
+} IBDAComparableVtbl;
+interface IBDAComparable {
+    CONST_VTBL IBDAComparableVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDAComparable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDAComparable_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDAComparable_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDAComparable methods ***/
+#define IBDAComparable_CompareExact(This,CompareTo,Result) (This)->lpVtbl->CompareExact(This,CompareTo,Result)
+#define IBDAComparable_CompareEquivalent(This,CompareTo,dwFlags,Result) (This)->lpVtbl->CompareEquivalent(This,CompareTo,dwFlags,Result)
+#define IBDAComparable_HashExact(This,Result) (This)->lpVtbl->HashExact(This,Result)
+#define IBDAComparable_HashExactIncremental(This,PartialResult,Result) (This)->lpVtbl->HashExactIncremental(This,PartialResult,Result)
+#define IBDAComparable_HashEquivalent(This,dwFlags,Result) (This)->lpVtbl->HashEquivalent(This,dwFlags,Result)
+#define IBDAComparable_HashEquivalentIncremental(This,PartialResult,dwFlags,Result) (This)->lpVtbl->HashEquivalentIncremental(This,PartialResult,dwFlags,Result)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDAComparable_QueryInterface(IBDAComparable* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDAComparable_AddRef(IBDAComparable* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDAComparable_Release(IBDAComparable* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDAComparable methods ***/
+static FORCEINLINE HRESULT IBDAComparable_CompareExact(IBDAComparable* This,IDispatch *CompareTo,LONG *Result) {
+    return This->lpVtbl->CompareExact(This,CompareTo,Result);
+}
+static FORCEINLINE HRESULT IBDAComparable_CompareEquivalent(IBDAComparable* This,IDispatch *CompareTo,DWORD dwFlags,LONG *Result) {
+    return This->lpVtbl->CompareEquivalent(This,CompareTo,dwFlags,Result);
+}
+static FORCEINLINE HRESULT IBDAComparable_HashExact(IBDAComparable* This,INT64 *Result) {
+    return This->lpVtbl->HashExact(This,Result);
+}
+static FORCEINLINE HRESULT IBDAComparable_HashExactIncremental(IBDAComparable* This,INT64 PartialResult,INT64 *Result) {
+    return This->lpVtbl->HashExactIncremental(This,PartialResult,Result);
+}
+static FORCEINLINE HRESULT IBDAComparable_HashEquivalent(IBDAComparable* This,DWORD dwFlags,INT64 *Result) {
+    return This->lpVtbl->HashEquivalent(This,dwFlags,Result);
+}
+static FORCEINLINE HRESULT IBDAComparable_HashEquivalentIncremental(IBDAComparable* This,INT64 PartialResult,DWORD dwFlags,INT64 *Result) {
+    return This->lpVtbl->HashEquivalentIncremental(This,PartialResult,dwFlags,Result);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDAComparable_CompareExact_Proxy(
+    IBDAComparable* This,
+    IDispatch *CompareTo,
+    LONG *Result);
+void __RPC_STUB IBDAComparable_CompareExact_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDAComparable_CompareEquivalent_Proxy(
+    IBDAComparable* This,
+    IDispatch *CompareTo,
+    DWORD dwFlags,
+    LONG *Result);
+void __RPC_STUB IBDAComparable_CompareEquivalent_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDAComparable_HashExact_Proxy(
+    IBDAComparable* This,
+    INT64 *Result);
+void __RPC_STUB IBDAComparable_HashExact_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDAComparable_HashExactIncremental_Proxy(
+    IBDAComparable* This,
+    INT64 PartialResult,
+    INT64 *Result);
+void __RPC_STUB IBDAComparable_HashExactIncremental_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDAComparable_HashEquivalent_Proxy(
+    IBDAComparable* This,
+    DWORD dwFlags,
+    INT64 *Result);
+void __RPC_STUB IBDAComparable_HashEquivalent_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBDAComparable_HashEquivalentIncremental_Proxy(
+    IBDAComparable* This,
+    INT64 PartialResult,
+    DWORD dwFlags,
+    INT64 *Result);
+void __RPC_STUB IBDAComparable_HashEquivalentIncremental_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDAComparable_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IPersistTuneXml interface
+ */
+#ifndef __IPersistTuneXml_INTERFACE_DEFINED__
+#define __IPersistTuneXml_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IPersistTuneXml, 0x0754cd31, 0x8d15, 0x47a9, 0x82,0x15, 0xd2,0x00,0x64,0x15,0x72,0x44);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("0754cd31-8d15-47a9-8215-d20064157244")
+IPersistTuneXml : public IPersist
+{
+    virtual HRESULT STDMETHODCALLTYPE InitNew(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Load(
+        VARIANT varValue) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Save(
+        VARIANT *pvarFragment) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IPersistTuneXml, 0x0754cd31, 0x8d15, 0x47a9, 0x82,0x15, 0xd2,0x00,0x64,0x15,0x72,0x44)
+#endif
+#else
+typedef struct IPersistTuneXmlVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IPersistTuneXml* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IPersistTuneXml* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IPersistTuneXml* This);
+
+    /*** IPersist methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetClassID)(
+        IPersistTuneXml* This,
+        CLSID *pClassID);
+
+    /*** IPersistTuneXml methods ***/
+    HRESULT (STDMETHODCALLTYPE *InitNew)(
+        IPersistTuneXml* This);
+
+    HRESULT (STDMETHODCALLTYPE *Load)(
+        IPersistTuneXml* This,
+        VARIANT varValue);
+
+    HRESULT (STDMETHODCALLTYPE *Save)(
+        IPersistTuneXml* This,
+        VARIANT *pvarFragment);
+
+    END_INTERFACE
+} IPersistTuneXmlVtbl;
+interface IPersistTuneXml {
+    CONST_VTBL IPersistTuneXmlVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IPersistTuneXml_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IPersistTuneXml_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPersistTuneXml_Release(This) (This)->lpVtbl->Release(This)
+/*** IPersist methods ***/
+#define IPersistTuneXml_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
+/*** IPersistTuneXml methods ***/
+#define IPersistTuneXml_InitNew(This) (This)->lpVtbl->InitNew(This)
+#define IPersistTuneXml_Load(This,varValue) (This)->lpVtbl->Load(This,varValue)
+#define IPersistTuneXml_Save(This,pvarFragment) (This)->lpVtbl->Save(This,pvarFragment)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IPersistTuneXml_QueryInterface(IPersistTuneXml* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IPersistTuneXml_AddRef(IPersistTuneXml* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IPersistTuneXml_Release(IPersistTuneXml* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IPersist methods ***/
+static FORCEINLINE HRESULT IPersistTuneXml_GetClassID(IPersistTuneXml* This,CLSID *pClassID) {
+    return This->lpVtbl->GetClassID(This,pClassID);
+}
+/*** IPersistTuneXml methods ***/
+static FORCEINLINE HRESULT IPersistTuneXml_InitNew(IPersistTuneXml* This) {
+    return This->lpVtbl->InitNew(This);
+}
+static FORCEINLINE HRESULT IPersistTuneXml_Load(IPersistTuneXml* This,VARIANT varValue) {
+    return This->lpVtbl->Load(This,varValue);
+}
+static FORCEINLINE HRESULT IPersistTuneXml_Save(IPersistTuneXml* This,VARIANT *pvarFragment) {
+    return This->lpVtbl->Save(This,pvarFragment);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IPersistTuneXml_InitNew_Proxy(
+    IPersistTuneXml* This);
+void __RPC_STUB IPersistTuneXml_InitNew_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistTuneXml_Load_Proxy(
+    IPersistTuneXml* This,
+    VARIANT varValue);
+void __RPC_STUB IPersistTuneXml_Load_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistTuneXml_Save_Proxy(
+    IPersistTuneXml* This,
+    VARIANT *pvarFragment);
+void __RPC_STUB IPersistTuneXml_Save_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IPersistTuneXml_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IPersistTuneXmlUtility interface
+ */
+#ifndef __IPersistTuneXmlUtility_INTERFACE_DEFINED__
+#define __IPersistTuneXmlUtility_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IPersistTuneXmlUtility, 0x990237ae, 0xac11, 0x4614, 0xbe,0x8f, 0xdd,0x21,0x7a,0x4c,0xb4,0xcb);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("990237ae-ac11-4614-be8f-dd217a4cb4cb")
+IPersistTuneXmlUtility : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Deserialize(
+        VARIANT varValue,
+        IUnknown **ppObject) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IPersistTuneXmlUtility, 0x990237ae, 0xac11, 0x4614, 0xbe,0x8f, 0xdd,0x21,0x7a,0x4c,0xb4,0xcb)
+#endif
+#else
+typedef struct IPersistTuneXmlUtilityVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IPersistTuneXmlUtility* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IPersistTuneXmlUtility* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IPersistTuneXmlUtility* This);
+
+    /*** IPersistTuneXmlUtility methods ***/
+    HRESULT (STDMETHODCALLTYPE *Deserialize)(
+        IPersistTuneXmlUtility* This,
+        VARIANT varValue,
+        IUnknown **ppObject);
+
+    END_INTERFACE
+} IPersistTuneXmlUtilityVtbl;
+interface IPersistTuneXmlUtility {
+    CONST_VTBL IPersistTuneXmlUtilityVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IPersistTuneXmlUtility_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IPersistTuneXmlUtility_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPersistTuneXmlUtility_Release(This) (This)->lpVtbl->Release(This)
+/*** IPersistTuneXmlUtility methods ***/
+#define IPersistTuneXmlUtility_Deserialize(This,varValue,ppObject) (This)->lpVtbl->Deserialize(This,varValue,ppObject)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IPersistTuneXmlUtility_QueryInterface(IPersistTuneXmlUtility* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IPersistTuneXmlUtility_AddRef(IPersistTuneXmlUtility* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IPersistTuneXmlUtility_Release(IPersistTuneXmlUtility* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IPersistTuneXmlUtility methods ***/
+static FORCEINLINE HRESULT IPersistTuneXmlUtility_Deserialize(IPersistTuneXmlUtility* This,VARIANT varValue,IUnknown **ppObject) {
+    return This->lpVtbl->Deserialize(This,varValue,ppObject);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IPersistTuneXmlUtility_Deserialize_Proxy(
+    IPersistTuneXmlUtility* This,
+    VARIANT varValue,
+    IUnknown **ppObject);
+void __RPC_STUB IPersistTuneXmlUtility_Deserialize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IPersistTuneXmlUtility_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IPersistTuneXmlUtility2 interface
+ */
+#ifndef __IPersistTuneXmlUtility2_INTERFACE_DEFINED__
+#define __IPersistTuneXmlUtility2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IPersistTuneXmlUtility2, 0x992e165f, 0xea24, 0x4b2f, 0x9a,0x1d, 0x00,0x9d,0x92,0x12,0x04,0x51);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("992e165f-ea24-4b2f-9a1d-009d92120451")
+IPersistTuneXmlUtility2 : public IPersistTuneXmlUtility
+{
+    virtual HRESULT STDMETHODCALLTYPE Serialize(
+        ITuneRequest *piTuneRequest,
+        BSTR *pString) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IPersistTuneXmlUtility2, 0x992e165f, 0xea24, 0x4b2f, 0x9a,0x1d, 0x00,0x9d,0x92,0x12,0x04,0x51)
+#endif
+#else
+typedef struct IPersistTuneXmlUtility2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IPersistTuneXmlUtility2* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IPersistTuneXmlUtility2* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IPersistTuneXmlUtility2* This);
+
+    /*** IPersistTuneXmlUtility methods ***/
+    HRESULT (STDMETHODCALLTYPE *Deserialize)(
+        IPersistTuneXmlUtility2* This,
+        VARIANT varValue,
+        IUnknown **ppObject);
+
+    /*** IPersistTuneXmlUtility2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *Serialize)(
+        IPersistTuneXmlUtility2* This,
+        ITuneRequest *piTuneRequest,
+        BSTR *pString);
+
+    END_INTERFACE
+} IPersistTuneXmlUtility2Vtbl;
+interface IPersistTuneXmlUtility2 {
+    CONST_VTBL IPersistTuneXmlUtility2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IPersistTuneXmlUtility2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IPersistTuneXmlUtility2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPersistTuneXmlUtility2_Release(This) (This)->lpVtbl->Release(This)
+/*** IPersistTuneXmlUtility methods ***/
+#define IPersistTuneXmlUtility2_Deserialize(This,varValue,ppObject) (This)->lpVtbl->Deserialize(This,varValue,ppObject)
+/*** IPersistTuneXmlUtility2 methods ***/
+#define IPersistTuneXmlUtility2_Serialize(This,piTuneRequest,pString) (This)->lpVtbl->Serialize(This,piTuneRequest,pString)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IPersistTuneXmlUtility2_QueryInterface(IPersistTuneXmlUtility2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IPersistTuneXmlUtility2_AddRef(IPersistTuneXmlUtility2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IPersistTuneXmlUtility2_Release(IPersistTuneXmlUtility2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IPersistTuneXmlUtility methods ***/
+static FORCEINLINE HRESULT IPersistTuneXmlUtility2_Deserialize(IPersistTuneXmlUtility2* This,VARIANT varValue,IUnknown **ppObject) {
+    return This->lpVtbl->Deserialize(This,varValue,ppObject);
+}
+/*** IPersistTuneXmlUtility2 methods ***/
+static FORCEINLINE HRESULT IPersistTuneXmlUtility2_Serialize(IPersistTuneXmlUtility2* This,ITuneRequest *piTuneRequest,BSTR *pString) {
+    return This->lpVtbl->Serialize(This,piTuneRequest,pString);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IPersistTuneXmlUtility2_Serialize_Proxy(
+    IPersistTuneXmlUtility2* This,
+    ITuneRequest *piTuneRequest,
+    BSTR *pString);
+void __RPC_STUB IPersistTuneXmlUtility2_Serialize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IPersistTuneXmlUtility2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBDACreateTuneRequestEx interface
+ */
+#ifndef __IBDACreateTuneRequestEx_INTERFACE_DEFINED__
+#define __IBDACreateTuneRequestEx_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBDACreateTuneRequestEx, 0xc0a4a1d4, 0x2b3c, 0x491a, 0xba,0x22, 0x49,0x9f,0xba,0xdd,0x4d,0x12);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("c0a4a1d4-2b3c-491a-ba22-499fbadd4d12")
+IBDACreateTuneRequestEx : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateTuneRequestEx(
+        REFCLSID TuneRequestIID,
+        ITuneRequest **TuneRequest) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IBDACreateTuneRequestEx, 0xc0a4a1d4, 0x2b3c, 0x491a, 0xba,0x22, 0x49,0x9f,0xba,0xdd,0x4d,0x12)
+#endif
+#else
+typedef struct IBDACreateTuneRequestExVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBDACreateTuneRequestEx* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBDACreateTuneRequestEx* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBDACreateTuneRequestEx* This);
+
+    /*** IBDACreateTuneRequestEx methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateTuneRequestEx)(
+        IBDACreateTuneRequestEx* This,
+        REFCLSID TuneRequestIID,
+        ITuneRequest **TuneRequest);
+
+    END_INTERFACE
+} IBDACreateTuneRequestExVtbl;
+interface IBDACreateTuneRequestEx {
+    CONST_VTBL IBDACreateTuneRequestExVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IBDACreateTuneRequestEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBDACreateTuneRequestEx_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBDACreateTuneRequestEx_Release(This) (This)->lpVtbl->Release(This)
+/*** IBDACreateTuneRequestEx methods ***/
+#define IBDACreateTuneRequestEx_CreateTuneRequestEx(This,TuneRequestIID,TuneRequest) (This)->lpVtbl->CreateTuneRequestEx(This,TuneRequestIID,TuneRequest)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IBDACreateTuneRequestEx_QueryInterface(IBDACreateTuneRequestEx* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IBDACreateTuneRequestEx_AddRef(IBDACreateTuneRequestEx* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IBDACreateTuneRequestEx_Release(IBDACreateTuneRequestEx* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IBDACreateTuneRequestEx methods ***/
+static FORCEINLINE HRESULT IBDACreateTuneRequestEx_CreateTuneRequestEx(IBDACreateTuneRequestEx* This,REFCLSID TuneRequestIID,ITuneRequest **TuneRequest) {
+    return This->lpVtbl->CreateTuneRequestEx(This,TuneRequestIID,TuneRequest);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBDACreateTuneRequestEx_CreateTuneRequestEx_Proxy(
+    IBDACreateTuneRequestEx* This,
+    REFCLSID TuneRequestIID,
+    ITuneRequest **TuneRequest);
+void __RPC_STUB IBDACreateTuneRequestEx_CreateTuneRequestEx_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBDACreateTuneRequestEx_INTERFACE_DEFINED__ */
+
+
+DEFINE_GUID(LIBID_TunerLib, 0x9b085638, 0x018e, 0x11d3, 0x9d,0x8e, 0x00,0xc0,0x4f,0x72,0xd9,0x80);
+
+/*****************************************************************************
+ * SystemTuningSpaces coclass
+ */
+
+DEFINE_GUID(CLSID_SystemTuningSpaces, 0xd02aac50, 0x027e, 0x11d3, 0x9d,0x8e, 0x00,0xc0,0x4f,0x72,0xd9,0x80);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("d02aac50-027e-11d3-9d8e-00c04f72d980") SystemTuningSpaces;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(SystemTuningSpaces, 0xd02aac50, 0x027e, 0x11d3, 0x9d,0x8e, 0x00,0xc0,0x4f,0x72,0xd9,0x80)
+#endif
+#endif
+
+/*****************************************************************************
+ * TuningSpace coclass
+ */
+
+DEFINE_GUID(CLSID_TuningSpace, 0x5ffdc5e6, 0xb83a, 0x4b55, 0xb6,0xe8, 0xc6,0x9e,0x76,0x5f,0xe9,0xdb);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("5ffdc5e6-b83a-4b55-b6e8-c69e765fe9db") TuningSpace;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(TuningSpace, 0x5ffdc5e6, 0xb83a, 0x4b55, 0xb6,0xe8, 0xc6,0x9e,0x76,0x5f,0xe9,0xdb)
+#endif
+#endif
+
+/*****************************************************************************
+ * ChannelIDTuningSpace coclass
+ */
+
+DEFINE_GUID(CLSID_ChannelIDTuningSpace, 0xcc829a2f, 0x3365, 0x463f, 0xaf,0x13, 0x81,0xdb,0xb6,0xf3,0xa5,0x55);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("cc829a2f-3365-463f-af13-81dbb6f3a555") ChannelIDTuningSpace;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ChannelIDTuningSpace, 0xcc829a2f, 0x3365, 0x463f, 0xaf,0x13, 0x81,0xdb,0xb6,0xf3,0xa5,0x55)
+#endif
+#endif
+
+/*****************************************************************************
+ * ATSCTuningSpace coclass
+ */
+
+DEFINE_GUID(CLSID_ATSCTuningSpace, 0xa2e30750, 0x6c3d, 0x11d3, 0xb6,0x53, 0x00,0xc0,0x4f,0x79,0x49,0x8e);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("a2e30750-6c3d-11d3-b653-00c04f79498e") ATSCTuningSpace;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ATSCTuningSpace, 0xa2e30750, 0x6c3d, 0x11d3, 0xb6,0x53, 0x00,0xc0,0x4f,0x79,0x49,0x8e)
+#endif
+#endif
+
+/*****************************************************************************
+ * DigitalCableTuningSpace coclass
+ */
+
+DEFINE_GUID(CLSID_DigitalCableTuningSpace, 0xd9bb4cee, 0xb87a, 0x47f1, 0xac,0x92, 0xb0,0x8d,0x9c,0x78,0x13,0xfc);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("d9bb4cee-b87a-47f1-ac92-b08d9c7813fc") DigitalCableTuningSpace;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(DigitalCableTuningSpace, 0xd9bb4cee, 0xb87a, 0x47f1, 0xac,0x92, 0xb0,0x8d,0x9c,0x78,0x13,0xfc)
+#endif
+#endif
+
+/*****************************************************************************
+ * AnalogRadioTuningSpace coclass
+ */
+
+DEFINE_GUID(CLSID_AnalogRadioTuningSpace, 0x8a674b4c, 0x1f63, 0x11d3, 0xb6,0x4c, 0x00,0xc0,0x4f,0x79,0x49,0x8e);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("8a674b4c-1f63-11d3-b64c-00c04f79498e") AnalogRadioTuningSpace;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(AnalogRadioTuningSpace, 0x8a674b4c, 0x1f63, 0x11d3, 0xb6,0x4c, 0x00,0xc0,0x4f,0x79,0x49,0x8e)
+#endif
+#endif
+
+/*****************************************************************************
+ * AuxInTuningSpace coclass
+ */
+
+DEFINE_GUID(CLSID_AuxInTuningSpace, 0xf9769a06, 0x7aca, 0x4e39, 0x9c,0xfb, 0x97,0xbb,0x35,0xf0,0xe7,0x7e);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("f9769a06-7aca-4e39-9cfb-97bb35f0e77e") AuxInTuningSpace;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(AuxInTuningSpace, 0xf9769a06, 0x7aca, 0x4e39, 0x9c,0xfb, 0x97,0xbb,0x35,0xf0,0xe7,0x7e)
+#endif
+#endif
+
+/*****************************************************************************
+ * AnalogTVTuningSpace coclass
+ */
+
+DEFINE_GUID(CLSID_AnalogTVTuningSpace, 0x8a674b4d, 0x1f63, 0x11d3, 0xb6,0x4c, 0x00,0xc0,0x4f,0x79,0x49,0x8e);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("8a674b4d-1f63-11d3-b64c-00c04f79498e") AnalogTVTuningSpace;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(AnalogTVTuningSpace, 0x8a674b4d, 0x1f63, 0x11d3, 0xb6,0x4c, 0x00,0xc0,0x4f,0x79,0x49,0x8e)
+#endif
+#endif
+
+/*****************************************************************************
+ * DVBTuningSpace coclass
+ */
+
+DEFINE_GUID(CLSID_DVBTuningSpace, 0xc6b14b32, 0x76aa, 0x4a86, 0xa7,0xac, 0x5c,0x79,0xaa,0xf5,0x8d,0xa7);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("c6b14b32-76aa-4a86-a7ac-5c79aaf58da7") DVBTuningSpace;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(DVBTuningSpace, 0xc6b14b32, 0x76aa, 0x4a86, 0xa7,0xac, 0x5c,0x79,0xaa,0xf5,0x8d,0xa7)
+#endif
+#endif
+
+/*****************************************************************************
+ * DVBSTuningSpace coclass
+ */
+
+DEFINE_GUID(CLSID_DVBSTuningSpace, 0xb64016f3, 0xc9a2, 0x4066, 0x96,0xf0, 0xbd,0x95,0x63,0x31,0x47,0x26);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("b64016f3-c9a2-4066-96f0-bd9563314726") DVBSTuningSpace;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(DVBSTuningSpace, 0xb64016f3, 0xc9a2, 0x4066, 0x96,0xf0, 0xbd,0x95,0x63,0x31,0x47,0x26)
+#endif
+#endif
+
+/*****************************************************************************
+ * ComponentTypes coclass
+ */
+
+DEFINE_GUID(CLSID_ComponentTypes, 0xa1a2b1c4, 0x0e3a, 0x11d3, 0x9d,0x8e, 0x00,0xc0,0x4f,0x72,0xd9,0x80);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("a1a2b1c4-0e3a-11d3-9d8e-00c04f72d980") ComponentTypes;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ComponentTypes, 0xa1a2b1c4, 0x0e3a, 0x11d3, 0x9d,0x8e, 0x00,0xc0,0x4f,0x72,0xd9,0x80)
+#endif
+#endif
+
+/*****************************************************************************
+ * ComponentType coclass
+ */
+
+DEFINE_GUID(CLSID_ComponentType, 0x823535a0, 0x0318, 0x11d3, 0x9d,0x8e, 0x00,0xc0,0x4f,0x72,0xd9,0x80);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("823535a0-0318-11d3-9d8e-00c04f72d980") ComponentType;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ComponentType, 0x823535a0, 0x0318, 0x11d3, 0x9d,0x8e, 0x00,0xc0,0x4f,0x72,0xd9,0x80)
+#endif
+#endif
+
+/*****************************************************************************
+ * LanguageComponentType coclass
+ */
+
+DEFINE_GUID(CLSID_LanguageComponentType, 0x1be49f30, 0x0e1b, 0x11d3, 0x9d,0x8e, 0x00,0xc0,0x4f,0x72,0xd9,0x80);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("1be49f30-0e1b-11d3-9d8e-00c04f72d980") LanguageComponentType;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(LanguageComponentType, 0x1be49f30, 0x0e1b, 0x11d3, 0x9d,0x8e, 0x00,0xc0,0x4f,0x72,0xd9,0x80)
+#endif
+#endif
+
+/*****************************************************************************
+ * MPEG2ComponentType coclass
+ */
+
+DEFINE_GUID(CLSID_MPEG2ComponentType, 0x418008f3, 0xcf67, 0x4668, 0x96,0x28, 0x10,0xdc,0x52,0xbe,0x1d,0x08);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("418008f3-cf67-4668-9628-10dc52be1d08") MPEG2ComponentType;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(MPEG2ComponentType, 0x418008f3, 0xcf67, 0x4668, 0x96,0x28, 0x10,0xdc,0x52,0xbe,0x1d,0x08)
+#endif
+#endif
+
+/*****************************************************************************
+ * ATSCComponentType coclass
+ */
+
+DEFINE_GUID(CLSID_ATSCComponentType, 0xa8dcf3d5, 0x0780, 0x4ef4, 0x8a,0x83, 0x2c,0xff,0xaa,0xcb,0x8a,0xce);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("a8dcf3d5-0780-4ef4-8a83-2cffaacb8ace") ATSCComponentType;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ATSCComponentType, 0xa8dcf3d5, 0x0780, 0x4ef4, 0x8a,0x83, 0x2c,0xff,0xaa,0xcb,0x8a,0xce)
+#endif
+#endif
+
+/*****************************************************************************
+ * Components coclass
+ */
+
+DEFINE_GUID(CLSID_Components, 0x809b6661, 0x94c4, 0x49e6, 0xb6,0xec, 0x3f,0x0f,0x86,0x22,0x15,0xaa);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("809b6661-94c4-49e6-b6ec-3f0f862215aa") Components;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(Components, 0x809b6661, 0x94c4, 0x49e6, 0xb6,0xec, 0x3f,0x0f,0x86,0x22,0x15,0xaa)
+#endif
+#endif
+
+/*****************************************************************************
+ * Component coclass
+ */
+
+DEFINE_GUID(CLSID_Component, 0x59dc47a8, 0x116c, 0x11d3, 0x9d,0x8e, 0x00,0xc0,0x4f,0x72,0xd9,0x80);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("59dc47a8-116c-11d3-9d8e-00c04f72d980") Component;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(Component, 0x59dc47a8, 0x116c, 0x11d3, 0x9d,0x8e, 0x00,0xc0,0x4f,0x72,0xd9,0x80)
+#endif
+#endif
+
+/*****************************************************************************
+ * MPEG2Component coclass
+ */
+
+DEFINE_GUID(CLSID_MPEG2Component, 0x055cb2d7, 0x2969, 0x45cd, 0x91,0x4b, 0x76,0x89,0x07,0x22,0xf1,0x12);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("055cb2d7-2969-45cd-914b-76890722f112") MPEG2Component;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(MPEG2Component, 0x055cb2d7, 0x2969, 0x45cd, 0x91,0x4b, 0x76,0x89,0x07,0x22,0xf1,0x12)
+#endif
+#endif
+
+/*****************************************************************************
+ * AnalogAudioComponentType coclass
+ */
+
+DEFINE_GUID(CLSID_AnalogAudioComponentType, 0x28ab0005, 0xe845, 0x4ffa, 0xaa,0x9b, 0xf4,0x66,0x52,0x36,0x14,0x1c);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("28ab0005-e845-4ffa-aa9b-f4665236141c") AnalogAudioComponentType;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(AnalogAudioComponentType, 0x28ab0005, 0xe845, 0x4ffa, 0xaa,0x9b, 0xf4,0x66,0x52,0x36,0x14,0x1c)
+#endif
+#endif
+
+/*****************************************************************************
+ * TuneRequest coclass
+ */
+
+DEFINE_GUID(CLSID_TuneRequest, 0xb46e0d38, 0xab35, 0x4a06, 0xa1,0x37, 0x70,0x57,0x6b,0x01,0xb3,0x9f);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("b46e0d38-ab35-4a06-a137-70576b01b39f") TuneRequest;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(TuneRequest, 0xb46e0d38, 0xab35, 0x4a06, 0xa1,0x37, 0x70,0x57,0x6b,0x01,0xb3,0x9f)
+#endif
+#endif
+
+/*****************************************************************************
+ * ChannelIDTuneRequest coclass
+ */
+
+DEFINE_GUID(CLSID_ChannelIDTuneRequest, 0x3a9428a7, 0x31a4, 0x45e9, 0x9e,0xfb, 0xe0,0x55,0xbf,0x7b,0xb3,0xdb);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("3a9428a7-31a4-45e9-9efb-e055bf7bb3db") ChannelIDTuneRequest;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ChannelIDTuneRequest, 0x3a9428a7, 0x31a4, 0x45e9, 0x9e,0xfb, 0xe0,0x55,0xbf,0x7b,0xb3,0xdb)
+#endif
+#endif
+
+/*****************************************************************************
+ * ChannelTuneRequest coclass
+ */
+
+DEFINE_GUID(CLSID_ChannelTuneRequest, 0x0369b4e5, 0x45b6, 0x11d3, 0xb6,0x50, 0x00,0xc0,0x4f,0x79,0x49,0x8e);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("0369b4e5-45b6-11d3-b650-00c04f79498e") ChannelTuneRequest;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ChannelTuneRequest, 0x0369b4e5, 0x45b6, 0x11d3, 0xb6,0x50, 0x00,0xc0,0x4f,0x79,0x49,0x8e)
+#endif
+#endif
+
+/*****************************************************************************
+ * ATSCChannelTuneRequest coclass
+ */
+
+DEFINE_GUID(CLSID_ATSCChannelTuneRequest, 0x0369b4e6, 0x45b6, 0x11d3, 0xb6,0x50, 0x00,0xc0,0x4f,0x79,0x49,0x8e);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("0369b4e6-45b6-11d3-b650-00c04f79498e") ATSCChannelTuneRequest;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ATSCChannelTuneRequest, 0x0369b4e6, 0x45b6, 0x11d3, 0xb6,0x50, 0x00,0xc0,0x4f,0x79,0x49,0x8e)
+#endif
+#endif
+
+/*****************************************************************************
+ * DigitalCableTuneRequest coclass
+ */
+
+DEFINE_GUID(CLSID_DigitalCableTuneRequest, 0x26ec0b63, 0xaa90, 0x458a, 0x8d,0xf4, 0x56,0x59,0xf2,0xc8,0xa1,0x8a);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("26ec0b63-aa90-458a-8df4-5659f2c8a18a") DigitalCableTuneRequest;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(DigitalCableTuneRequest, 0x26ec0b63, 0xaa90, 0x458a, 0x8d,0xf4, 0x56,0x59,0xf2,0xc8,0xa1,0x8a)
+#endif
+#endif
+
+/*****************************************************************************
+ * MPEG2TuneRequest coclass
+ */
+
+DEFINE_GUID(CLSID_MPEG2TuneRequest, 0x0955ac62, 0xbf2e, 0x4cba, 0xa2,0xb9, 0xa6,0x3f,0x77,0x2d,0x46,0xcf);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("0955ac62-bf2e-4cba-a2b9-a63f772d46cf") MPEG2TuneRequest;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(MPEG2TuneRequest, 0x0955ac62, 0xbf2e, 0x4cba, 0xa2,0xb9, 0xa6,0x3f,0x77,0x2d,0x46,0xcf)
+#endif
+#endif
+
+/*****************************************************************************
+ * MPEG2TuneRequestFactory coclass
+ */
+
+DEFINE_GUID(CLSID_MPEG2TuneRequestFactory, 0x2c63e4eb, 0x4cea, 0x41b8, 0x91,0x9c, 0xe9,0x47,0xea,0x19,0xa7,0x7c);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("2c63e4eb-4cea-41b8-919c-e947ea19a77c") MPEG2TuneRequestFactory;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(MPEG2TuneRequestFactory, 0x2c63e4eb, 0x4cea, 0x41b8, 0x91,0x9c, 0xe9,0x47,0xea,0x19,0xa7,0x7c)
+#endif
+#endif
+
+/*****************************************************************************
+ * Locator coclass
+ */
+
+DEFINE_GUID(CLSID_Locator, 0x0888c883, 0xac4f, 0x4943, 0xb5,0x16, 0x2c,0x38,0xd9,0xb3,0x45,0x62);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("0888c883-ac4f-4943-b516-2c38d9b34562") Locator;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(Locator, 0x0888c883, 0xac4f, 0x4943, 0xb5,0x16, 0x2c,0x38,0xd9,0xb3,0x45,0x62)
+#endif
+#endif
+
+/*****************************************************************************
+ * DigitalLocator coclass
+ */
+
+DEFINE_GUID(CLSID_DigitalLocator, 0x6e50cc0d, 0xc19b, 0x4bf6, 0x81,0x0b, 0x5b,0xd6,0x07,0x61,0xf5,0xcc);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("6e50cc0d-c19b-4bf6-810b-5bd60761f5cc") DigitalLocator;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(DigitalLocator, 0x6e50cc0d, 0xc19b, 0x4bf6, 0x81,0x0b, 0x5b,0xd6,0x07,0x61,0xf5,0xcc)
+#endif
+#endif
+
+/*****************************************************************************
+ * AnalogLocator coclass
+ */
+
+DEFINE_GUID(CLSID_AnalogLocator, 0x49638b91, 0x48ab, 0x48b7, 0xa4,0x7a, 0x7d,0x0e,0x75,0xa0,0x8e,0xde);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("49638b91-48ab-48b7-a47a-7d0e75a08ede") AnalogLocator;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(AnalogLocator, 0x49638b91, 0x48ab, 0x48b7, 0xa4,0x7a, 0x7d,0x0e,0x75,0xa0,0x8e,0xde)
+#endif
+#endif
+
+/*****************************************************************************
+ * ATSCLocator coclass
+ */
+
+DEFINE_GUID(CLSID_ATSCLocator, 0x8872ff1b, 0x98fa, 0x4d7a, 0x8d,0x93, 0xc9,0xf1,0x05,0x5f,0x85,0xbb);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("8872ff1b-98fa-4d7a-8d93-c9f1055f85bb") ATSCLocator;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ATSCLocator, 0x8872ff1b, 0x98fa, 0x4d7a, 0x8d,0x93, 0xc9,0xf1,0x05,0x5f,0x85,0xbb)
+#endif
+#endif
+
+/*****************************************************************************
+ * DigitalCableLocator coclass
+ */
+
+DEFINE_GUID(CLSID_DigitalCableLocator, 0x03c06416, 0xd127, 0x407a, 0xab,0x4c, 0xfd,0xd2,0x79,0xab,0xbe,0x5d);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("03c06416-d127-407a-ab4c-fdd279abbe5d") DigitalCableLocator;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(DigitalCableLocator, 0x03c06416, 0xd127, 0x407a, 0xab,0x4c, 0xfd,0xd2,0x79,0xab,0xbe,0x5d)
+#endif
+#endif
+
+/*****************************************************************************
+ * DVBTLocator coclass
+ */
+
+DEFINE_GUID(CLSID_DVBTLocator, 0x9cd64701, 0xbdf3, 0x4d14, 0x8e,0x03, 0xf1,0x29,0x83,0xd8,0x66,0x64);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("9cd64701-bdf3-4d14-8e03-f12983d86664") DVBTLocator;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(DVBTLocator, 0x9cd64701, 0xbdf3, 0x4d14, 0x8e,0x03, 0xf1,0x29,0x83,0xd8,0x66,0x64)
+#endif
+#endif
+
+/*****************************************************************************
+ * DVBTLocator2 coclass
+ */
+
+DEFINE_GUID(CLSID_DVBTLocator2, 0xefe3fa02, 0x45d7, 0x4920, 0xbe,0x96, 0x53,0xfa,0x7f,0x35,0xb0,0xe6);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("efe3fa02-45d7-4920-be96-53fa7f35b0e6") DVBTLocator2;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(DVBTLocator2, 0xefe3fa02, 0x45d7, 0x4920, 0xbe,0x96, 0x53,0xfa,0x7f,0x35,0xb0,0xe6)
+#endif
+#endif
+
+/*****************************************************************************
+ * DVBSLocator coclass
+ */
+
+DEFINE_GUID(CLSID_DVBSLocator, 0x1df7d126, 0x4050, 0x47f0, 0xa7,0xcf, 0x4c,0x4c,0xa9,0x24,0x13,0x33);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("1df7d126-4050-47f0-a7cf-4c4ca9241333") DVBSLocator;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(DVBSLocator, 0x1df7d126, 0x4050, 0x47f0, 0xa7,0xcf, 0x4c,0x4c,0xa9,0x24,0x13,0x33)
+#endif
+#endif
+
+/*****************************************************************************
+ * DVBCLocator coclass
+ */
+
+DEFINE_GUID(CLSID_DVBCLocator, 0xc531d9fd, 0x9685, 0x4028, 0x8b,0x68, 0x6e,0x12,0x32,0x07,0x9f,0x1e);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("c531d9fd-9685-4028-8b68-6e1232079f1e") DVBCLocator;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(DVBCLocator, 0xc531d9fd, 0x9685, 0x4028, 0x8b,0x68, 0x6e,0x12,0x32,0x07,0x9f,0x1e)
+#endif
+#endif
+
+/*****************************************************************************
+ * ISDBSLocator coclass
+ */
+
+DEFINE_GUID(CLSID_ISDBSLocator, 0x6504afed, 0xa629, 0x455c, 0xa7,0xf1, 0x04,0x96,0x4d,0xea,0x5c,0xc4);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("6504afed-a629-455c-a7f1-04964dea5cc4") ISDBSLocator;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ISDBSLocator, 0x6504afed, 0xa629, 0x455c, 0xa7,0xf1, 0x04,0x96,0x4d,0xea,0x5c,0xc4)
+#endif
+#endif
+
+/*****************************************************************************
+ * DVBTuneRequest coclass
+ */
+
+DEFINE_GUID(CLSID_DVBTuneRequest, 0x15d6504a, 0x5494, 0x499c, 0x88,0x6c, 0x97,0x3c,0x9e,0x53,0xb9,0xf1);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("15d6504a-5494-499c-886c-973c9e53b9f1") DVBTuneRequest;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(DVBTuneRequest, 0x15d6504a, 0x5494, 0x499c, 0x88,0x6c, 0x97,0x3c,0x9e,0x53,0xb9,0xf1)
+#endif
+#endif
+
+/*****************************************************************************
+ * CreatePropBagOnRegKey coclass
+ */
+
+DEFINE_GUID(CLSID_CreatePropBagOnRegKey, 0x8a674b49, 0x1f63, 0x11d3, 0xb6,0x4c, 0x00,0xc0,0x4f,0x79,0x49,0x8e);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("8a674b49-1f63-11d3-b64c-00c04f79498e") CreatePropBagOnRegKey;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(CreatePropBagOnRegKey, 0x8a674b49, 0x1f63, 0x11d3, 0xb6,0x4c, 0x00,0xc0,0x4f,0x79,0x49,0x8e)
+#endif
+#endif
+
+/*****************************************************************************
+ * BroadcastEventService coclass
+ */
+
+DEFINE_GUID(CLSID_BroadcastEventService, 0x0b3ffb92, 0x0919, 0x4934, 0x9d,0x5b, 0x61,0x9c,0x71,0x9d,0x02,0x02);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("0b3ffb92-0919-4934-9d5b-619c719d0202") BroadcastEventService;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(BroadcastEventService, 0x0b3ffb92, 0x0919, 0x4934, 0x9d,0x5b, 0x61,0x9c,0x71,0x9d,0x02,0x02)
+#endif
+#endif
+
+/*****************************************************************************
+ * TunerMarshaler coclass
+ */
+
+DEFINE_GUID(CLSID_TunerMarshaler, 0x6438570b, 0x0c08, 0x4a25, 0x95,0x04, 0x80,0x12,0xbb,0x4d,0x50,0xcf);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("6438570b-0c08-4a25-9504-8012bb4d50cf") TunerMarshaler;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(TunerMarshaler, 0x6438570b, 0x0c08, 0x4a25, 0x95,0x04, 0x80,0x12,0xbb,0x4d,0x50,0xcf)
+#endif
+#endif
+
+/*****************************************************************************
+ * PersistTuneXmlUtility coclass
+ */
+
+DEFINE_GUID(CLSID_PersistTuneXmlUtility, 0xe77026b0, 0xb97f, 0x4cbb, 0xb7,0xfb, 0xf4,0xf0,0x3a,0xd6,0x9f,0x11);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("e77026b0-b97f-4cbb-b7fb-f4f03ad69f11") PersistTuneXmlUtility;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(PersistTuneXmlUtility, 0xe77026b0, 0xb97f, 0x4cbb, 0xb7,0xfb, 0xf4,0xf0,0x3a,0xd6,0x9f,0x11)
+#endif
+#endif
+
+/*****************************************************************************
+ * ESEventService coclass
+ */
+
+DEFINE_GUID(CLSID_ESEventService, 0xc20447fc, 0xec60, 0x475e, 0x81,0x3f, 0xd2,0xb0,0xa6,0xde,0xce,0xfe);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("c20447fc-ec60-475e-813f-d2b0a6decefe") ESEventService;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ESEventService, 0xc20447fc, 0xec60, 0x475e, 0x81,0x3f, 0xd2,0xb0,0xa6,0xde,0xce,0xfe)
+#endif
+#endif
+
+/*****************************************************************************
+ * ESEventFactory coclass
+ */
+
+DEFINE_GUID(CLSID_ESEventFactory, 0x8e8a07da, 0x71f8, 0x40c1, 0xa9,0x29, 0x5e,0x3a,0x86,0x8a,0xc2,0xc6);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("8e8a07da-71f8-40c1-a929-5e3a868ac2c6") ESEventFactory;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ESEventFactory, 0x8e8a07da, 0x71f8, 0x40c1, 0xa9,0x29, 0x5e,0x3a,0x86,0x8a,0xc2,0xc6)
+#endif
+#endif
+
+#endif
+/* Begin additional prototypes for all interfaces */
+
+ULONG           __RPC_USER VARIANT_UserSize     (ULONG *, ULONG, VARIANT *);
+unsigned char * __RPC_USER VARIANT_UserMarshal  (ULONG *, unsigned char *, VARIANT *);
+unsigned char * __RPC_USER VARIANT_UserUnmarshal(ULONG *, unsigned char *, VARIANT *);
+void            __RPC_USER VARIANT_UserFree     (ULONG *, VARIANT *);
+ULONG           __RPC_USER BSTR_UserSize     (ULONG *, ULONG, BSTR *);
+unsigned char * __RPC_USER BSTR_UserMarshal  (ULONG *, unsigned char *, BSTR *);
+unsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *);
+void            __RPC_USER BSTR_UserFree     (ULONG *, BSTR *);
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __tuner_h__ */
diff --git a/x86_64-w64-mingw32/include/uchar.h b/x86_64-w64-mingw32/include/uchar.h
index 72b377c..30a4418 100644
--- a/x86_64-w64-mingw32/include/uchar.h
+++ b/x86_64-w64-mingw32/include/uchar.h
@@ -30,7 +30,7 @@
 /* Remember that g++ >= 4.4 defines these types only in c++0x mode */
 #if !(defined(__cplusplus) && defined(__GXX_EXPERIMENTAL_CXX0X__)) ||	\
     !defined(__GNUC__) ||						\
-    (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 4))
+    (!defined(__clang__) && (__GNUC__ < 4 || (__GNUC__ == 4 &&	__GNUC_MINOR__ < 4)))
 typedef uint_least16_t char16_t;
 typedef uint_least32_t char32_t;
 #endif
diff --git a/x86_64-w64-mingw32/include/uiviewsettingsinterop.h b/x86_64-w64-mingw32/include/uiviewsettingsinterop.h
new file mode 100644
index 0000000..a097e9f
--- /dev/null
+++ b/x86_64-w64-mingw32/include/uiviewsettingsinterop.h
@@ -0,0 +1,164 @@
+/*** Autogenerated by WIDL 1.6 from include/uiviewsettingsinterop.idl - Do not edit ***/
+
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
+
+#ifndef __uiviewsettingsinterop_h__
+#define __uiviewsettingsinterop_h__
+
+/* Forward declarations */
+
+#ifndef __IUIViewSettingsInterop_FWD_DEFINED__
+#define __IUIViewSettingsInterop_FWD_DEFINED__
+typedef interface IUIViewSettingsInterop IUIViewSettingsInterop;
+#endif
+
+/* Headers for imported files */
+
+#include <inspectable.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*****************************************************************************
+ * IUIViewSettingsInterop interface
+ */
+#ifndef __IUIViewSettingsInterop_INTERFACE_DEFINED__
+#define __IUIViewSettingsInterop_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IUIViewSettingsInterop, 0x3694dbf9, 0x8f68, 0x44be, 0x8f,0xf5, 0x19,0x5c,0x98,0xed,0xe8,0xa6);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("3694dbf9-8f68-44be-8ff5-195c98ede8a6")
+IUIViewSettingsInterop : public IInspectable
+{
+    virtual HRESULT STDMETHODCALLTYPE GetForWindow(
+        HWND hwnd,
+        REFIID riid,
+        void **ppv) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IUIViewSettingsInterop, 0x3694dbf9, 0x8f68, 0x44be, 0x8f,0xf5, 0x19,0x5c,0x98,0xed,0xe8,0xa6)
+#endif
+#else
+typedef struct IUIViewSettingsInteropVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IUIViewSettingsInterop* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IUIViewSettingsInterop* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IUIViewSettingsInterop* This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        IUIViewSettingsInterop* This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        IUIViewSettingsInterop* This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        IUIViewSettingsInterop* This,
+        TrustLevel *trustLevel);
+
+    /*** IUIViewSettingsInterop methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetForWindow)(
+        IUIViewSettingsInterop* This,
+        HWND hwnd,
+        REFIID riid,
+        void **ppv);
+
+    END_INTERFACE
+} IUIViewSettingsInteropVtbl;
+interface IUIViewSettingsInterop {
+    CONST_VTBL IUIViewSettingsInteropVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IUIViewSettingsInterop_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IUIViewSettingsInterop_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IUIViewSettingsInterop_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define IUIViewSettingsInterop_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define IUIViewSettingsInterop_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define IUIViewSettingsInterop_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IUIViewSettingsInterop methods ***/
+#define IUIViewSettingsInterop_GetForWindow(This,hwnd,riid,ppv) (This)->lpVtbl->GetForWindow(This,hwnd,riid,ppv)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IUIViewSettingsInterop_QueryInterface(IUIViewSettingsInterop* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IUIViewSettingsInterop_AddRef(IUIViewSettingsInterop* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IUIViewSettingsInterop_Release(IUIViewSettingsInterop* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static FORCEINLINE HRESULT IUIViewSettingsInterop_GetIids(IUIViewSettingsInterop* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static FORCEINLINE HRESULT IUIViewSettingsInterop_GetRuntimeClassName(IUIViewSettingsInterop* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static FORCEINLINE HRESULT IUIViewSettingsInterop_GetTrustLevel(IUIViewSettingsInterop* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IUIViewSettingsInterop methods ***/
+static FORCEINLINE HRESULT IUIViewSettingsInterop_GetForWindow(IUIViewSettingsInterop* This,HWND hwnd,REFIID riid,void **ppv) {
+    return This->lpVtbl->GetForWindow(This,hwnd,riid,ppv);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IUIViewSettingsInterop_GetForWindow_Proxy(
+    IUIViewSettingsInterop* This,
+    HWND hwnd,
+    REFIID riid,
+    void **ppv);
+void __RPC_STUB IUIViewSettingsInterop_GetForWindow_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IUIViewSettingsInterop_INTERFACE_DEFINED__ */
+
+/* Begin additional prototypes for all interfaces */
+
+ULONG           __RPC_USER HWND_UserSize     (ULONG *, ULONG, HWND *);
+unsigned char * __RPC_USER HWND_UserMarshal  (ULONG *, unsigned char *, HWND *);
+unsigned char * __RPC_USER HWND_UserUnmarshal(ULONG *, unsigned char *, HWND *);
+void            __RPC_USER HWND_UserFree     (ULONG *, HWND *);
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __uiviewsettingsinterop_h__ */
diff --git a/x86_64-w64-mingw32/include/urlmon.h b/x86_64-w64-mingw32/include/urlmon.h
index 4c23f87..e1b6287 100644
--- a/x86_64-w64-mingw32/include/urlmon.h
+++ b/x86_64-w64-mingw32/include/urlmon.h
@@ -298,8 +298,6 @@
  * No warranty is given; refer to the file DISCLAIMER within this package.
  */
 
-#pragma comment(lib,"uuid.lib")
-
 #include <winapifamily.h>
 
 #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
diff --git a/x86_64-w64-mingw32/include/usbioctl.h b/x86_64-w64-mingw32/include/usbioctl.h
index 8bbbc2c..57498b5 100644
--- a/x86_64-w64-mingw32/include/usbioctl.h
+++ b/x86_64-w64-mingw32/include/usbioctl.h
@@ -574,7 +574,9 @@
   __C89_NAMELESS struct {
     ULONG DeviceIsOperatingAtSuperSpeedOrHigher :1;
     ULONG DeviceIsSuperSpeedCapableOrHigher :1;
-    ULONG ReservedMBZ :30;
+    ULONG DeviceIsOperatingAtSuperSpeedPlusOrHigher :1;
+    ULONG DeviceIsSuperSpeedPlusCapableOrHigher :1;
+    ULONG ReservedMBZ :28;
   };
 } USB_NODE_CONNECTION_INFORMATION_EX_V2_FLAGS,*PUSB_NODE_CONNECTION_INFORMATION_EX_V2_FLAGS;
 
diff --git a/x86_64-w64-mingw32/include/usbspec.h b/x86_64-w64-mingw32/include/usbspec.h
index 7ace8a3..86557d8 100644
--- a/x86_64-w64-mingw32/include/usbspec.h
+++ b/x86_64-w64-mingw32/include/usbspec.h
@@ -213,6 +213,7 @@
 #define USB_DEVICE_CAPABILITY_USB20_EXTENSION 0x02
 #define USB_DEVICE_CAPABILITY_SUPERSPEED_USB 0x03
 #define USB_DEVICE_CAPABILITY_CONTAINER_ID 0x04
+#define USB_DEVICE_CAPABILITY_BILLBOARD 0x0D
 
 typedef struct _USB_DEVICE_CAPABILITY_USB20_EXTENSION_DESCRIPTOR {
   UCHAR bLength;
@@ -399,7 +400,8 @@
     } Bulk;
     struct {
       UCHAR Mult:2;
-      UCHAR Reserved2:6;
+      UCHAR Reserved2:5;
+      UCHAR SspCompanion:1;
     } Isochronous;
   } bmAttributes;
   USHORT wBytesPerInterval;
@@ -633,6 +635,37 @@
   USHORT TransitionTimeFromD3;
 } USB_INTERFACE_POWER_DESCRIPTOR,*PUSB_INTERFACE_POWER_DESCRIPTOR;
 
+typedef struct _USB_DEVICE_CAPABILITY_BILLBOARD_DESCRIPTOR {
+  UCHAR bLength;
+  UCHAR bDescriptorType;
+  UCHAR bDevCapabilityType;
+  UCHAR iAddtionalInfoURL;
+  UCHAR bNumberOfAlternateModes;
+  UCHAR bPreferredAlternateMode;
+  union {
+    USHORT AsUshort;
+    struct {
+      USHORT VConnPowerNeededForFullFunctionality:3;
+      USHORT Reserved:12;
+      USHORT NoVconnPowerRequired:1;
+    };
+  } VconnPower;
+  UCHAR bmConfigured[32];
+  ULONG bReserved;
+  struct {
+    USHORT wSVID;
+    UCHAR bAlternateMode;
+    UCHAR iAlternateModeSetting;
+  } AlternateMode[1];
+} USB_DEVICE_CAPABILITY_BILLBOARD_DESCRIPTOR,*PUSB_DEVICE_CAPABILITY_BILLBOARD_DESCRIPTOR;
+
+typedef struct _USB_SUPERSPEEDPLUS_ISOCH_ENDPOINT_COMPANION_DESCRIPTOR {
+  UCHAR bLength;
+  UCHAR bDescriptorType;
+  USHORT wReserved;
+  ULONG dwBytesPerInterval;
+} USB_SUPERSPEEDPLUS_ISOCH_ENDPOINT_COMPANION_DESCRIPTOR,*PUSB_SUPERSPEEDPLUS_ISOCH_ENDPOINT_COMPANION_DESCRIPTOR;
+
 #include <poppack.h>
 
 #endif
diff --git a/x86_64-w64-mingw32/include/versionhelpers.h b/x86_64-w64-mingw32/include/versionhelpers.h
new file mode 100644
index 0000000..25ea414
--- /dev/null
+++ b/x86_64-w64-mingw32/include/versionhelpers.h
@@ -0,0 +1,79 @@
+/**
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+
+#ifndef _INC_VERSIONHELPERS
+#define _INC_VERSIONHELPERS
+
+#include <winapifamily.h>
+
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && !defined(__WIDL__)
+
+#ifdef __cplusplus
+#define VERSIONHELPERAPI inline bool
+#else
+#define VERSIONHELPERAPI FORCEINLINE BOOL
+#endif
+
+VERSIONHELPERAPI IsWindowsVersionOrGreater(WORD major, WORD minor, WORD servpack)
+{
+    OSVERSIONINFOEXW vi = {sizeof(vi),major,minor,0,0,{0},servpack};
+    return VerifyVersionInfoW(&vi, VER_MAJORVERSION|VER_MINORVERSION|VER_SERVICEPACKMAJOR,
+        VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0,
+            VER_MAJORVERSION,VER_GREATER_EQUAL),
+            VER_MINORVERSION,VER_GREATER_EQUAL),
+            VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL));
+}
+
+VERSIONHELPERAPI IsWindowsXPOrGreater(void) {
+    return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 0);
+}
+
+VERSIONHELPERAPI IsWindowsXPSP1OrGreater(void) {
+    return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 1);
+}
+
+VERSIONHELPERAPI IsWindowsXPSP2OrGreater(void) {
+    return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 2);
+}
+
+VERSIONHELPERAPI IsWindowsXPSP3OrGreater(void) {
+    return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 3);
+}
+
+VERSIONHELPERAPI IsWindowsVistaOrGreater(void) {
+    return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 0);
+}
+
+VERSIONHELPERAPI IsWindowsVistaSP1OrGreater(void) {
+    return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 1);
+}
+
+VERSIONHELPERAPI IsWindowsVistaSP2OrGreater(void) {
+    return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 2);
+}
+
+VERSIONHELPERAPI IsWindows7OrGreater(void) {
+    return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN7), LOBYTE(_WIN32_WINNT_WIN7), 0);
+}
+
+VERSIONHELPERAPI IsWindows7SP1OrGreater(void) {
+    return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN7), LOBYTE(_WIN32_WINNT_WIN7), 1);
+}
+
+VERSIONHELPERAPI IsWindows8OrGreater(void) {
+    return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN8), LOBYTE(_WIN32_WINNT_WIN8), 0);
+}
+
+VERSIONHELPERAPI IsWindows8Point1OrGreater(void) {
+    return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINBLUE), LOBYTE(_WIN32_WINNT_WINBLUE), 0);
+}
+
+VERSIONHELPERAPI IsWindowsServer(void) {
+    OSVERSIONINFOEXW vi = {sizeof(vi),0,0,0,0,{0},0,0,0,VER_NT_WORKSTATION};
+    return !VerifyVersionInfoW(&vi, VER_PRODUCT_TYPE, VerSetConditionMask(0, VER_PRODUCT_TYPE, VER_EQUAL));
+}
+
+#endif
+#endif
diff --git a/x86_64-w64-mingw32/include/wbemads.h b/x86_64-w64-mingw32/include/wbemads.h
index e0c9f92..e181dfc 100644
--- a/x86_64-w64-mingw32/include/wbemads.h
+++ b/x86_64-w64-mingw32/include/wbemads.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 1.6 from /usr/local/google/buildbot/src/android/mingw/toolchain/mingw/mingw-w64-v4.0.4/mingw-w64-headers/include/wbemads.idl - Do not edit ***/
+/*** Autogenerated by WIDL 1.6 from include/wbemads.idl - Do not edit ***/
 
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
 #define __REQUIRED_RPCNDR_H_VERSION__ 475
diff --git a/x86_64-w64-mingw32/include/wbemidl.h b/x86_64-w64-mingw32/include/wbemidl.h
index a055944..7c22158 100644
--- a/x86_64-w64-mingw32/include/wbemidl.h
+++ b/x86_64-w64-mingw32/include/wbemidl.h
@@ -6,8 +6,8 @@
 #ifndef __WBEMIDL_H_
 #define __WBEMIDL_H_
 
-#include <winapifamily.h>
-
+#include <winapifamily.h>
+
 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
 
 #include <wbemcli.h>
diff --git a/x86_64-w64-mingw32/include/wdstpdi.h b/x86_64-w64-mingw32/include/wdstpdi.h
index 2031aa7..2232998 100644
--- a/x86_64-w64-mingw32/include/wdstpdi.h
+++ b/x86_64-w64-mingw32/include/wdstpdi.h
@@ -92,6 +92,6 @@
 
 #ifdef __cplusplus
 }
-#endi
+#endif
 #endif /*(_WIN32_WINNT >= 0x0600)*/
 #endif /*_INC_WDSTPDI*/
diff --git a/x86_64-w64-mingw32/include/wincodec.h b/x86_64-w64-mingw32/include/wincodec.h
index 755a231..a863a6c 100644
--- a/x86_64-w64-mingw32/include/wincodec.h
+++ b/x86_64-w64-mingw32/include/wincodec.h
@@ -312,6 +312,9 @@
 DEFINE_GUID(GUID_WICPixelFormat32bppBGR, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x0e);
 DEFINE_GUID(GUID_WICPixelFormat32bppBGRA, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x0f);
 DEFINE_GUID(GUID_WICPixelFormat32bppPBGRA, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x10);
+DEFINE_GUID(GUID_WICPixelFormat32bppRGB, 0xd98c6b95,0x3efe,0x47d6,0xbb,0x25,0xeb,0x17,0x48,0xab,0x0c,0xf1);
+DEFINE_GUID(GUID_WICPixelFormat32bppRGBA, 0xf5c7ad2d,0x6a8d,0x43dd,0xa7,0xa8,0xa2,0x99,0x35,0x26,0x1a,0xe9);
+DEFINE_GUID(GUID_WICPixelFormat32bppPRGBA, 0x3cc4a650,0xa527,0x4d37,0xa9,0x16,0x31,0x42,0xc7,0xeb,0xed,0xba);
 DEFINE_GUID(GUID_WICPixelFormat48bppRGB, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x15);
 DEFINE_GUID(GUID_WICPixelFormat64bppRGBA, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x16);
 DEFINE_GUID(GUID_WICPixelFormat64bppPRGBA, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x17);
diff --git a/x86_64-w64-mingw32/include/windns.h b/x86_64-w64-mingw32/include/windns.h
index 35d4222..bf710f2 100644
--- a/x86_64-w64-mingw32/include/windns.h
+++ b/x86_64-w64-mingw32/include/windns.h
@@ -758,7 +758,11 @@
 
 #define DnsFreeRecordListDeep DnsFreeRecordList
 
+#if(_WIN32_WINNT >= 0x0501)
+  #define DnsRecordListFree(p,t)  DnsFree(p,DnsFreeRecordList)
+#else
   VOID WINAPI DnsRecordListFree(PDNS_RECORD pRecordList,DNS_FREE_TYPE FreeType);
+#endif /* _WIN32_WINNT >= 0x0501 */
 
 #define DNS_QUERY_STANDARD 0x00000000
 #define DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE 0x00000001
diff --git a/x86_64-w64-mingw32/include/wingdi.h b/x86_64-w64-mingw32/include/wingdi.h
index 1dd0efa..e0ae2ec 100644
--- a/x86_64-w64-mingw32/include/wingdi.h
+++ b/x86_64-w64-mingw32/include/wingdi.h
@@ -2071,23 +2071,23 @@
   } DISPLAYCONFIG_RATIONAL;
 
   typedef enum {
-    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_OTHER = -1,
-    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_HD15 =  0,
-    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SVIDEO =  1,
-    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_COMPOSITE_VIDEO =  2,
-    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_COMPONENT_VIDEO =  3,
-    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DVI =  4,
-    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_HDMI =  5,
-    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_LVDS =  6,
-    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_D_JPN  =  8,
-    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SDI =  9,
-    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EXTERNAL = 10,
-    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EMBEDDED = 11,
-    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_UDI_EXTERNAL = 12,
-    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_UDI_EMBEDDED = 13,
-    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SDTVDONGLE = 14,
-    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_INTERNAL = 0x80000000,
-    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_FORCE_UINT32 = 0xFFFFFFFF
+    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_OTHER = (int) -1,
+    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_HD15 = (int) 0,
+    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SVIDEO = (int) 1,
+    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_COMPOSITE_VIDEO = (int) 2,
+    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_COMPONENT_VIDEO = (int) 3,
+    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DVI = (int) 4,
+    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_HDMI = (int) 5,
+    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_LVDS = (int) 6,
+    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_D_JPN  = (int) 8,
+    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SDI = (int) 9,
+    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EXTERNAL = (int) 10,
+    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EMBEDDED = (int) 11,
+    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_UDI_EXTERNAL = (int) 12,
+    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_UDI_EMBEDDED = (int) 13,
+    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SDTVDONGLE = (int) 14,
+    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_INTERNAL = (int) 0x80000000,
+    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_FORCE_UINT32 = (int) 0xFFFFFFFF
   } DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY;
 
   typedef enum {
diff --git a/x86_64-w64-mingw32/include/winnt.h b/x86_64-w64-mingw32/include/winnt.h
index b703125..84eb36a 100644
--- a/x86_64-w64-mingw32/include/winnt.h
+++ b/x86_64-w64-mingw32/include/winnt.h
@@ -816,6 +816,9 @@
 #define PRODUCT_CORE                              0x65
 #define PRODUCT_PROFESSIONAL_WMC                  0x67
 #define PRODUCT_MOBILE_CORE                       0x68
+#define PRODUCT_EDUCATION                         0x79
+#define PRODUCT_EDUCATION_N                       0x7a
+#define PRODUCT_MOBILE_ENTERPRISE                 0x85
 
 #define PRODUCT_UNLICENSED                        0xabcdabcd
 
@@ -1498,21 +1501,16 @@
 
     /* LONG InterlockedExchangeAdd(LONG volatile *Addend,LONG Value); moved to psdk_inc/intrin-impl.h */
     /* LONG InterlockedCompareExchange(LONG volatile *Destination,LONG ExChange,LONG Comperand); moved to psdk_inc/intrin-impl.h */
-    LONG InterlockedAdd(LONG volatile *Addend,LONG Value);
+    /* LONG InterlockedAdd(LONG volatile *Addend,LONG Value); moved to psdk_inc/intrin-impl.h */
     /* LONG64 InterlockedIncrement64(LONG64 volatile *Addend); moved to psdk_inc/intrin-impl.h */
     /* LONG64 InterlockedDecrement64(LONG64 volatile *Addend); moved to psdk_inc/intrin-impl.h */
     /* LONG64 InterlockedExchange64(LONG64 volatile *Target,LONG64 Value); moved to psdk_inc/intrin-impl.h */
-
-    __forceinline LONG InterlockedAdd(LONG volatile *Addend,LONG Value) { return InterlockedExchangeAdd(Addend,Value) + Value; }
-
     /* LONG64 InterlockedExchangeAdd64(LONG64 volatile *Addend,LONG64 Value); moved to psdk_inc/intrin-impl.h */
-    LONG64 InterlockedAdd64(LONG64 volatile *Addend,LONG64 Value);
+    /* LONG64 InterlockedAdd64(LONG64 volatile *Addend,LONG64 Value); moved to psdk_inc/intrin-impl.h */
     /* LONG64 InterlockedCompareExchange64(LONG64 volatile *Destination,LONG64 ExChange,LONG64 Comperand); moved to psdk_inc/intrin-impl.h */
     /* PVOID InterlockedCompareExchangePointer(PVOID volatile *Destination,PVOID ExChange,PVOID Comperand); moved to psdk_inc/intrin-impl.h */
     /* PVOID InterlockedExchangePointer(PVOID volatile *Target,PVOID Value); moved to psdk_inc/intrin-impl.h */
 
-    __forceinline LONG64 InterlockedAdd64(LONG64 volatile *Addend,LONG64 Value) { return InterlockedExchangeAdd64(Addend,Value) + Value; }
-
 #define CacheLineFlush(Address) _mm_clflush(Address)
 
 # if defined(__cplusplus)
@@ -1958,6 +1956,8 @@
 #define BitScanReverse _BitScanReverse
 
 #define InterlockedCompareExchange16 _InterlockedCompareExchange16
+#define InterlockedAdd _InterlockedAdd
+#define InterlockedAdd64 _InterlockedAdd64
 
 #ifdef _PREFIX_
     /* BYTE __readfsbyte(DWORD Offset); moved to psdk_inc/intrin-impl.h */
@@ -1998,15 +1998,15 @@
 
 #define DbgRaiseAssertionFailure __int2c
 
-  __CRT_INLINE struct _TEB *NtCurrentTeb(void)
+  FORCEINLINE struct _TEB *NtCurrentTeb(void)
   {
     return (struct _TEB *)__readfsdword(PcTeb);
   }
-  __CRT_INLINE PVOID GetCurrentFiber(void)
+  FORCEINLINE PVOID GetCurrentFiber(void)
   {
     return(PVOID)__readfsdword(0x10);
   }
-  __CRT_INLINE PVOID GetFiberData(void)
+  FORCEINLINE PVOID GetFiberData(void)
   {
       return *(PVOID *)GetCurrentFiber();
   }
@@ -5881,6 +5881,7 @@
 #define IMAGE_SUBSYSTEM_XBOX 14
 #define IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION 16
 
+#define IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA 0x0020
 #define IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE 0x0040
 #define IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY 0x0080
 #define IMAGE_DLLCHARACTERISTICS_NX_COMPAT 0x0100
@@ -5889,6 +5890,7 @@
 #define IMAGE_DLLCHARACTERISTICS_NO_BIND 0x0800
 #define IMAGE_DLLCHARACTERISTICS_APPCONTAINER 0x1000
 #define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER 0x2000
+#define IMAGE_DLLCHARACTERISTICS_GUARD_CF 0x4000
 #define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 0x8000
 
 #define IMAGE_DIRECTORY_ENTRY_EXPORT 0
@@ -8365,6 +8367,10 @@
     struct _TEB *NtCurrentTeb (VOID);
     PVOID GetCurrentFiber (VOID);
     PVOID GetFiberData (VOID);
+    FORCEINLINE struct _TEB *NtCurrentTeb(VOID) { struct _TEB *teb;
+    __asm ("mrc p15, 0, %0, c13, c0, 2" : "=r" (teb));
+    return teb; }
+    FORCEINLINE PVOID GetCurrentFiber(VOID) { return (PVOID)(((PNT_TIB)NtCurrentTeb())->FiberData); }
     FORCEINLINE PVOID GetFiberData (VOID) { return *(PVOID *)GetCurrentFiber (); }
 #endif /* arm */
 
diff --git a/x86_64-w64-mingw32/include/winsdkver.h b/x86_64-w64-mingw32/include/winsdkver.h
index 45526e8..62e9182 100644
--- a/x86_64-w64-mingw32/include/winsdkver.h
+++ b/x86_64-w64-mingw32/include/winsdkver.h
@@ -10,12 +10,12 @@
 
 #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
 
-#define _WIN32_MAXVER         0x0602
-#define _WIN32_WINDOWS_MAXVER 0x0602
-#define NTDDI_MAXVER          0x0602
-#define _WIN32_IE_MAXVER      0x0b00
-#define _WIN32_WINNT_MAXVER   0x0602
-#define WINVER_MAXVER         0x0602
+#define _WIN32_MAXVER         0x0A00
+#define _WIN32_WINDOWS_MAXVER 0x0A00
+#define NTDDI_MAXVER          0x0A00
+#define _WIN32_IE_MAXVER      0x0A00
+#define _WIN32_WINNT_MAXVER   0x0A00
+#define WINVER_MAXVER         0x0A00
 
 #endif
 #endif
diff --git a/x86_64-w64-mingw32/include/winstring.h b/x86_64-w64-mingw32/include/winstring.h
index c37097c..76131d8 100644
--- a/x86_64-w64-mingw32/include/winstring.h
+++ b/x86_64-w64-mingw32/include/winstring.h
@@ -11,7 +11,9 @@
 #include <rpc.h>
 #include <hstring.h>
 
-#if _WIN32_WINNT >= _WIN32_WINNT_WIN8
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 void __RPC_USER HSTRING_UserFree(unsigned long *pFlags, HSTRING *ppidl);
 
@@ -31,8 +33,6 @@
 unsigned char* __RPC_USER HSTRING_UserUnmarshal64(unsigned long *pFlags, unsigned char *pBuffer, HSTRING *ppidl);
 #endif
 
-/* */
-
 HRESULT WINAPI WindowsCompareStringOrdinal(HSTRING string1, HSTRING string2, INT32 *result);
 
 HRESULT WINAPI WindowsConcatString(HSTRING string1, HSTRING string2, HSTRING *newString);
@@ -73,5 +73,8 @@
 
 HRESULT WINAPI WindowsTrimStringStart(HSTRING string, HSTRING trimString, HSTRING *newString);
 
+#ifdef __cplusplus
+}
 #endif
+
 #endif
diff --git a/x86_64-w64-mingw32/include/wmcodecdsp.h b/x86_64-w64-mingw32/include/wmcodecdsp.h
index f314db9..2f1afb1 100644
--- a/x86_64-w64-mingw32/include/wmcodecdsp.h
+++ b/x86_64-w64-mingw32/include/wmcodecdsp.h
@@ -607,6 +607,114 @@
 #endif /* defined __cplusplus */
 #endif /* defined __CMSH264DecoderMFT_FWD_DEFINED__ */
 
+#ifndef __CMSH264EncoderMFT_FWD_DEFINED__
+#define __CMSH264EncoderMFT_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class CMSH264EncoderMFT CMSH264EncoderMFT;
+#else
+typedef struct CMSH264EncoderMFT CMSH264EncoderMFT;
+#endif /* defined __cplusplus */
+#endif /* defined __CMSH264EncoderMFT_FWD_DEFINED__ */
+
+#ifndef __CMSH264RemuxMFT_FWD_DEFINED__
+#define __CMSH264RemuxMFT_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class CMSH264RemuxMFT CMSH264RemuxMFT;
+#else
+typedef struct CMSH264RemuxMFT CMSH264RemuxMFT;
+#endif /* defined __cplusplus */
+#endif /* defined __CMSH264RemuxMFT_FWD_DEFINED__ */
+
+#ifndef __CMSAACDecMFT_FWD_DEFINED__
+#define __CMSAACDecMFT_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class CMSAACDecMFT CMSAACDecMFT;
+#else
+typedef struct CMSAACDecMFT CMSAACDecMFT;
+#endif /* defined __cplusplus */
+#endif /* defined __CMSAACDecMFT_FWD_DEFINED__ */
+
+#ifndef __AACMFTEncoder_FWD_DEFINED__
+#define __AACMFTEncoder_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class AACMFTEncoder AACMFTEncoder;
+#else
+typedef struct AACMFTEncoder AACMFTEncoder;
+#endif /* defined __cplusplus */
+#endif /* defined __AACMFTEncoder_FWD_DEFINED__ */
+
+#ifndef __CMSDDPlusDecMFT_FWD_DEFINED__
+#define __CMSDDPlusDecMFT_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class CMSDDPlusDecMFT CMSDDPlusDecMFT;
+#else
+typedef struct CMSDDPlusDecMFT CMSDDPlusDecMFT;
+#endif /* defined __cplusplus */
+#endif /* defined __CMSDDPlusDecMFT_FWD_DEFINED__ */
+
+#ifndef __CMPEG2VideoEncoderMFT_FWD_DEFINED__
+#define __CMPEG2VideoEncoderMFT_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class CMPEG2VideoEncoderMFT CMPEG2VideoEncoderMFT;
+#else
+typedef struct CMPEG2VideoEncoderMFT CMPEG2VideoEncoderMFT;
+#endif /* defined __cplusplus */
+#endif /* defined __CMPEG2VideoEncoderMFT_FWD_DEFINED__ */
+
+#ifndef __CMPEG2AudioEncoderMFT_FWD_DEFINED__
+#define __CMPEG2AudioEncoderMFT_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class CMPEG2AudioEncoderMFT CMPEG2AudioEncoderMFT;
+#else
+typedef struct CMPEG2AudioEncoderMFT CMPEG2AudioEncoderMFT;
+#endif /* defined __cplusplus */
+#endif /* defined __CMPEG2AudioEncoderMFT_FWD_DEFINED__ */
+
+#ifndef __CMSMPEGDecoderMFT_FWD_DEFINED__
+#define __CMSMPEGDecoderMFT_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class CMSMPEGDecoderMFT CMSMPEGDecoderMFT;
+#else
+typedef struct CMSMPEGDecoderMFT CMSMPEGDecoderMFT;
+#endif /* defined __cplusplus */
+#endif /* defined __CMSMPEGDecoderMFT_FWD_DEFINED__ */
+
+#ifndef __CMSMPEGAudDecMFT_FWD_DEFINED__
+#define __CMSMPEGAudDecMFT_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class CMSMPEGAudDecMFT CMSMPEGAudDecMFT;
+#else
+typedef struct CMSMPEGAudDecMFT CMSMPEGAudDecMFT;
+#endif /* defined __cplusplus */
+#endif /* defined __CMSMPEGAudDecMFT_FWD_DEFINED__ */
+
+#ifndef __CMSDolbyDigitalEncMFT_FWD_DEFINED__
+#define __CMSDolbyDigitalEncMFT_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class CMSDolbyDigitalEncMFT CMSDolbyDigitalEncMFT;
+#else
+typedef struct CMSDolbyDigitalEncMFT CMSDolbyDigitalEncMFT;
+#endif /* defined __cplusplus */
+#endif /* defined __CMSDolbyDigitalEncMFT_FWD_DEFINED__ */
+
+#ifndef __MP3ACMCodecWrapper_FWD_DEFINED__
+#define __MP3ACMCodecWrapper_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class MP3ACMCodecWrapper MP3ACMCodecWrapper;
+#else
+typedef struct MP3ACMCodecWrapper MP3ACMCodecWrapper;
+#endif /* defined __cplusplus */
+#endif /* defined __MP3ACMCodecWrapper_FWD_DEFINED__ */
+
+#ifndef __CMSVideoDSPMFT_FWD_DEFINED__
+#define __CMSVideoDSPMFT_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class CMSVideoDSPMFT CMSVideoDSPMFT;
+#else
+typedef struct CMSVideoDSPMFT CMSVideoDSPMFT;
+#endif /* defined __cplusplus */
+#endif /* defined __CMSVideoDSPMFT_FWD_DEFINED__ */
+
 /* Headers for imported files */
 
 #include <mediaobj.h>
@@ -1553,6 +1661,162 @@
 #endif
 #endif
 
+/*****************************************************************************
+ * CMSH264EncoderMFT coclass
+ */
+
+DEFINE_GUID(CLSID_CMSH264EncoderMFT, 0x6ca50344, 0x051a, 0x4ded, 0x97,0x79, 0xa4,0x33,0x05,0x16,0x5e,0x35);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("6ca50344-051a-4ded-9779-a43305165e35") CMSH264EncoderMFT;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(CMSH264EncoderMFT, 0x6ca50344, 0x051a, 0x4ded, 0x97,0x79, 0xa4,0x33,0x05,0x16,0x5e,0x35)
+#endif
+#endif
+
+/*****************************************************************************
+ * CMSH264RemuxMFT coclass
+ */
+
+DEFINE_GUID(CLSID_CMSH264RemuxMFT, 0x05a47ebb, 0x8bf0, 0x4cbf, 0xad,0x2f, 0x3b,0x71,0xd7,0x58,0x66,0xf5);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("05a47ebb-8bf0-4cbf-ad2f-3b71d75866f5") CMSH264RemuxMFT;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(CMSH264RemuxMFT, 0x05a47ebb, 0x8bf0, 0x4cbf, 0xad,0x2f, 0x3b,0x71,0xd7,0x58,0x66,0xf5)
+#endif
+#endif
+
+/*****************************************************************************
+ * CMSAACDecMFT coclass
+ */
+
+DEFINE_GUID(CLSID_CMSAACDecMFT, 0x32d186a7, 0x218f, 0x4c75, 0x88,0x76, 0xdd,0x77,0x27,0x3a,0x89,0x99);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("32d186a7-218f-4c75-8876-dd77273a8999") CMSAACDecMFT;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(CMSAACDecMFT, 0x32d186a7, 0x218f, 0x4c75, 0x88,0x76, 0xdd,0x77,0x27,0x3a,0x89,0x99)
+#endif
+#endif
+
+/*****************************************************************************
+ * AACMFTEncoder coclass
+ */
+
+DEFINE_GUID(CLSID_AACMFTEncoder, 0x93af0c51, 0x2275, 0x45d2, 0xa3,0x5b, 0xf2,0xba,0x21,0xca,0xed,0x00);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("93af0c51-2275-45d2-a35b-f2ba21caed00") AACMFTEncoder;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(AACMFTEncoder, 0x93af0c51, 0x2275, 0x45d2, 0xa3,0x5b, 0xf2,0xba,0x21,0xca,0xed,0x00)
+#endif
+#endif
+
+/*****************************************************************************
+ * CMSDDPlusDecMFT coclass
+ */
+
+DEFINE_GUID(CLSID_CMSDDPlusDecMFT, 0x177c0afe, 0x900b, 0x48d4, 0x9e,0x4c, 0x57,0xad,0xd2,0x50,0xb3,0xd4);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("177c0afe-900b-48d4-9e4c-57add250b3d4") CMSDDPlusDecMFT;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(CMSDDPlusDecMFT, 0x177c0afe, 0x900b, 0x48d4, 0x9e,0x4c, 0x57,0xad,0xd2,0x50,0xb3,0xd4)
+#endif
+#endif
+
+/*****************************************************************************
+ * CMPEG2VideoEncoderMFT coclass
+ */
+
+DEFINE_GUID(CLSID_CMPEG2VideoEncoderMFT, 0xe6335f02, 0x80b7, 0x4dc4, 0xad,0xfa, 0xdf,0xe7,0x21,0x0d,0x20,0xd5);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("e6335f02-80b7-4dc4-adfa-dfe7210d20d5") CMPEG2VideoEncoderMFT;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(CMPEG2VideoEncoderMFT, 0xe6335f02, 0x80b7, 0x4dc4, 0xad,0xfa, 0xdf,0xe7,0x21,0x0d,0x20,0xd5)
+#endif
+#endif
+
+/*****************************************************************************
+ * CMPEG2AudioEncoderMFT coclass
+ */
+
+DEFINE_GUID(CLSID_CMPEG2AudioEncoderMFT, 0x46a4dd5c, 0x73f8, 0x4304, 0x94,0xdf, 0x30,0x8f,0x76,0x09,0x74,0xf4);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("46a4dd5c-73f8-4304-94df-308f760974f4") CMPEG2AudioEncoderMFT;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(CMPEG2AudioEncoderMFT, 0x46a4dd5c, 0x73f8, 0x4304, 0x94,0xdf, 0x30,0x8f,0x76,0x09,0x74,0xf4)
+#endif
+#endif
+
+/*****************************************************************************
+ * CMSMPEGDecoderMFT coclass
+ */
+
+DEFINE_GUID(CLSID_CMSMPEGDecoderMFT, 0x2d709e52, 0x123f, 0x49b5, 0x9c,0xbc, 0x9a,0xf5,0xcd,0xe2,0x8f,0xb9);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("2d709e52-123f-49b5-9cbc-9af5cde28fb9") CMSMPEGDecoderMFT;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(CMSMPEGDecoderMFT, 0x2d709e52, 0x123f, 0x49b5, 0x9c,0xbc, 0x9a,0xf5,0xcd,0xe2,0x8f,0xb9)
+#endif
+#endif
+
+/*****************************************************************************
+ * CMSMPEGAudDecMFT coclass
+ */
+
+DEFINE_GUID(CLSID_CMSMPEGAudDecMFT, 0x70707b39, 0xb2ca, 0x4015, 0xab,0xea, 0xf8,0x44,0x7d,0x22,0xd8,0x8b);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("70707b39-b2ca-4015-abea-f8447d22d88b") CMSMPEGAudDecMFT;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(CMSMPEGAudDecMFT, 0x70707b39, 0xb2ca, 0x4015, 0xab,0xea, 0xf8,0x44,0x7d,0x22,0xd8,0x8b)
+#endif
+#endif
+
+/*****************************************************************************
+ * CMSDolbyDigitalEncMFT coclass
+ */
+
+DEFINE_GUID(CLSID_CMSDolbyDigitalEncMFT, 0xac3315c9, 0xf481, 0x45d7, 0x82,0x6c, 0x0b,0x40,0x6c,0x1f,0x64,0xb8);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("ac3315c9-f481-45d7-826c-0b406c1f64b8") CMSDolbyDigitalEncMFT;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(CMSDolbyDigitalEncMFT, 0xac3315c9, 0xf481, 0x45d7, 0x82,0x6c, 0x0b,0x40,0x6c,0x1f,0x64,0xb8)
+#endif
+#endif
+
+/*****************************************************************************
+ * MP3ACMCodecWrapper coclass
+ */
+
+DEFINE_GUID(CLSID_MP3ACMCodecWrapper, 0x11103421, 0x354c, 0x4cca, 0xa7,0xa3, 0x1a,0xff,0x9a,0x5b,0x67,0x01);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("11103421-354c-4cca-a7a3-1aff9a5b6701") MP3ACMCodecWrapper;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(MP3ACMCodecWrapper, 0x11103421, 0x354c, 0x4cca, 0xa7,0xa3, 0x1a,0xff,0x9a,0x5b,0x67,0x01)
+#endif
+#endif
+
+/*****************************************************************************
+ * CMSVideoDSPMFT coclass
+ */
+
+DEFINE_GUID(CLSID_CMSVideoDSPMFT, 0x51571744, 0x7fe4, 0x4ff2, 0xa4,0x98, 0x2d,0xc3,0x4f,0xf7,0x4f,0x1b);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("51571744-7fe4-4ff2-a498-2dc34ff74f1b") CMSVideoDSPMFT;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(CMSVideoDSPMFT, 0x51571744, 0x7fe4, 0x4ff2, 0xa4,0x98, 0x2d,0xc3,0x4f,0xf7,0x4f,0x1b)
+#endif
+#endif
+
 /* Begin additional prototypes for all interfaces */
 
 
diff --git a/x86_64-w64-mingw32/include/wmsdkidl.h b/x86_64-w64-mingw32/include/wmsdkidl.h
index 5ff3d9e..24952a6 100644
--- a/x86_64-w64-mingw32/include/wmsdkidl.h
+++ b/x86_64-w64-mingw32/include/wmsdkidl.h
@@ -72,6 +72,41 @@
 typedef interface IWMReader IWMReader;
 #endif
 
+#ifndef __IWMPlayerHook_FWD_DEFINED__
+#define __IWMPlayerHook_FWD_DEFINED__
+typedef interface IWMPlayerHook IWMPlayerHook;
+#endif
+
+#ifndef __IWMReaderAdvanced_FWD_DEFINED__
+#define __IWMReaderAdvanced_FWD_DEFINED__
+typedef interface IWMReaderAdvanced IWMReaderAdvanced;
+#endif
+
+#ifndef __IWMReaderAdvanced2_FWD_DEFINED__
+#define __IWMReaderAdvanced2_FWD_DEFINED__
+typedef interface IWMReaderAdvanced2 IWMReaderAdvanced2;
+#endif
+
+#ifndef __IWMReaderAdvanced3_FWD_DEFINED__
+#define __IWMReaderAdvanced3_FWD_DEFINED__
+typedef interface IWMReaderAdvanced3 IWMReaderAdvanced3;
+#endif
+
+#ifndef __IWMReaderAdvanced4_FWD_DEFINED__
+#define __IWMReaderAdvanced4_FWD_DEFINED__
+typedef interface IWMReaderAdvanced4 IWMReaderAdvanced4;
+#endif
+
+#ifndef __IWMReaderAdvanced5_FWD_DEFINED__
+#define __IWMReaderAdvanced5_FWD_DEFINED__
+typedef interface IWMReaderAdvanced5 IWMReaderAdvanced5;
+#endif
+
+#ifndef __IWMReaderAdvanced6_FWD_DEFINED__
+#define __IWMReaderAdvanced6_FWD_DEFINED__
+typedef interface IWMReaderAdvanced6 IWMReaderAdvanced6;
+#endif
+
 #ifndef __IWMSyncReader_FWD_DEFINED__
 #define __IWMSyncReader_FWD_DEFINED__
 typedef interface IWMSyncReader IWMSyncReader;
@@ -149,6 +184,25 @@
     DWORD dwTotalSampleDropsInCodec;
     DWORD dwTotalSampleDropsInMultiplexer;
 } WM_WRITER_STATISTICS_EX;
+typedef struct _WMReaderStatistics {
+    DWORD cbSize;
+    DWORD dwBandwidth;
+    DWORD cPacketsReceived;
+    DWORD cPacketsRecovered;
+    DWORD cPacketsLost;
+    WORD wQuality;
+} WM_READER_STATISTICS;
+typedef struct _WMReaderClientInfo {
+    DWORD cbSize;
+    WCHAR *wszLang;
+    WCHAR *wszBrowserUserAgent;
+    WCHAR *wszBrowserWebPage;
+    QWORD qwReserved;
+    LPARAM *pReserved;
+    WCHAR *wszHostExe;
+    QWORD qwHostVersion;
+    WCHAR *wszPlayerUserAgent;
+} WM_READER_CLIENTINFO;
 typedef enum WMT_ATTR_DATATYPE {
     WMT_TYPE_DWORD = 0,
     WMT_TYPE_STRING = 1,
@@ -224,6 +278,19 @@
     WMT_VER_8_0 = 0x80000,
     WMT_VER_9_0 = 0x90000
 } WMT_VERSION;
+typedef enum WMT_PLAY_MODE {
+    WMT_PLAY_MODE_AUTOSELECT = 0,
+    WMT_PLAY_MODE_LOCAL = 1,
+    WMT_PLAY_MODE_DOWNLOAD = 2,
+    WMT_PLAY_MODE_STREAMING = 3
+} WMT_PLAY_MODE;
+typedef enum tagWMT_OFFSET_FORMAT {
+    WMT_OFFSET_FORMAT_100NS = 0,
+    WMT_OFFSET_FORMAT_FRAME_NUMBERS = 1,
+    WMT_OFFSET_FORMAT_PLAYLIST_OFFSET = 2,
+    WMT_OFFSET_FORMAT_TIMECODE = 3,
+    WMT_OFFSET_FORMAT_100NS_APPROXIMATE = 4
+} WMT_OFFSET_FORMAT;
 typedef LPCWSTR LPCWSTR_WMSDK_TYPE_SAFE;
 /*****************************************************************************
  * IWMStatusCallback interface
@@ -2271,6 +2338,3201 @@
 #endif  /* __IWMReader_INTERFACE_DEFINED__ */
 
 /*****************************************************************************
+ * IWMPlayerHook interface
+ */
+#ifndef __IWMPlayerHook_INTERFACE_DEFINED__
+#define __IWMPlayerHook_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWMPlayerHook, 0xe5b7ca9a, 0x0f1c, 0x4f66, 0x90,0x02, 0x74,0xec,0x50,0xd8,0xb3,0x04);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("e5b7ca9a-0f1c-4f66-9002-74ec50d8b304")
+IWMPlayerHook : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE PreDecode(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IWMPlayerHook, 0xe5b7ca9a, 0x0f1c, 0x4f66, 0x90,0x02, 0x74,0xec,0x50,0xd8,0xb3,0x04)
+#endif
+#else
+typedef struct IWMPlayerHookVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWMPlayerHook* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWMPlayerHook* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWMPlayerHook* This);
+
+    /*** IWMPlayerHook methods ***/
+    HRESULT (STDMETHODCALLTYPE *PreDecode)(
+        IWMPlayerHook* This);
+
+    END_INTERFACE
+} IWMPlayerHookVtbl;
+interface IWMPlayerHook {
+    CONST_VTBL IWMPlayerHookVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IWMPlayerHook_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWMPlayerHook_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWMPlayerHook_Release(This) (This)->lpVtbl->Release(This)
+/*** IWMPlayerHook methods ***/
+#define IWMPlayerHook_PreDecode(This) (This)->lpVtbl->PreDecode(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IWMPlayerHook_QueryInterface(IWMPlayerHook* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IWMPlayerHook_AddRef(IWMPlayerHook* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IWMPlayerHook_Release(IWMPlayerHook* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IWMPlayerHook methods ***/
+static FORCEINLINE HRESULT IWMPlayerHook_PreDecode(IWMPlayerHook* This) {
+    return This->lpVtbl->PreDecode(This);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWMPlayerHook_PreDecode_Proxy(
+    IWMPlayerHook* This);
+void __RPC_STUB IWMPlayerHook_PreDecode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWMPlayerHook_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWMReaderAdvanced interface
+ */
+#ifndef __IWMReaderAdvanced_INTERFACE_DEFINED__
+#define __IWMReaderAdvanced_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWMReaderAdvanced, 0x96406bea, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("96406bea-2b2b-11d3-b36b-00c04f6108ff")
+IWMReaderAdvanced : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE SetUserProvidedClock(
+        WINBOOL fUserClock) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetUserProvidedClock(
+        WINBOOL *pfUserClock) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DeliverTime(
+        QWORD cnsTime) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetManualStreamSelection(
+        WINBOOL fSelection) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetManualStreamSelection(
+        WINBOOL *pfSelection) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetStreamsSelected(
+        WORD cStreamCount,
+        WORD *pwStreamNumbers,
+        WMT_STREAM_SELECTION *pSelections) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetStreamSelected(
+        WORD wStreamNum,
+        WMT_STREAM_SELECTION *pSelection) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetReceiveSelectionCallbacks(
+        WINBOOL fGetCallbacks) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetReceiveSelectionCallbacks(
+        WINBOOL *pfGetCallbacks) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetReceiveStreamSamples(
+        WORD wStreamNum,
+        WINBOOL fReceiveStreamSamples) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetReceiveStreamSamples(
+        WORD wStreamNum,
+        WINBOOL *pfReceiveStreamSamples) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetAllocateForOutput(
+        DWORD dwOutputNum,
+        WINBOOL fAllocate) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAllocateForOutput(
+        DWORD dwOutputNum,
+        WINBOOL *pfAllocate) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetAllocateForStream(
+        WORD wStreamNum,
+        WINBOOL fAllocate) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAllocateForStream(
+        WORD dwSreamNum,
+        WINBOOL *pfAllocate) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetStatistics(
+        WM_READER_STATISTICS *pStatistics) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetClientInfo(
+        WM_READER_CLIENTINFO *pClientInfo) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMaxOutputSampleSize(
+        DWORD dwOutput,
+        DWORD *pcbMax) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMaxStreamSampleSize(
+        WORD wStream,
+        DWORD *pcbMax) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE NotifyLateDelivery(
+        QWORD cnsLateness) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IWMReaderAdvanced, 0x96406bea, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff)
+#endif
+#else
+typedef struct IWMReaderAdvancedVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWMReaderAdvanced* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWMReaderAdvanced* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWMReaderAdvanced* This);
+
+    /*** IWMReaderAdvanced methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetUserProvidedClock)(
+        IWMReaderAdvanced* This,
+        WINBOOL fUserClock);
+
+    HRESULT (STDMETHODCALLTYPE *GetUserProvidedClock)(
+        IWMReaderAdvanced* This,
+        WINBOOL *pfUserClock);
+
+    HRESULT (STDMETHODCALLTYPE *DeliverTime)(
+        IWMReaderAdvanced* This,
+        QWORD cnsTime);
+
+    HRESULT (STDMETHODCALLTYPE *SetManualStreamSelection)(
+        IWMReaderAdvanced* This,
+        WINBOOL fSelection);
+
+    HRESULT (STDMETHODCALLTYPE *GetManualStreamSelection)(
+        IWMReaderAdvanced* This,
+        WINBOOL *pfSelection);
+
+    HRESULT (STDMETHODCALLTYPE *SetStreamsSelected)(
+        IWMReaderAdvanced* This,
+        WORD cStreamCount,
+        WORD *pwStreamNumbers,
+        WMT_STREAM_SELECTION *pSelections);
+
+    HRESULT (STDMETHODCALLTYPE *GetStreamSelected)(
+        IWMReaderAdvanced* This,
+        WORD wStreamNum,
+        WMT_STREAM_SELECTION *pSelection);
+
+    HRESULT (STDMETHODCALLTYPE *SetReceiveSelectionCallbacks)(
+        IWMReaderAdvanced* This,
+        WINBOOL fGetCallbacks);
+
+    HRESULT (STDMETHODCALLTYPE *GetReceiveSelectionCallbacks)(
+        IWMReaderAdvanced* This,
+        WINBOOL *pfGetCallbacks);
+
+    HRESULT (STDMETHODCALLTYPE *SetReceiveStreamSamples)(
+        IWMReaderAdvanced* This,
+        WORD wStreamNum,
+        WINBOOL fReceiveStreamSamples);
+
+    HRESULT (STDMETHODCALLTYPE *GetReceiveStreamSamples)(
+        IWMReaderAdvanced* This,
+        WORD wStreamNum,
+        WINBOOL *pfReceiveStreamSamples);
+
+    HRESULT (STDMETHODCALLTYPE *SetAllocateForOutput)(
+        IWMReaderAdvanced* This,
+        DWORD dwOutputNum,
+        WINBOOL fAllocate);
+
+    HRESULT (STDMETHODCALLTYPE *GetAllocateForOutput)(
+        IWMReaderAdvanced* This,
+        DWORD dwOutputNum,
+        WINBOOL *pfAllocate);
+
+    HRESULT (STDMETHODCALLTYPE *SetAllocateForStream)(
+        IWMReaderAdvanced* This,
+        WORD wStreamNum,
+        WINBOOL fAllocate);
+
+    HRESULT (STDMETHODCALLTYPE *GetAllocateForStream)(
+        IWMReaderAdvanced* This,
+        WORD dwSreamNum,
+        WINBOOL *pfAllocate);
+
+    HRESULT (STDMETHODCALLTYPE *GetStatistics)(
+        IWMReaderAdvanced* This,
+        WM_READER_STATISTICS *pStatistics);
+
+    HRESULT (STDMETHODCALLTYPE *SetClientInfo)(
+        IWMReaderAdvanced* This,
+        WM_READER_CLIENTINFO *pClientInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetMaxOutputSampleSize)(
+        IWMReaderAdvanced* This,
+        DWORD dwOutput,
+        DWORD *pcbMax);
+
+    HRESULT (STDMETHODCALLTYPE *GetMaxStreamSampleSize)(
+        IWMReaderAdvanced* This,
+        WORD wStream,
+        DWORD *pcbMax);
+
+    HRESULT (STDMETHODCALLTYPE *NotifyLateDelivery)(
+        IWMReaderAdvanced* This,
+        QWORD cnsLateness);
+
+    END_INTERFACE
+} IWMReaderAdvancedVtbl;
+interface IWMReaderAdvanced {
+    CONST_VTBL IWMReaderAdvancedVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IWMReaderAdvanced_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWMReaderAdvanced_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWMReaderAdvanced_Release(This) (This)->lpVtbl->Release(This)
+/*** IWMReaderAdvanced methods ***/
+#define IWMReaderAdvanced_SetUserProvidedClock(This,fUserClock) (This)->lpVtbl->SetUserProvidedClock(This,fUserClock)
+#define IWMReaderAdvanced_GetUserProvidedClock(This,pfUserClock) (This)->lpVtbl->GetUserProvidedClock(This,pfUserClock)
+#define IWMReaderAdvanced_DeliverTime(This,cnsTime) (This)->lpVtbl->DeliverTime(This,cnsTime)
+#define IWMReaderAdvanced_SetManualStreamSelection(This,fSelection) (This)->lpVtbl->SetManualStreamSelection(This,fSelection)
+#define IWMReaderAdvanced_GetManualStreamSelection(This,pfSelection) (This)->lpVtbl->GetManualStreamSelection(This,pfSelection)
+#define IWMReaderAdvanced_SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections) (This)->lpVtbl->SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections)
+#define IWMReaderAdvanced_GetStreamSelected(This,wStreamNum,pSelection) (This)->lpVtbl->GetStreamSelected(This,wStreamNum,pSelection)
+#define IWMReaderAdvanced_SetReceiveSelectionCallbacks(This,fGetCallbacks) (This)->lpVtbl->SetReceiveSelectionCallbacks(This,fGetCallbacks)
+#define IWMReaderAdvanced_GetReceiveSelectionCallbacks(This,pfGetCallbacks) (This)->lpVtbl->GetReceiveSelectionCallbacks(This,pfGetCallbacks)
+#define IWMReaderAdvanced_SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples) (This)->lpVtbl->SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples)
+#define IWMReaderAdvanced_GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples) (This)->lpVtbl->GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples)
+#define IWMReaderAdvanced_SetAllocateForOutput(This,dwOutputNum,fAllocate) (This)->lpVtbl->SetAllocateForOutput(This,dwOutputNum,fAllocate)
+#define IWMReaderAdvanced_GetAllocateForOutput(This,dwOutputNum,pfAllocate) (This)->lpVtbl->GetAllocateForOutput(This,dwOutputNum,pfAllocate)
+#define IWMReaderAdvanced_SetAllocateForStream(This,wStreamNum,fAllocate) (This)->lpVtbl->SetAllocateForStream(This,wStreamNum,fAllocate)
+#define IWMReaderAdvanced_GetAllocateForStream(This,dwSreamNum,pfAllocate) (This)->lpVtbl->GetAllocateForStream(This,dwSreamNum,pfAllocate)
+#define IWMReaderAdvanced_GetStatistics(This,pStatistics) (This)->lpVtbl->GetStatistics(This,pStatistics)
+#define IWMReaderAdvanced_SetClientInfo(This,pClientInfo) (This)->lpVtbl->SetClientInfo(This,pClientInfo)
+#define IWMReaderAdvanced_GetMaxOutputSampleSize(This,dwOutput,pcbMax) (This)->lpVtbl->GetMaxOutputSampleSize(This,dwOutput,pcbMax)
+#define IWMReaderAdvanced_GetMaxStreamSampleSize(This,wStream,pcbMax) (This)->lpVtbl->GetMaxStreamSampleSize(This,wStream,pcbMax)
+#define IWMReaderAdvanced_NotifyLateDelivery(This,cnsLateness) (This)->lpVtbl->NotifyLateDelivery(This,cnsLateness)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IWMReaderAdvanced_QueryInterface(IWMReaderAdvanced* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IWMReaderAdvanced_AddRef(IWMReaderAdvanced* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IWMReaderAdvanced_Release(IWMReaderAdvanced* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IWMReaderAdvanced methods ***/
+static FORCEINLINE HRESULT IWMReaderAdvanced_SetUserProvidedClock(IWMReaderAdvanced* This,WINBOOL fUserClock) {
+    return This->lpVtbl->SetUserProvidedClock(This,fUserClock);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced_GetUserProvidedClock(IWMReaderAdvanced* This,WINBOOL *pfUserClock) {
+    return This->lpVtbl->GetUserProvidedClock(This,pfUserClock);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced_DeliverTime(IWMReaderAdvanced* This,QWORD cnsTime) {
+    return This->lpVtbl->DeliverTime(This,cnsTime);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced_SetManualStreamSelection(IWMReaderAdvanced* This,WINBOOL fSelection) {
+    return This->lpVtbl->SetManualStreamSelection(This,fSelection);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced_GetManualStreamSelection(IWMReaderAdvanced* This,WINBOOL *pfSelection) {
+    return This->lpVtbl->GetManualStreamSelection(This,pfSelection);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced_SetStreamsSelected(IWMReaderAdvanced* This,WORD cStreamCount,WORD *pwStreamNumbers,WMT_STREAM_SELECTION *pSelections) {
+    return This->lpVtbl->SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced_GetStreamSelected(IWMReaderAdvanced* This,WORD wStreamNum,WMT_STREAM_SELECTION *pSelection) {
+    return This->lpVtbl->GetStreamSelected(This,wStreamNum,pSelection);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced_SetReceiveSelectionCallbacks(IWMReaderAdvanced* This,WINBOOL fGetCallbacks) {
+    return This->lpVtbl->SetReceiveSelectionCallbacks(This,fGetCallbacks);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced_GetReceiveSelectionCallbacks(IWMReaderAdvanced* This,WINBOOL *pfGetCallbacks) {
+    return This->lpVtbl->GetReceiveSelectionCallbacks(This,pfGetCallbacks);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced_SetReceiveStreamSamples(IWMReaderAdvanced* This,WORD wStreamNum,WINBOOL fReceiveStreamSamples) {
+    return This->lpVtbl->SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced_GetReceiveStreamSamples(IWMReaderAdvanced* This,WORD wStreamNum,WINBOOL *pfReceiveStreamSamples) {
+    return This->lpVtbl->GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced_SetAllocateForOutput(IWMReaderAdvanced* This,DWORD dwOutputNum,WINBOOL fAllocate) {
+    return This->lpVtbl->SetAllocateForOutput(This,dwOutputNum,fAllocate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced_GetAllocateForOutput(IWMReaderAdvanced* This,DWORD dwOutputNum,WINBOOL *pfAllocate) {
+    return This->lpVtbl->GetAllocateForOutput(This,dwOutputNum,pfAllocate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced_SetAllocateForStream(IWMReaderAdvanced* This,WORD wStreamNum,WINBOOL fAllocate) {
+    return This->lpVtbl->SetAllocateForStream(This,wStreamNum,fAllocate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced_GetAllocateForStream(IWMReaderAdvanced* This,WORD dwSreamNum,WINBOOL *pfAllocate) {
+    return This->lpVtbl->GetAllocateForStream(This,dwSreamNum,pfAllocate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced_GetStatistics(IWMReaderAdvanced* This,WM_READER_STATISTICS *pStatistics) {
+    return This->lpVtbl->GetStatistics(This,pStatistics);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced_SetClientInfo(IWMReaderAdvanced* This,WM_READER_CLIENTINFO *pClientInfo) {
+    return This->lpVtbl->SetClientInfo(This,pClientInfo);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced_GetMaxOutputSampleSize(IWMReaderAdvanced* This,DWORD dwOutput,DWORD *pcbMax) {
+    return This->lpVtbl->GetMaxOutputSampleSize(This,dwOutput,pcbMax);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced_GetMaxStreamSampleSize(IWMReaderAdvanced* This,WORD wStream,DWORD *pcbMax) {
+    return This->lpVtbl->GetMaxStreamSampleSize(This,wStream,pcbMax);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced_NotifyLateDelivery(IWMReaderAdvanced* This,QWORD cnsLateness) {
+    return This->lpVtbl->NotifyLateDelivery(This,cnsLateness);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_SetUserProvidedClock_Proxy(
+    IWMReaderAdvanced* This,
+    WINBOOL fUserClock);
+void __RPC_STUB IWMReaderAdvanced_SetUserProvidedClock_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_GetUserProvidedClock_Proxy(
+    IWMReaderAdvanced* This,
+    WINBOOL *pfUserClock);
+void __RPC_STUB IWMReaderAdvanced_GetUserProvidedClock_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_DeliverTime_Proxy(
+    IWMReaderAdvanced* This,
+    QWORD cnsTime);
+void __RPC_STUB IWMReaderAdvanced_DeliverTime_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_SetManualStreamSelection_Proxy(
+    IWMReaderAdvanced* This,
+    WINBOOL fSelection);
+void __RPC_STUB IWMReaderAdvanced_SetManualStreamSelection_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_GetManualStreamSelection_Proxy(
+    IWMReaderAdvanced* This,
+    WINBOOL *pfSelection);
+void __RPC_STUB IWMReaderAdvanced_GetManualStreamSelection_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_SetStreamsSelected_Proxy(
+    IWMReaderAdvanced* This,
+    WORD cStreamCount,
+    WORD *pwStreamNumbers,
+    WMT_STREAM_SELECTION *pSelections);
+void __RPC_STUB IWMReaderAdvanced_SetStreamsSelected_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_GetStreamSelected_Proxy(
+    IWMReaderAdvanced* This,
+    WORD wStreamNum,
+    WMT_STREAM_SELECTION *pSelection);
+void __RPC_STUB IWMReaderAdvanced_GetStreamSelected_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_SetReceiveSelectionCallbacks_Proxy(
+    IWMReaderAdvanced* This,
+    WINBOOL fGetCallbacks);
+void __RPC_STUB IWMReaderAdvanced_SetReceiveSelectionCallbacks_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_GetReceiveSelectionCallbacks_Proxy(
+    IWMReaderAdvanced* This,
+    WINBOOL *pfGetCallbacks);
+void __RPC_STUB IWMReaderAdvanced_GetReceiveSelectionCallbacks_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_SetReceiveStreamSamples_Proxy(
+    IWMReaderAdvanced* This,
+    WORD wStreamNum,
+    WINBOOL fReceiveStreamSamples);
+void __RPC_STUB IWMReaderAdvanced_SetReceiveStreamSamples_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_GetReceiveStreamSamples_Proxy(
+    IWMReaderAdvanced* This,
+    WORD wStreamNum,
+    WINBOOL *pfReceiveStreamSamples);
+void __RPC_STUB IWMReaderAdvanced_GetReceiveStreamSamples_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_SetAllocateForOutput_Proxy(
+    IWMReaderAdvanced* This,
+    DWORD dwOutputNum,
+    WINBOOL fAllocate);
+void __RPC_STUB IWMReaderAdvanced_SetAllocateForOutput_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_GetAllocateForOutput_Proxy(
+    IWMReaderAdvanced* This,
+    DWORD dwOutputNum,
+    WINBOOL *pfAllocate);
+void __RPC_STUB IWMReaderAdvanced_GetAllocateForOutput_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_SetAllocateForStream_Proxy(
+    IWMReaderAdvanced* This,
+    WORD wStreamNum,
+    WINBOOL fAllocate);
+void __RPC_STUB IWMReaderAdvanced_SetAllocateForStream_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_GetAllocateForStream_Proxy(
+    IWMReaderAdvanced* This,
+    WORD dwSreamNum,
+    WINBOOL *pfAllocate);
+void __RPC_STUB IWMReaderAdvanced_GetAllocateForStream_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_GetStatistics_Proxy(
+    IWMReaderAdvanced* This,
+    WM_READER_STATISTICS *pStatistics);
+void __RPC_STUB IWMReaderAdvanced_GetStatistics_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_SetClientInfo_Proxy(
+    IWMReaderAdvanced* This,
+    WM_READER_CLIENTINFO *pClientInfo);
+void __RPC_STUB IWMReaderAdvanced_SetClientInfo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_GetMaxOutputSampleSize_Proxy(
+    IWMReaderAdvanced* This,
+    DWORD dwOutput,
+    DWORD *pcbMax);
+void __RPC_STUB IWMReaderAdvanced_GetMaxOutputSampleSize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_GetMaxStreamSampleSize_Proxy(
+    IWMReaderAdvanced* This,
+    WORD wStream,
+    DWORD *pcbMax);
+void __RPC_STUB IWMReaderAdvanced_GetMaxStreamSampleSize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_NotifyLateDelivery_Proxy(
+    IWMReaderAdvanced* This,
+    QWORD cnsLateness);
+void __RPC_STUB IWMReaderAdvanced_NotifyLateDelivery_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWMReaderAdvanced_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWMReaderAdvanced2 interface
+ */
+#ifndef __IWMReaderAdvanced2_INTERFACE_DEFINED__
+#define __IWMReaderAdvanced2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWMReaderAdvanced2, 0xae14a945, 0xb90c, 0x4d0d, 0x91,0x27, 0x80,0xd6,0x65,0xf7,0xd7,0x3e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("ae14a945-b90c-4d0d-9127-80d665f7d73e")
+IWMReaderAdvanced2 : public IWMReaderAdvanced
+{
+    virtual HRESULT STDMETHODCALLTYPE SetPlayMode(
+        WMT_PLAY_MODE Mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPlayMode(
+        WMT_PLAY_MODE *pMode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBufferProgress(
+        DWORD *pdwPercent,
+        QWORD *pcnsBuffering) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDownloadProgress(
+        DWORD *pdwPercent,
+        QWORD *pqwBytesDownloaded,
+        QWORD *pcnsDownload) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSaveAsProgress(
+        DWORD *pdwPercent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SaveFileAs(
+        const WCHAR *pwszFilename) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetProtocolName(
+        WCHAR *pwszProtocol,
+        DWORD *pcchProtocol) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE StartAtMarker(
+        WORD wMarkerIndex,
+        QWORD cnsDuration,
+        float fRate,
+        void *pvContext) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetOutputSetting(
+        DWORD dwOutputNum,
+        LPCWSTR pszName,
+        WMT_ATTR_DATATYPE *pType,
+        BYTE *pValue,
+        WORD *pcbLength) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetOutputSetting(
+        DWORD dwOutputNum,
+        LPCWSTR pszName,
+        WMT_ATTR_DATATYPE Type,
+        const BYTE *pValue,
+        WORD cbLength) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Preroll(
+        QWORD cnsStart,
+        QWORD cnsDuration,
+        float fRate) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetLogClientID(
+        WINBOOL fLogClientID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLogClientID(
+        WINBOOL *pfLogClientID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE StopBuffering(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OpenStream(
+        IStream *pStream,
+        IWMReaderCallback *pCallback,
+        void *pvContext) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IWMReaderAdvanced2, 0xae14a945, 0xb90c, 0x4d0d, 0x91,0x27, 0x80,0xd6,0x65,0xf7,0xd7,0x3e)
+#endif
+#else
+typedef struct IWMReaderAdvanced2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWMReaderAdvanced2* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWMReaderAdvanced2* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWMReaderAdvanced2* This);
+
+    /*** IWMReaderAdvanced methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetUserProvidedClock)(
+        IWMReaderAdvanced2* This,
+        WINBOOL fUserClock);
+
+    HRESULT (STDMETHODCALLTYPE *GetUserProvidedClock)(
+        IWMReaderAdvanced2* This,
+        WINBOOL *pfUserClock);
+
+    HRESULT (STDMETHODCALLTYPE *DeliverTime)(
+        IWMReaderAdvanced2* This,
+        QWORD cnsTime);
+
+    HRESULT (STDMETHODCALLTYPE *SetManualStreamSelection)(
+        IWMReaderAdvanced2* This,
+        WINBOOL fSelection);
+
+    HRESULT (STDMETHODCALLTYPE *GetManualStreamSelection)(
+        IWMReaderAdvanced2* This,
+        WINBOOL *pfSelection);
+
+    HRESULT (STDMETHODCALLTYPE *SetStreamsSelected)(
+        IWMReaderAdvanced2* This,
+        WORD cStreamCount,
+        WORD *pwStreamNumbers,
+        WMT_STREAM_SELECTION *pSelections);
+
+    HRESULT (STDMETHODCALLTYPE *GetStreamSelected)(
+        IWMReaderAdvanced2* This,
+        WORD wStreamNum,
+        WMT_STREAM_SELECTION *pSelection);
+
+    HRESULT (STDMETHODCALLTYPE *SetReceiveSelectionCallbacks)(
+        IWMReaderAdvanced2* This,
+        WINBOOL fGetCallbacks);
+
+    HRESULT (STDMETHODCALLTYPE *GetReceiveSelectionCallbacks)(
+        IWMReaderAdvanced2* This,
+        WINBOOL *pfGetCallbacks);
+
+    HRESULT (STDMETHODCALLTYPE *SetReceiveStreamSamples)(
+        IWMReaderAdvanced2* This,
+        WORD wStreamNum,
+        WINBOOL fReceiveStreamSamples);
+
+    HRESULT (STDMETHODCALLTYPE *GetReceiveStreamSamples)(
+        IWMReaderAdvanced2* This,
+        WORD wStreamNum,
+        WINBOOL *pfReceiveStreamSamples);
+
+    HRESULT (STDMETHODCALLTYPE *SetAllocateForOutput)(
+        IWMReaderAdvanced2* This,
+        DWORD dwOutputNum,
+        WINBOOL fAllocate);
+
+    HRESULT (STDMETHODCALLTYPE *GetAllocateForOutput)(
+        IWMReaderAdvanced2* This,
+        DWORD dwOutputNum,
+        WINBOOL *pfAllocate);
+
+    HRESULT (STDMETHODCALLTYPE *SetAllocateForStream)(
+        IWMReaderAdvanced2* This,
+        WORD wStreamNum,
+        WINBOOL fAllocate);
+
+    HRESULT (STDMETHODCALLTYPE *GetAllocateForStream)(
+        IWMReaderAdvanced2* This,
+        WORD dwSreamNum,
+        WINBOOL *pfAllocate);
+
+    HRESULT (STDMETHODCALLTYPE *GetStatistics)(
+        IWMReaderAdvanced2* This,
+        WM_READER_STATISTICS *pStatistics);
+
+    HRESULT (STDMETHODCALLTYPE *SetClientInfo)(
+        IWMReaderAdvanced2* This,
+        WM_READER_CLIENTINFO *pClientInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetMaxOutputSampleSize)(
+        IWMReaderAdvanced2* This,
+        DWORD dwOutput,
+        DWORD *pcbMax);
+
+    HRESULT (STDMETHODCALLTYPE *GetMaxStreamSampleSize)(
+        IWMReaderAdvanced2* This,
+        WORD wStream,
+        DWORD *pcbMax);
+
+    HRESULT (STDMETHODCALLTYPE *NotifyLateDelivery)(
+        IWMReaderAdvanced2* This,
+        QWORD cnsLateness);
+
+    /*** IWMReaderAdvanced2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPlayMode)(
+        IWMReaderAdvanced2* This,
+        WMT_PLAY_MODE Mode);
+
+    HRESULT (STDMETHODCALLTYPE *GetPlayMode)(
+        IWMReaderAdvanced2* This,
+        WMT_PLAY_MODE *pMode);
+
+    HRESULT (STDMETHODCALLTYPE *GetBufferProgress)(
+        IWMReaderAdvanced2* This,
+        DWORD *pdwPercent,
+        QWORD *pcnsBuffering);
+
+    HRESULT (STDMETHODCALLTYPE *GetDownloadProgress)(
+        IWMReaderAdvanced2* This,
+        DWORD *pdwPercent,
+        QWORD *pqwBytesDownloaded,
+        QWORD *pcnsDownload);
+
+    HRESULT (STDMETHODCALLTYPE *GetSaveAsProgress)(
+        IWMReaderAdvanced2* This,
+        DWORD *pdwPercent);
+
+    HRESULT (STDMETHODCALLTYPE *SaveFileAs)(
+        IWMReaderAdvanced2* This,
+        const WCHAR *pwszFilename);
+
+    HRESULT (STDMETHODCALLTYPE *GetProtocolName)(
+        IWMReaderAdvanced2* This,
+        WCHAR *pwszProtocol,
+        DWORD *pcchProtocol);
+
+    HRESULT (STDMETHODCALLTYPE *StartAtMarker)(
+        IWMReaderAdvanced2* This,
+        WORD wMarkerIndex,
+        QWORD cnsDuration,
+        float fRate,
+        void *pvContext);
+
+    HRESULT (STDMETHODCALLTYPE *GetOutputSetting)(
+        IWMReaderAdvanced2* This,
+        DWORD dwOutputNum,
+        LPCWSTR pszName,
+        WMT_ATTR_DATATYPE *pType,
+        BYTE *pValue,
+        WORD *pcbLength);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputSetting)(
+        IWMReaderAdvanced2* This,
+        DWORD dwOutputNum,
+        LPCWSTR pszName,
+        WMT_ATTR_DATATYPE Type,
+        const BYTE *pValue,
+        WORD cbLength);
+
+    HRESULT (STDMETHODCALLTYPE *Preroll)(
+        IWMReaderAdvanced2* This,
+        QWORD cnsStart,
+        QWORD cnsDuration,
+        float fRate);
+
+    HRESULT (STDMETHODCALLTYPE *SetLogClientID)(
+        IWMReaderAdvanced2* This,
+        WINBOOL fLogClientID);
+
+    HRESULT (STDMETHODCALLTYPE *GetLogClientID)(
+        IWMReaderAdvanced2* This,
+        WINBOOL *pfLogClientID);
+
+    HRESULT (STDMETHODCALLTYPE *StopBuffering)(
+        IWMReaderAdvanced2* This);
+
+    HRESULT (STDMETHODCALLTYPE *OpenStream)(
+        IWMReaderAdvanced2* This,
+        IStream *pStream,
+        IWMReaderCallback *pCallback,
+        void *pvContext);
+
+    END_INTERFACE
+} IWMReaderAdvanced2Vtbl;
+interface IWMReaderAdvanced2 {
+    CONST_VTBL IWMReaderAdvanced2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IWMReaderAdvanced2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWMReaderAdvanced2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWMReaderAdvanced2_Release(This) (This)->lpVtbl->Release(This)
+/*** IWMReaderAdvanced methods ***/
+#define IWMReaderAdvanced2_SetUserProvidedClock(This,fUserClock) (This)->lpVtbl->SetUserProvidedClock(This,fUserClock)
+#define IWMReaderAdvanced2_GetUserProvidedClock(This,pfUserClock) (This)->lpVtbl->GetUserProvidedClock(This,pfUserClock)
+#define IWMReaderAdvanced2_DeliverTime(This,cnsTime) (This)->lpVtbl->DeliverTime(This,cnsTime)
+#define IWMReaderAdvanced2_SetManualStreamSelection(This,fSelection) (This)->lpVtbl->SetManualStreamSelection(This,fSelection)
+#define IWMReaderAdvanced2_GetManualStreamSelection(This,pfSelection) (This)->lpVtbl->GetManualStreamSelection(This,pfSelection)
+#define IWMReaderAdvanced2_SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections) (This)->lpVtbl->SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections)
+#define IWMReaderAdvanced2_GetStreamSelected(This,wStreamNum,pSelection) (This)->lpVtbl->GetStreamSelected(This,wStreamNum,pSelection)
+#define IWMReaderAdvanced2_SetReceiveSelectionCallbacks(This,fGetCallbacks) (This)->lpVtbl->SetReceiveSelectionCallbacks(This,fGetCallbacks)
+#define IWMReaderAdvanced2_GetReceiveSelectionCallbacks(This,pfGetCallbacks) (This)->lpVtbl->GetReceiveSelectionCallbacks(This,pfGetCallbacks)
+#define IWMReaderAdvanced2_SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples) (This)->lpVtbl->SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples)
+#define IWMReaderAdvanced2_GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples) (This)->lpVtbl->GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples)
+#define IWMReaderAdvanced2_SetAllocateForOutput(This,dwOutputNum,fAllocate) (This)->lpVtbl->SetAllocateForOutput(This,dwOutputNum,fAllocate)
+#define IWMReaderAdvanced2_GetAllocateForOutput(This,dwOutputNum,pfAllocate) (This)->lpVtbl->GetAllocateForOutput(This,dwOutputNum,pfAllocate)
+#define IWMReaderAdvanced2_SetAllocateForStream(This,wStreamNum,fAllocate) (This)->lpVtbl->SetAllocateForStream(This,wStreamNum,fAllocate)
+#define IWMReaderAdvanced2_GetAllocateForStream(This,dwSreamNum,pfAllocate) (This)->lpVtbl->GetAllocateForStream(This,dwSreamNum,pfAllocate)
+#define IWMReaderAdvanced2_GetStatistics(This,pStatistics) (This)->lpVtbl->GetStatistics(This,pStatistics)
+#define IWMReaderAdvanced2_SetClientInfo(This,pClientInfo) (This)->lpVtbl->SetClientInfo(This,pClientInfo)
+#define IWMReaderAdvanced2_GetMaxOutputSampleSize(This,dwOutput,pcbMax) (This)->lpVtbl->GetMaxOutputSampleSize(This,dwOutput,pcbMax)
+#define IWMReaderAdvanced2_GetMaxStreamSampleSize(This,wStream,pcbMax) (This)->lpVtbl->GetMaxStreamSampleSize(This,wStream,pcbMax)
+#define IWMReaderAdvanced2_NotifyLateDelivery(This,cnsLateness) (This)->lpVtbl->NotifyLateDelivery(This,cnsLateness)
+/*** IWMReaderAdvanced2 methods ***/
+#define IWMReaderAdvanced2_SetPlayMode(This,Mode) (This)->lpVtbl->SetPlayMode(This,Mode)
+#define IWMReaderAdvanced2_GetPlayMode(This,pMode) (This)->lpVtbl->GetPlayMode(This,pMode)
+#define IWMReaderAdvanced2_GetBufferProgress(This,pdwPercent,pcnsBuffering) (This)->lpVtbl->GetBufferProgress(This,pdwPercent,pcnsBuffering)
+#define IWMReaderAdvanced2_GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload) (This)->lpVtbl->GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload)
+#define IWMReaderAdvanced2_GetSaveAsProgress(This,pdwPercent) (This)->lpVtbl->GetSaveAsProgress(This,pdwPercent)
+#define IWMReaderAdvanced2_SaveFileAs(This,pwszFilename) (This)->lpVtbl->SaveFileAs(This,pwszFilename)
+#define IWMReaderAdvanced2_GetProtocolName(This,pwszProtocol,pcchProtocol) (This)->lpVtbl->GetProtocolName(This,pwszProtocol,pcchProtocol)
+#define IWMReaderAdvanced2_StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext) (This)->lpVtbl->StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext)
+#define IWMReaderAdvanced2_GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength) (This)->lpVtbl->GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength)
+#define IWMReaderAdvanced2_SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength) (This)->lpVtbl->SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength)
+#define IWMReaderAdvanced2_Preroll(This,cnsStart,cnsDuration,fRate) (This)->lpVtbl->Preroll(This,cnsStart,cnsDuration,fRate)
+#define IWMReaderAdvanced2_SetLogClientID(This,fLogClientID) (This)->lpVtbl->SetLogClientID(This,fLogClientID)
+#define IWMReaderAdvanced2_GetLogClientID(This,pfLogClientID) (This)->lpVtbl->GetLogClientID(This,pfLogClientID)
+#define IWMReaderAdvanced2_StopBuffering(This) (This)->lpVtbl->StopBuffering(This)
+#define IWMReaderAdvanced2_OpenStream(This,pStream,pCallback,pvContext) (This)->lpVtbl->OpenStream(This,pStream,pCallback,pvContext)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IWMReaderAdvanced2_QueryInterface(IWMReaderAdvanced2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IWMReaderAdvanced2_AddRef(IWMReaderAdvanced2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IWMReaderAdvanced2_Release(IWMReaderAdvanced2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IWMReaderAdvanced methods ***/
+static FORCEINLINE HRESULT IWMReaderAdvanced2_SetUserProvidedClock(IWMReaderAdvanced2* This,WINBOOL fUserClock) {
+    return This->lpVtbl->SetUserProvidedClock(This,fUserClock);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_GetUserProvidedClock(IWMReaderAdvanced2* This,WINBOOL *pfUserClock) {
+    return This->lpVtbl->GetUserProvidedClock(This,pfUserClock);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_DeliverTime(IWMReaderAdvanced2* This,QWORD cnsTime) {
+    return This->lpVtbl->DeliverTime(This,cnsTime);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_SetManualStreamSelection(IWMReaderAdvanced2* This,WINBOOL fSelection) {
+    return This->lpVtbl->SetManualStreamSelection(This,fSelection);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_GetManualStreamSelection(IWMReaderAdvanced2* This,WINBOOL *pfSelection) {
+    return This->lpVtbl->GetManualStreamSelection(This,pfSelection);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_SetStreamsSelected(IWMReaderAdvanced2* This,WORD cStreamCount,WORD *pwStreamNumbers,WMT_STREAM_SELECTION *pSelections) {
+    return This->lpVtbl->SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_GetStreamSelected(IWMReaderAdvanced2* This,WORD wStreamNum,WMT_STREAM_SELECTION *pSelection) {
+    return This->lpVtbl->GetStreamSelected(This,wStreamNum,pSelection);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_SetReceiveSelectionCallbacks(IWMReaderAdvanced2* This,WINBOOL fGetCallbacks) {
+    return This->lpVtbl->SetReceiveSelectionCallbacks(This,fGetCallbacks);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_GetReceiveSelectionCallbacks(IWMReaderAdvanced2* This,WINBOOL *pfGetCallbacks) {
+    return This->lpVtbl->GetReceiveSelectionCallbacks(This,pfGetCallbacks);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_SetReceiveStreamSamples(IWMReaderAdvanced2* This,WORD wStreamNum,WINBOOL fReceiveStreamSamples) {
+    return This->lpVtbl->SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_GetReceiveStreamSamples(IWMReaderAdvanced2* This,WORD wStreamNum,WINBOOL *pfReceiveStreamSamples) {
+    return This->lpVtbl->GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_SetAllocateForOutput(IWMReaderAdvanced2* This,DWORD dwOutputNum,WINBOOL fAllocate) {
+    return This->lpVtbl->SetAllocateForOutput(This,dwOutputNum,fAllocate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_GetAllocateForOutput(IWMReaderAdvanced2* This,DWORD dwOutputNum,WINBOOL *pfAllocate) {
+    return This->lpVtbl->GetAllocateForOutput(This,dwOutputNum,pfAllocate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_SetAllocateForStream(IWMReaderAdvanced2* This,WORD wStreamNum,WINBOOL fAllocate) {
+    return This->lpVtbl->SetAllocateForStream(This,wStreamNum,fAllocate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_GetAllocateForStream(IWMReaderAdvanced2* This,WORD dwSreamNum,WINBOOL *pfAllocate) {
+    return This->lpVtbl->GetAllocateForStream(This,dwSreamNum,pfAllocate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_GetStatistics(IWMReaderAdvanced2* This,WM_READER_STATISTICS *pStatistics) {
+    return This->lpVtbl->GetStatistics(This,pStatistics);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_SetClientInfo(IWMReaderAdvanced2* This,WM_READER_CLIENTINFO *pClientInfo) {
+    return This->lpVtbl->SetClientInfo(This,pClientInfo);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_GetMaxOutputSampleSize(IWMReaderAdvanced2* This,DWORD dwOutput,DWORD *pcbMax) {
+    return This->lpVtbl->GetMaxOutputSampleSize(This,dwOutput,pcbMax);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_GetMaxStreamSampleSize(IWMReaderAdvanced2* This,WORD wStream,DWORD *pcbMax) {
+    return This->lpVtbl->GetMaxStreamSampleSize(This,wStream,pcbMax);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_NotifyLateDelivery(IWMReaderAdvanced2* This,QWORD cnsLateness) {
+    return This->lpVtbl->NotifyLateDelivery(This,cnsLateness);
+}
+/*** IWMReaderAdvanced2 methods ***/
+static FORCEINLINE HRESULT IWMReaderAdvanced2_SetPlayMode(IWMReaderAdvanced2* This,WMT_PLAY_MODE Mode) {
+    return This->lpVtbl->SetPlayMode(This,Mode);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_GetPlayMode(IWMReaderAdvanced2* This,WMT_PLAY_MODE *pMode) {
+    return This->lpVtbl->GetPlayMode(This,pMode);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_GetBufferProgress(IWMReaderAdvanced2* This,DWORD *pdwPercent,QWORD *pcnsBuffering) {
+    return This->lpVtbl->GetBufferProgress(This,pdwPercent,pcnsBuffering);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_GetDownloadProgress(IWMReaderAdvanced2* This,DWORD *pdwPercent,QWORD *pqwBytesDownloaded,QWORD *pcnsDownload) {
+    return This->lpVtbl->GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_GetSaveAsProgress(IWMReaderAdvanced2* This,DWORD *pdwPercent) {
+    return This->lpVtbl->GetSaveAsProgress(This,pdwPercent);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_SaveFileAs(IWMReaderAdvanced2* This,const WCHAR *pwszFilename) {
+    return This->lpVtbl->SaveFileAs(This,pwszFilename);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_GetProtocolName(IWMReaderAdvanced2* This,WCHAR *pwszProtocol,DWORD *pcchProtocol) {
+    return This->lpVtbl->GetProtocolName(This,pwszProtocol,pcchProtocol);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_StartAtMarker(IWMReaderAdvanced2* This,WORD wMarkerIndex,QWORD cnsDuration,float fRate,void *pvContext) {
+    return This->lpVtbl->StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_GetOutputSetting(IWMReaderAdvanced2* This,DWORD dwOutputNum,LPCWSTR pszName,WMT_ATTR_DATATYPE *pType,BYTE *pValue,WORD *pcbLength) {
+    return This->lpVtbl->GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_SetOutputSetting(IWMReaderAdvanced2* This,DWORD dwOutputNum,LPCWSTR pszName,WMT_ATTR_DATATYPE Type,const BYTE *pValue,WORD cbLength) {
+    return This->lpVtbl->SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_Preroll(IWMReaderAdvanced2* This,QWORD cnsStart,QWORD cnsDuration,float fRate) {
+    return This->lpVtbl->Preroll(This,cnsStart,cnsDuration,fRate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_SetLogClientID(IWMReaderAdvanced2* This,WINBOOL fLogClientID) {
+    return This->lpVtbl->SetLogClientID(This,fLogClientID);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_GetLogClientID(IWMReaderAdvanced2* This,WINBOOL *pfLogClientID) {
+    return This->lpVtbl->GetLogClientID(This,pfLogClientID);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_StopBuffering(IWMReaderAdvanced2* This) {
+    return This->lpVtbl->StopBuffering(This);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced2_OpenStream(IWMReaderAdvanced2* This,IStream *pStream,IWMReaderCallback *pCallback,void *pvContext) {
+    return This->lpVtbl->OpenStream(This,pStream,pCallback,pvContext);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_SetPlayMode_Proxy(
+    IWMReaderAdvanced2* This,
+    WMT_PLAY_MODE Mode);
+void __RPC_STUB IWMReaderAdvanced2_SetPlayMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_GetPlayMode_Proxy(
+    IWMReaderAdvanced2* This,
+    WMT_PLAY_MODE *pMode);
+void __RPC_STUB IWMReaderAdvanced2_GetPlayMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_GetBufferProgress_Proxy(
+    IWMReaderAdvanced2* This,
+    DWORD *pdwPercent,
+    QWORD *pcnsBuffering);
+void __RPC_STUB IWMReaderAdvanced2_GetBufferProgress_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_GetDownloadProgress_Proxy(
+    IWMReaderAdvanced2* This,
+    DWORD *pdwPercent,
+    QWORD *pqwBytesDownloaded,
+    QWORD *pcnsDownload);
+void __RPC_STUB IWMReaderAdvanced2_GetDownloadProgress_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_GetSaveAsProgress_Proxy(
+    IWMReaderAdvanced2* This,
+    DWORD *pdwPercent);
+void __RPC_STUB IWMReaderAdvanced2_GetSaveAsProgress_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_SaveFileAs_Proxy(
+    IWMReaderAdvanced2* This,
+    const WCHAR *pwszFilename);
+void __RPC_STUB IWMReaderAdvanced2_SaveFileAs_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_GetProtocolName_Proxy(
+    IWMReaderAdvanced2* This,
+    WCHAR *pwszProtocol,
+    DWORD *pcchProtocol);
+void __RPC_STUB IWMReaderAdvanced2_GetProtocolName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_StartAtMarker_Proxy(
+    IWMReaderAdvanced2* This,
+    WORD wMarkerIndex,
+    QWORD cnsDuration,
+    float fRate,
+    void *pvContext);
+void __RPC_STUB IWMReaderAdvanced2_StartAtMarker_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_GetOutputSetting_Proxy(
+    IWMReaderAdvanced2* This,
+    DWORD dwOutputNum,
+    LPCWSTR pszName,
+    WMT_ATTR_DATATYPE *pType,
+    BYTE *pValue,
+    WORD *pcbLength);
+void __RPC_STUB IWMReaderAdvanced2_GetOutputSetting_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_SetOutputSetting_Proxy(
+    IWMReaderAdvanced2* This,
+    DWORD dwOutputNum,
+    LPCWSTR pszName,
+    WMT_ATTR_DATATYPE Type,
+    const BYTE *pValue,
+    WORD cbLength);
+void __RPC_STUB IWMReaderAdvanced2_SetOutputSetting_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_Preroll_Proxy(
+    IWMReaderAdvanced2* This,
+    QWORD cnsStart,
+    QWORD cnsDuration,
+    float fRate);
+void __RPC_STUB IWMReaderAdvanced2_Preroll_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_SetLogClientID_Proxy(
+    IWMReaderAdvanced2* This,
+    WINBOOL fLogClientID);
+void __RPC_STUB IWMReaderAdvanced2_SetLogClientID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_GetLogClientID_Proxy(
+    IWMReaderAdvanced2* This,
+    WINBOOL *pfLogClientID);
+void __RPC_STUB IWMReaderAdvanced2_GetLogClientID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_StopBuffering_Proxy(
+    IWMReaderAdvanced2* This);
+void __RPC_STUB IWMReaderAdvanced2_StopBuffering_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_OpenStream_Proxy(
+    IWMReaderAdvanced2* This,
+    IStream *pStream,
+    IWMReaderCallback *pCallback,
+    void *pvContext);
+void __RPC_STUB IWMReaderAdvanced2_OpenStream_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWMReaderAdvanced2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWMReaderAdvanced3 interface
+ */
+#ifndef __IWMReaderAdvanced3_INTERFACE_DEFINED__
+#define __IWMReaderAdvanced3_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWMReaderAdvanced3, 0x5dc0674b, 0xf04b, 0x4a4e, 0x9f,0x2a, 0xb1,0xaf,0xde,0x2c,0x81,0x00);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("5dc0674b-f04b-4a4e-9f2a-b1afde2c8100")
+IWMReaderAdvanced3 : public IWMReaderAdvanced2
+{
+    virtual HRESULT STDMETHODCALLTYPE StopNetStreaming(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE StartAtPosition(
+        WORD wStreamNum,
+        void *pvOffsetStart,
+        void *pvDuration,
+        WMT_OFFSET_FORMAT dwOffsetFormat,
+        float fRate,
+        void *pvContext) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IWMReaderAdvanced3, 0x5dc0674b, 0xf04b, 0x4a4e, 0x9f,0x2a, 0xb1,0xaf,0xde,0x2c,0x81,0x00)
+#endif
+#else
+typedef struct IWMReaderAdvanced3Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWMReaderAdvanced3* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWMReaderAdvanced3* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWMReaderAdvanced3* This);
+
+    /*** IWMReaderAdvanced methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetUserProvidedClock)(
+        IWMReaderAdvanced3* This,
+        WINBOOL fUserClock);
+
+    HRESULT (STDMETHODCALLTYPE *GetUserProvidedClock)(
+        IWMReaderAdvanced3* This,
+        WINBOOL *pfUserClock);
+
+    HRESULT (STDMETHODCALLTYPE *DeliverTime)(
+        IWMReaderAdvanced3* This,
+        QWORD cnsTime);
+
+    HRESULT (STDMETHODCALLTYPE *SetManualStreamSelection)(
+        IWMReaderAdvanced3* This,
+        WINBOOL fSelection);
+
+    HRESULT (STDMETHODCALLTYPE *GetManualStreamSelection)(
+        IWMReaderAdvanced3* This,
+        WINBOOL *pfSelection);
+
+    HRESULT (STDMETHODCALLTYPE *SetStreamsSelected)(
+        IWMReaderAdvanced3* This,
+        WORD cStreamCount,
+        WORD *pwStreamNumbers,
+        WMT_STREAM_SELECTION *pSelections);
+
+    HRESULT (STDMETHODCALLTYPE *GetStreamSelected)(
+        IWMReaderAdvanced3* This,
+        WORD wStreamNum,
+        WMT_STREAM_SELECTION *pSelection);
+
+    HRESULT (STDMETHODCALLTYPE *SetReceiveSelectionCallbacks)(
+        IWMReaderAdvanced3* This,
+        WINBOOL fGetCallbacks);
+
+    HRESULT (STDMETHODCALLTYPE *GetReceiveSelectionCallbacks)(
+        IWMReaderAdvanced3* This,
+        WINBOOL *pfGetCallbacks);
+
+    HRESULT (STDMETHODCALLTYPE *SetReceiveStreamSamples)(
+        IWMReaderAdvanced3* This,
+        WORD wStreamNum,
+        WINBOOL fReceiveStreamSamples);
+
+    HRESULT (STDMETHODCALLTYPE *GetReceiveStreamSamples)(
+        IWMReaderAdvanced3* This,
+        WORD wStreamNum,
+        WINBOOL *pfReceiveStreamSamples);
+
+    HRESULT (STDMETHODCALLTYPE *SetAllocateForOutput)(
+        IWMReaderAdvanced3* This,
+        DWORD dwOutputNum,
+        WINBOOL fAllocate);
+
+    HRESULT (STDMETHODCALLTYPE *GetAllocateForOutput)(
+        IWMReaderAdvanced3* This,
+        DWORD dwOutputNum,
+        WINBOOL *pfAllocate);
+
+    HRESULT (STDMETHODCALLTYPE *SetAllocateForStream)(
+        IWMReaderAdvanced3* This,
+        WORD wStreamNum,
+        WINBOOL fAllocate);
+
+    HRESULT (STDMETHODCALLTYPE *GetAllocateForStream)(
+        IWMReaderAdvanced3* This,
+        WORD dwSreamNum,
+        WINBOOL *pfAllocate);
+
+    HRESULT (STDMETHODCALLTYPE *GetStatistics)(
+        IWMReaderAdvanced3* This,
+        WM_READER_STATISTICS *pStatistics);
+
+    HRESULT (STDMETHODCALLTYPE *SetClientInfo)(
+        IWMReaderAdvanced3* This,
+        WM_READER_CLIENTINFO *pClientInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetMaxOutputSampleSize)(
+        IWMReaderAdvanced3* This,
+        DWORD dwOutput,
+        DWORD *pcbMax);
+
+    HRESULT (STDMETHODCALLTYPE *GetMaxStreamSampleSize)(
+        IWMReaderAdvanced3* This,
+        WORD wStream,
+        DWORD *pcbMax);
+
+    HRESULT (STDMETHODCALLTYPE *NotifyLateDelivery)(
+        IWMReaderAdvanced3* This,
+        QWORD cnsLateness);
+
+    /*** IWMReaderAdvanced2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPlayMode)(
+        IWMReaderAdvanced3* This,
+        WMT_PLAY_MODE Mode);
+
+    HRESULT (STDMETHODCALLTYPE *GetPlayMode)(
+        IWMReaderAdvanced3* This,
+        WMT_PLAY_MODE *pMode);
+
+    HRESULT (STDMETHODCALLTYPE *GetBufferProgress)(
+        IWMReaderAdvanced3* This,
+        DWORD *pdwPercent,
+        QWORD *pcnsBuffering);
+
+    HRESULT (STDMETHODCALLTYPE *GetDownloadProgress)(
+        IWMReaderAdvanced3* This,
+        DWORD *pdwPercent,
+        QWORD *pqwBytesDownloaded,
+        QWORD *pcnsDownload);
+
+    HRESULT (STDMETHODCALLTYPE *GetSaveAsProgress)(
+        IWMReaderAdvanced3* This,
+        DWORD *pdwPercent);
+
+    HRESULT (STDMETHODCALLTYPE *SaveFileAs)(
+        IWMReaderAdvanced3* This,
+        const WCHAR *pwszFilename);
+
+    HRESULT (STDMETHODCALLTYPE *GetProtocolName)(
+        IWMReaderAdvanced3* This,
+        WCHAR *pwszProtocol,
+        DWORD *pcchProtocol);
+
+    HRESULT (STDMETHODCALLTYPE *StartAtMarker)(
+        IWMReaderAdvanced3* This,
+        WORD wMarkerIndex,
+        QWORD cnsDuration,
+        float fRate,
+        void *pvContext);
+
+    HRESULT (STDMETHODCALLTYPE *GetOutputSetting)(
+        IWMReaderAdvanced3* This,
+        DWORD dwOutputNum,
+        LPCWSTR pszName,
+        WMT_ATTR_DATATYPE *pType,
+        BYTE *pValue,
+        WORD *pcbLength);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputSetting)(
+        IWMReaderAdvanced3* This,
+        DWORD dwOutputNum,
+        LPCWSTR pszName,
+        WMT_ATTR_DATATYPE Type,
+        const BYTE *pValue,
+        WORD cbLength);
+
+    HRESULT (STDMETHODCALLTYPE *Preroll)(
+        IWMReaderAdvanced3* This,
+        QWORD cnsStart,
+        QWORD cnsDuration,
+        float fRate);
+
+    HRESULT (STDMETHODCALLTYPE *SetLogClientID)(
+        IWMReaderAdvanced3* This,
+        WINBOOL fLogClientID);
+
+    HRESULT (STDMETHODCALLTYPE *GetLogClientID)(
+        IWMReaderAdvanced3* This,
+        WINBOOL *pfLogClientID);
+
+    HRESULT (STDMETHODCALLTYPE *StopBuffering)(
+        IWMReaderAdvanced3* This);
+
+    HRESULT (STDMETHODCALLTYPE *OpenStream)(
+        IWMReaderAdvanced3* This,
+        IStream *pStream,
+        IWMReaderCallback *pCallback,
+        void *pvContext);
+
+    /*** IWMReaderAdvanced3 methods ***/
+    HRESULT (STDMETHODCALLTYPE *StopNetStreaming)(
+        IWMReaderAdvanced3* This);
+
+    HRESULT (STDMETHODCALLTYPE *StartAtPosition)(
+        IWMReaderAdvanced3* This,
+        WORD wStreamNum,
+        void *pvOffsetStart,
+        void *pvDuration,
+        WMT_OFFSET_FORMAT dwOffsetFormat,
+        float fRate,
+        void *pvContext);
+
+    END_INTERFACE
+} IWMReaderAdvanced3Vtbl;
+interface IWMReaderAdvanced3 {
+    CONST_VTBL IWMReaderAdvanced3Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IWMReaderAdvanced3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWMReaderAdvanced3_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWMReaderAdvanced3_Release(This) (This)->lpVtbl->Release(This)
+/*** IWMReaderAdvanced methods ***/
+#define IWMReaderAdvanced3_SetUserProvidedClock(This,fUserClock) (This)->lpVtbl->SetUserProvidedClock(This,fUserClock)
+#define IWMReaderAdvanced3_GetUserProvidedClock(This,pfUserClock) (This)->lpVtbl->GetUserProvidedClock(This,pfUserClock)
+#define IWMReaderAdvanced3_DeliverTime(This,cnsTime) (This)->lpVtbl->DeliverTime(This,cnsTime)
+#define IWMReaderAdvanced3_SetManualStreamSelection(This,fSelection) (This)->lpVtbl->SetManualStreamSelection(This,fSelection)
+#define IWMReaderAdvanced3_GetManualStreamSelection(This,pfSelection) (This)->lpVtbl->GetManualStreamSelection(This,pfSelection)
+#define IWMReaderAdvanced3_SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections) (This)->lpVtbl->SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections)
+#define IWMReaderAdvanced3_GetStreamSelected(This,wStreamNum,pSelection) (This)->lpVtbl->GetStreamSelected(This,wStreamNum,pSelection)
+#define IWMReaderAdvanced3_SetReceiveSelectionCallbacks(This,fGetCallbacks) (This)->lpVtbl->SetReceiveSelectionCallbacks(This,fGetCallbacks)
+#define IWMReaderAdvanced3_GetReceiveSelectionCallbacks(This,pfGetCallbacks) (This)->lpVtbl->GetReceiveSelectionCallbacks(This,pfGetCallbacks)
+#define IWMReaderAdvanced3_SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples) (This)->lpVtbl->SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples)
+#define IWMReaderAdvanced3_GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples) (This)->lpVtbl->GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples)
+#define IWMReaderAdvanced3_SetAllocateForOutput(This,dwOutputNum,fAllocate) (This)->lpVtbl->SetAllocateForOutput(This,dwOutputNum,fAllocate)
+#define IWMReaderAdvanced3_GetAllocateForOutput(This,dwOutputNum,pfAllocate) (This)->lpVtbl->GetAllocateForOutput(This,dwOutputNum,pfAllocate)
+#define IWMReaderAdvanced3_SetAllocateForStream(This,wStreamNum,fAllocate) (This)->lpVtbl->SetAllocateForStream(This,wStreamNum,fAllocate)
+#define IWMReaderAdvanced3_GetAllocateForStream(This,dwSreamNum,pfAllocate) (This)->lpVtbl->GetAllocateForStream(This,dwSreamNum,pfAllocate)
+#define IWMReaderAdvanced3_GetStatistics(This,pStatistics) (This)->lpVtbl->GetStatistics(This,pStatistics)
+#define IWMReaderAdvanced3_SetClientInfo(This,pClientInfo) (This)->lpVtbl->SetClientInfo(This,pClientInfo)
+#define IWMReaderAdvanced3_GetMaxOutputSampleSize(This,dwOutput,pcbMax) (This)->lpVtbl->GetMaxOutputSampleSize(This,dwOutput,pcbMax)
+#define IWMReaderAdvanced3_GetMaxStreamSampleSize(This,wStream,pcbMax) (This)->lpVtbl->GetMaxStreamSampleSize(This,wStream,pcbMax)
+#define IWMReaderAdvanced3_NotifyLateDelivery(This,cnsLateness) (This)->lpVtbl->NotifyLateDelivery(This,cnsLateness)
+/*** IWMReaderAdvanced2 methods ***/
+#define IWMReaderAdvanced3_SetPlayMode(This,Mode) (This)->lpVtbl->SetPlayMode(This,Mode)
+#define IWMReaderAdvanced3_GetPlayMode(This,pMode) (This)->lpVtbl->GetPlayMode(This,pMode)
+#define IWMReaderAdvanced3_GetBufferProgress(This,pdwPercent,pcnsBuffering) (This)->lpVtbl->GetBufferProgress(This,pdwPercent,pcnsBuffering)
+#define IWMReaderAdvanced3_GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload) (This)->lpVtbl->GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload)
+#define IWMReaderAdvanced3_GetSaveAsProgress(This,pdwPercent) (This)->lpVtbl->GetSaveAsProgress(This,pdwPercent)
+#define IWMReaderAdvanced3_SaveFileAs(This,pwszFilename) (This)->lpVtbl->SaveFileAs(This,pwszFilename)
+#define IWMReaderAdvanced3_GetProtocolName(This,pwszProtocol,pcchProtocol) (This)->lpVtbl->GetProtocolName(This,pwszProtocol,pcchProtocol)
+#define IWMReaderAdvanced3_StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext) (This)->lpVtbl->StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext)
+#define IWMReaderAdvanced3_GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength) (This)->lpVtbl->GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength)
+#define IWMReaderAdvanced3_SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength) (This)->lpVtbl->SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength)
+#define IWMReaderAdvanced3_Preroll(This,cnsStart,cnsDuration,fRate) (This)->lpVtbl->Preroll(This,cnsStart,cnsDuration,fRate)
+#define IWMReaderAdvanced3_SetLogClientID(This,fLogClientID) (This)->lpVtbl->SetLogClientID(This,fLogClientID)
+#define IWMReaderAdvanced3_GetLogClientID(This,pfLogClientID) (This)->lpVtbl->GetLogClientID(This,pfLogClientID)
+#define IWMReaderAdvanced3_StopBuffering(This) (This)->lpVtbl->StopBuffering(This)
+#define IWMReaderAdvanced3_OpenStream(This,pStream,pCallback,pvContext) (This)->lpVtbl->OpenStream(This,pStream,pCallback,pvContext)
+/*** IWMReaderAdvanced3 methods ***/
+#define IWMReaderAdvanced3_StopNetStreaming(This) (This)->lpVtbl->StopNetStreaming(This)
+#define IWMReaderAdvanced3_StartAtPosition(This,wStreamNum,pvOffsetStart,pvDuration,dwOffsetFormat,fRate,pvContext) (This)->lpVtbl->StartAtPosition(This,wStreamNum,pvOffsetStart,pvDuration,dwOffsetFormat,fRate,pvContext)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IWMReaderAdvanced3_QueryInterface(IWMReaderAdvanced3* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IWMReaderAdvanced3_AddRef(IWMReaderAdvanced3* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IWMReaderAdvanced3_Release(IWMReaderAdvanced3* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IWMReaderAdvanced methods ***/
+static FORCEINLINE HRESULT IWMReaderAdvanced3_SetUserProvidedClock(IWMReaderAdvanced3* This,WINBOOL fUserClock) {
+    return This->lpVtbl->SetUserProvidedClock(This,fUserClock);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_GetUserProvidedClock(IWMReaderAdvanced3* This,WINBOOL *pfUserClock) {
+    return This->lpVtbl->GetUserProvidedClock(This,pfUserClock);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_DeliverTime(IWMReaderAdvanced3* This,QWORD cnsTime) {
+    return This->lpVtbl->DeliverTime(This,cnsTime);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_SetManualStreamSelection(IWMReaderAdvanced3* This,WINBOOL fSelection) {
+    return This->lpVtbl->SetManualStreamSelection(This,fSelection);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_GetManualStreamSelection(IWMReaderAdvanced3* This,WINBOOL *pfSelection) {
+    return This->lpVtbl->GetManualStreamSelection(This,pfSelection);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_SetStreamsSelected(IWMReaderAdvanced3* This,WORD cStreamCount,WORD *pwStreamNumbers,WMT_STREAM_SELECTION *pSelections) {
+    return This->lpVtbl->SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_GetStreamSelected(IWMReaderAdvanced3* This,WORD wStreamNum,WMT_STREAM_SELECTION *pSelection) {
+    return This->lpVtbl->GetStreamSelected(This,wStreamNum,pSelection);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_SetReceiveSelectionCallbacks(IWMReaderAdvanced3* This,WINBOOL fGetCallbacks) {
+    return This->lpVtbl->SetReceiveSelectionCallbacks(This,fGetCallbacks);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_GetReceiveSelectionCallbacks(IWMReaderAdvanced3* This,WINBOOL *pfGetCallbacks) {
+    return This->lpVtbl->GetReceiveSelectionCallbacks(This,pfGetCallbacks);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_SetReceiveStreamSamples(IWMReaderAdvanced3* This,WORD wStreamNum,WINBOOL fReceiveStreamSamples) {
+    return This->lpVtbl->SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_GetReceiveStreamSamples(IWMReaderAdvanced3* This,WORD wStreamNum,WINBOOL *pfReceiveStreamSamples) {
+    return This->lpVtbl->GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_SetAllocateForOutput(IWMReaderAdvanced3* This,DWORD dwOutputNum,WINBOOL fAllocate) {
+    return This->lpVtbl->SetAllocateForOutput(This,dwOutputNum,fAllocate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_GetAllocateForOutput(IWMReaderAdvanced3* This,DWORD dwOutputNum,WINBOOL *pfAllocate) {
+    return This->lpVtbl->GetAllocateForOutput(This,dwOutputNum,pfAllocate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_SetAllocateForStream(IWMReaderAdvanced3* This,WORD wStreamNum,WINBOOL fAllocate) {
+    return This->lpVtbl->SetAllocateForStream(This,wStreamNum,fAllocate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_GetAllocateForStream(IWMReaderAdvanced3* This,WORD dwSreamNum,WINBOOL *pfAllocate) {
+    return This->lpVtbl->GetAllocateForStream(This,dwSreamNum,pfAllocate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_GetStatistics(IWMReaderAdvanced3* This,WM_READER_STATISTICS *pStatistics) {
+    return This->lpVtbl->GetStatistics(This,pStatistics);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_SetClientInfo(IWMReaderAdvanced3* This,WM_READER_CLIENTINFO *pClientInfo) {
+    return This->lpVtbl->SetClientInfo(This,pClientInfo);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_GetMaxOutputSampleSize(IWMReaderAdvanced3* This,DWORD dwOutput,DWORD *pcbMax) {
+    return This->lpVtbl->GetMaxOutputSampleSize(This,dwOutput,pcbMax);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_GetMaxStreamSampleSize(IWMReaderAdvanced3* This,WORD wStream,DWORD *pcbMax) {
+    return This->lpVtbl->GetMaxStreamSampleSize(This,wStream,pcbMax);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_NotifyLateDelivery(IWMReaderAdvanced3* This,QWORD cnsLateness) {
+    return This->lpVtbl->NotifyLateDelivery(This,cnsLateness);
+}
+/*** IWMReaderAdvanced2 methods ***/
+static FORCEINLINE HRESULT IWMReaderAdvanced3_SetPlayMode(IWMReaderAdvanced3* This,WMT_PLAY_MODE Mode) {
+    return This->lpVtbl->SetPlayMode(This,Mode);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_GetPlayMode(IWMReaderAdvanced3* This,WMT_PLAY_MODE *pMode) {
+    return This->lpVtbl->GetPlayMode(This,pMode);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_GetBufferProgress(IWMReaderAdvanced3* This,DWORD *pdwPercent,QWORD *pcnsBuffering) {
+    return This->lpVtbl->GetBufferProgress(This,pdwPercent,pcnsBuffering);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_GetDownloadProgress(IWMReaderAdvanced3* This,DWORD *pdwPercent,QWORD *pqwBytesDownloaded,QWORD *pcnsDownload) {
+    return This->lpVtbl->GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_GetSaveAsProgress(IWMReaderAdvanced3* This,DWORD *pdwPercent) {
+    return This->lpVtbl->GetSaveAsProgress(This,pdwPercent);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_SaveFileAs(IWMReaderAdvanced3* This,const WCHAR *pwszFilename) {
+    return This->lpVtbl->SaveFileAs(This,pwszFilename);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_GetProtocolName(IWMReaderAdvanced3* This,WCHAR *pwszProtocol,DWORD *pcchProtocol) {
+    return This->lpVtbl->GetProtocolName(This,pwszProtocol,pcchProtocol);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_StartAtMarker(IWMReaderAdvanced3* This,WORD wMarkerIndex,QWORD cnsDuration,float fRate,void *pvContext) {
+    return This->lpVtbl->StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_GetOutputSetting(IWMReaderAdvanced3* This,DWORD dwOutputNum,LPCWSTR pszName,WMT_ATTR_DATATYPE *pType,BYTE *pValue,WORD *pcbLength) {
+    return This->lpVtbl->GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_SetOutputSetting(IWMReaderAdvanced3* This,DWORD dwOutputNum,LPCWSTR pszName,WMT_ATTR_DATATYPE Type,const BYTE *pValue,WORD cbLength) {
+    return This->lpVtbl->SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_Preroll(IWMReaderAdvanced3* This,QWORD cnsStart,QWORD cnsDuration,float fRate) {
+    return This->lpVtbl->Preroll(This,cnsStart,cnsDuration,fRate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_SetLogClientID(IWMReaderAdvanced3* This,WINBOOL fLogClientID) {
+    return This->lpVtbl->SetLogClientID(This,fLogClientID);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_GetLogClientID(IWMReaderAdvanced3* This,WINBOOL *pfLogClientID) {
+    return This->lpVtbl->GetLogClientID(This,pfLogClientID);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_StopBuffering(IWMReaderAdvanced3* This) {
+    return This->lpVtbl->StopBuffering(This);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_OpenStream(IWMReaderAdvanced3* This,IStream *pStream,IWMReaderCallback *pCallback,void *pvContext) {
+    return This->lpVtbl->OpenStream(This,pStream,pCallback,pvContext);
+}
+/*** IWMReaderAdvanced3 methods ***/
+static FORCEINLINE HRESULT IWMReaderAdvanced3_StopNetStreaming(IWMReaderAdvanced3* This) {
+    return This->lpVtbl->StopNetStreaming(This);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced3_StartAtPosition(IWMReaderAdvanced3* This,WORD wStreamNum,void *pvOffsetStart,void *pvDuration,WMT_OFFSET_FORMAT dwOffsetFormat,float fRate,void *pvContext) {
+    return This->lpVtbl->StartAtPosition(This,wStreamNum,pvOffsetStart,pvDuration,dwOffsetFormat,fRate,pvContext);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced3_StopNetStreaming_Proxy(
+    IWMReaderAdvanced3* This);
+void __RPC_STUB IWMReaderAdvanced3_StopNetStreaming_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced3_StartAtPosition_Proxy(
+    IWMReaderAdvanced3* This,
+    WORD wStreamNum,
+    void *pvOffsetStart,
+    void *pvDuration,
+    WMT_OFFSET_FORMAT dwOffsetFormat,
+    float fRate,
+    void *pvContext);
+void __RPC_STUB IWMReaderAdvanced3_StartAtPosition_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWMReaderAdvanced3_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWMReaderAdvanced4 interface
+ */
+#ifndef __IWMReaderAdvanced4_INTERFACE_DEFINED__
+#define __IWMReaderAdvanced4_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWMReaderAdvanced4, 0x945a76a2, 0x12ae, 0x4d48, 0xbd,0x3c, 0xcd,0x1d,0x90,0x39,0x9b,0x85);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("945a76a2-12ae-4d48-bd3c-cd1d90399b85")
+IWMReaderAdvanced4 : public IWMReaderAdvanced3
+{
+    virtual HRESULT STDMETHODCALLTYPE GetLanguageCount(
+        DWORD dwOutputNum,
+        WORD *pwLanguageCount) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLanguage(
+        DWORD dwOutputNum,
+        WORD wLanguage,
+        WCHAR *pwszLanguageString,
+        WORD *pcchLanguageStringLength) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMaxSpeedFactor(
+        double *pdblFactor) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsUsingFastCache(
+        WINBOOL *pfUsingFastCache) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddLogParam(
+        LPCWSTR wszNameSpace,
+        LPCWSTR wszName,
+        LPCWSTR wszValue) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SendLogParams(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CanSaveFileAs(
+        WINBOOL *pfCanSave) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CancelSaveFileAs(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetURL(
+        WCHAR *pwszURL,
+        DWORD *pcchURL) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IWMReaderAdvanced4, 0x945a76a2, 0x12ae, 0x4d48, 0xbd,0x3c, 0xcd,0x1d,0x90,0x39,0x9b,0x85)
+#endif
+#else
+typedef struct IWMReaderAdvanced4Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWMReaderAdvanced4* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWMReaderAdvanced4* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWMReaderAdvanced4* This);
+
+    /*** IWMReaderAdvanced methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetUserProvidedClock)(
+        IWMReaderAdvanced4* This,
+        WINBOOL fUserClock);
+
+    HRESULT (STDMETHODCALLTYPE *GetUserProvidedClock)(
+        IWMReaderAdvanced4* This,
+        WINBOOL *pfUserClock);
+
+    HRESULT (STDMETHODCALLTYPE *DeliverTime)(
+        IWMReaderAdvanced4* This,
+        QWORD cnsTime);
+
+    HRESULT (STDMETHODCALLTYPE *SetManualStreamSelection)(
+        IWMReaderAdvanced4* This,
+        WINBOOL fSelection);
+
+    HRESULT (STDMETHODCALLTYPE *GetManualStreamSelection)(
+        IWMReaderAdvanced4* This,
+        WINBOOL *pfSelection);
+
+    HRESULT (STDMETHODCALLTYPE *SetStreamsSelected)(
+        IWMReaderAdvanced4* This,
+        WORD cStreamCount,
+        WORD *pwStreamNumbers,
+        WMT_STREAM_SELECTION *pSelections);
+
+    HRESULT (STDMETHODCALLTYPE *GetStreamSelected)(
+        IWMReaderAdvanced4* This,
+        WORD wStreamNum,
+        WMT_STREAM_SELECTION *pSelection);
+
+    HRESULT (STDMETHODCALLTYPE *SetReceiveSelectionCallbacks)(
+        IWMReaderAdvanced4* This,
+        WINBOOL fGetCallbacks);
+
+    HRESULT (STDMETHODCALLTYPE *GetReceiveSelectionCallbacks)(
+        IWMReaderAdvanced4* This,
+        WINBOOL *pfGetCallbacks);
+
+    HRESULT (STDMETHODCALLTYPE *SetReceiveStreamSamples)(
+        IWMReaderAdvanced4* This,
+        WORD wStreamNum,
+        WINBOOL fReceiveStreamSamples);
+
+    HRESULT (STDMETHODCALLTYPE *GetReceiveStreamSamples)(
+        IWMReaderAdvanced4* This,
+        WORD wStreamNum,
+        WINBOOL *pfReceiveStreamSamples);
+
+    HRESULT (STDMETHODCALLTYPE *SetAllocateForOutput)(
+        IWMReaderAdvanced4* This,
+        DWORD dwOutputNum,
+        WINBOOL fAllocate);
+
+    HRESULT (STDMETHODCALLTYPE *GetAllocateForOutput)(
+        IWMReaderAdvanced4* This,
+        DWORD dwOutputNum,
+        WINBOOL *pfAllocate);
+
+    HRESULT (STDMETHODCALLTYPE *SetAllocateForStream)(
+        IWMReaderAdvanced4* This,
+        WORD wStreamNum,
+        WINBOOL fAllocate);
+
+    HRESULT (STDMETHODCALLTYPE *GetAllocateForStream)(
+        IWMReaderAdvanced4* This,
+        WORD dwSreamNum,
+        WINBOOL *pfAllocate);
+
+    HRESULT (STDMETHODCALLTYPE *GetStatistics)(
+        IWMReaderAdvanced4* This,
+        WM_READER_STATISTICS *pStatistics);
+
+    HRESULT (STDMETHODCALLTYPE *SetClientInfo)(
+        IWMReaderAdvanced4* This,
+        WM_READER_CLIENTINFO *pClientInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetMaxOutputSampleSize)(
+        IWMReaderAdvanced4* This,
+        DWORD dwOutput,
+        DWORD *pcbMax);
+
+    HRESULT (STDMETHODCALLTYPE *GetMaxStreamSampleSize)(
+        IWMReaderAdvanced4* This,
+        WORD wStream,
+        DWORD *pcbMax);
+
+    HRESULT (STDMETHODCALLTYPE *NotifyLateDelivery)(
+        IWMReaderAdvanced4* This,
+        QWORD cnsLateness);
+
+    /*** IWMReaderAdvanced2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPlayMode)(
+        IWMReaderAdvanced4* This,
+        WMT_PLAY_MODE Mode);
+
+    HRESULT (STDMETHODCALLTYPE *GetPlayMode)(
+        IWMReaderAdvanced4* This,
+        WMT_PLAY_MODE *pMode);
+
+    HRESULT (STDMETHODCALLTYPE *GetBufferProgress)(
+        IWMReaderAdvanced4* This,
+        DWORD *pdwPercent,
+        QWORD *pcnsBuffering);
+
+    HRESULT (STDMETHODCALLTYPE *GetDownloadProgress)(
+        IWMReaderAdvanced4* This,
+        DWORD *pdwPercent,
+        QWORD *pqwBytesDownloaded,
+        QWORD *pcnsDownload);
+
+    HRESULT (STDMETHODCALLTYPE *GetSaveAsProgress)(
+        IWMReaderAdvanced4* This,
+        DWORD *pdwPercent);
+
+    HRESULT (STDMETHODCALLTYPE *SaveFileAs)(
+        IWMReaderAdvanced4* This,
+        const WCHAR *pwszFilename);
+
+    HRESULT (STDMETHODCALLTYPE *GetProtocolName)(
+        IWMReaderAdvanced4* This,
+        WCHAR *pwszProtocol,
+        DWORD *pcchProtocol);
+
+    HRESULT (STDMETHODCALLTYPE *StartAtMarker)(
+        IWMReaderAdvanced4* This,
+        WORD wMarkerIndex,
+        QWORD cnsDuration,
+        float fRate,
+        void *pvContext);
+
+    HRESULT (STDMETHODCALLTYPE *GetOutputSetting)(
+        IWMReaderAdvanced4* This,
+        DWORD dwOutputNum,
+        LPCWSTR pszName,
+        WMT_ATTR_DATATYPE *pType,
+        BYTE *pValue,
+        WORD *pcbLength);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputSetting)(
+        IWMReaderAdvanced4* This,
+        DWORD dwOutputNum,
+        LPCWSTR pszName,
+        WMT_ATTR_DATATYPE Type,
+        const BYTE *pValue,
+        WORD cbLength);
+
+    HRESULT (STDMETHODCALLTYPE *Preroll)(
+        IWMReaderAdvanced4* This,
+        QWORD cnsStart,
+        QWORD cnsDuration,
+        float fRate);
+
+    HRESULT (STDMETHODCALLTYPE *SetLogClientID)(
+        IWMReaderAdvanced4* This,
+        WINBOOL fLogClientID);
+
+    HRESULT (STDMETHODCALLTYPE *GetLogClientID)(
+        IWMReaderAdvanced4* This,
+        WINBOOL *pfLogClientID);
+
+    HRESULT (STDMETHODCALLTYPE *StopBuffering)(
+        IWMReaderAdvanced4* This);
+
+    HRESULT (STDMETHODCALLTYPE *OpenStream)(
+        IWMReaderAdvanced4* This,
+        IStream *pStream,
+        IWMReaderCallback *pCallback,
+        void *pvContext);
+
+    /*** IWMReaderAdvanced3 methods ***/
+    HRESULT (STDMETHODCALLTYPE *StopNetStreaming)(
+        IWMReaderAdvanced4* This);
+
+    HRESULT (STDMETHODCALLTYPE *StartAtPosition)(
+        IWMReaderAdvanced4* This,
+        WORD wStreamNum,
+        void *pvOffsetStart,
+        void *pvDuration,
+        WMT_OFFSET_FORMAT dwOffsetFormat,
+        float fRate,
+        void *pvContext);
+
+    /*** IWMReaderAdvanced4 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetLanguageCount)(
+        IWMReaderAdvanced4* This,
+        DWORD dwOutputNum,
+        WORD *pwLanguageCount);
+
+    HRESULT (STDMETHODCALLTYPE *GetLanguage)(
+        IWMReaderAdvanced4* This,
+        DWORD dwOutputNum,
+        WORD wLanguage,
+        WCHAR *pwszLanguageString,
+        WORD *pcchLanguageStringLength);
+
+    HRESULT (STDMETHODCALLTYPE *GetMaxSpeedFactor)(
+        IWMReaderAdvanced4* This,
+        double *pdblFactor);
+
+    HRESULT (STDMETHODCALLTYPE *IsUsingFastCache)(
+        IWMReaderAdvanced4* This,
+        WINBOOL *pfUsingFastCache);
+
+    HRESULT (STDMETHODCALLTYPE *AddLogParam)(
+        IWMReaderAdvanced4* This,
+        LPCWSTR wszNameSpace,
+        LPCWSTR wszName,
+        LPCWSTR wszValue);
+
+    HRESULT (STDMETHODCALLTYPE *SendLogParams)(
+        IWMReaderAdvanced4* This);
+
+    HRESULT (STDMETHODCALLTYPE *CanSaveFileAs)(
+        IWMReaderAdvanced4* This,
+        WINBOOL *pfCanSave);
+
+    HRESULT (STDMETHODCALLTYPE *CancelSaveFileAs)(
+        IWMReaderAdvanced4* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetURL)(
+        IWMReaderAdvanced4* This,
+        WCHAR *pwszURL,
+        DWORD *pcchURL);
+
+    END_INTERFACE
+} IWMReaderAdvanced4Vtbl;
+interface IWMReaderAdvanced4 {
+    CONST_VTBL IWMReaderAdvanced4Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IWMReaderAdvanced4_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWMReaderAdvanced4_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWMReaderAdvanced4_Release(This) (This)->lpVtbl->Release(This)
+/*** IWMReaderAdvanced methods ***/
+#define IWMReaderAdvanced4_SetUserProvidedClock(This,fUserClock) (This)->lpVtbl->SetUserProvidedClock(This,fUserClock)
+#define IWMReaderAdvanced4_GetUserProvidedClock(This,pfUserClock) (This)->lpVtbl->GetUserProvidedClock(This,pfUserClock)
+#define IWMReaderAdvanced4_DeliverTime(This,cnsTime) (This)->lpVtbl->DeliverTime(This,cnsTime)
+#define IWMReaderAdvanced4_SetManualStreamSelection(This,fSelection) (This)->lpVtbl->SetManualStreamSelection(This,fSelection)
+#define IWMReaderAdvanced4_GetManualStreamSelection(This,pfSelection) (This)->lpVtbl->GetManualStreamSelection(This,pfSelection)
+#define IWMReaderAdvanced4_SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections) (This)->lpVtbl->SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections)
+#define IWMReaderAdvanced4_GetStreamSelected(This,wStreamNum,pSelection) (This)->lpVtbl->GetStreamSelected(This,wStreamNum,pSelection)
+#define IWMReaderAdvanced4_SetReceiveSelectionCallbacks(This,fGetCallbacks) (This)->lpVtbl->SetReceiveSelectionCallbacks(This,fGetCallbacks)
+#define IWMReaderAdvanced4_GetReceiveSelectionCallbacks(This,pfGetCallbacks) (This)->lpVtbl->GetReceiveSelectionCallbacks(This,pfGetCallbacks)
+#define IWMReaderAdvanced4_SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples) (This)->lpVtbl->SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples)
+#define IWMReaderAdvanced4_GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples) (This)->lpVtbl->GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples)
+#define IWMReaderAdvanced4_SetAllocateForOutput(This,dwOutputNum,fAllocate) (This)->lpVtbl->SetAllocateForOutput(This,dwOutputNum,fAllocate)
+#define IWMReaderAdvanced4_GetAllocateForOutput(This,dwOutputNum,pfAllocate) (This)->lpVtbl->GetAllocateForOutput(This,dwOutputNum,pfAllocate)
+#define IWMReaderAdvanced4_SetAllocateForStream(This,wStreamNum,fAllocate) (This)->lpVtbl->SetAllocateForStream(This,wStreamNum,fAllocate)
+#define IWMReaderAdvanced4_GetAllocateForStream(This,dwSreamNum,pfAllocate) (This)->lpVtbl->GetAllocateForStream(This,dwSreamNum,pfAllocate)
+#define IWMReaderAdvanced4_GetStatistics(This,pStatistics) (This)->lpVtbl->GetStatistics(This,pStatistics)
+#define IWMReaderAdvanced4_SetClientInfo(This,pClientInfo) (This)->lpVtbl->SetClientInfo(This,pClientInfo)
+#define IWMReaderAdvanced4_GetMaxOutputSampleSize(This,dwOutput,pcbMax) (This)->lpVtbl->GetMaxOutputSampleSize(This,dwOutput,pcbMax)
+#define IWMReaderAdvanced4_GetMaxStreamSampleSize(This,wStream,pcbMax) (This)->lpVtbl->GetMaxStreamSampleSize(This,wStream,pcbMax)
+#define IWMReaderAdvanced4_NotifyLateDelivery(This,cnsLateness) (This)->lpVtbl->NotifyLateDelivery(This,cnsLateness)
+/*** IWMReaderAdvanced2 methods ***/
+#define IWMReaderAdvanced4_SetPlayMode(This,Mode) (This)->lpVtbl->SetPlayMode(This,Mode)
+#define IWMReaderAdvanced4_GetPlayMode(This,pMode) (This)->lpVtbl->GetPlayMode(This,pMode)
+#define IWMReaderAdvanced4_GetBufferProgress(This,pdwPercent,pcnsBuffering) (This)->lpVtbl->GetBufferProgress(This,pdwPercent,pcnsBuffering)
+#define IWMReaderAdvanced4_GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload) (This)->lpVtbl->GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload)
+#define IWMReaderAdvanced4_GetSaveAsProgress(This,pdwPercent) (This)->lpVtbl->GetSaveAsProgress(This,pdwPercent)
+#define IWMReaderAdvanced4_SaveFileAs(This,pwszFilename) (This)->lpVtbl->SaveFileAs(This,pwszFilename)
+#define IWMReaderAdvanced4_GetProtocolName(This,pwszProtocol,pcchProtocol) (This)->lpVtbl->GetProtocolName(This,pwszProtocol,pcchProtocol)
+#define IWMReaderAdvanced4_StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext) (This)->lpVtbl->StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext)
+#define IWMReaderAdvanced4_GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength) (This)->lpVtbl->GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength)
+#define IWMReaderAdvanced4_SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength) (This)->lpVtbl->SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength)
+#define IWMReaderAdvanced4_Preroll(This,cnsStart,cnsDuration,fRate) (This)->lpVtbl->Preroll(This,cnsStart,cnsDuration,fRate)
+#define IWMReaderAdvanced4_SetLogClientID(This,fLogClientID) (This)->lpVtbl->SetLogClientID(This,fLogClientID)
+#define IWMReaderAdvanced4_GetLogClientID(This,pfLogClientID) (This)->lpVtbl->GetLogClientID(This,pfLogClientID)
+#define IWMReaderAdvanced4_StopBuffering(This) (This)->lpVtbl->StopBuffering(This)
+#define IWMReaderAdvanced4_OpenStream(This,pStream,pCallback,pvContext) (This)->lpVtbl->OpenStream(This,pStream,pCallback,pvContext)
+/*** IWMReaderAdvanced3 methods ***/
+#define IWMReaderAdvanced4_StopNetStreaming(This) (This)->lpVtbl->StopNetStreaming(This)
+#define IWMReaderAdvanced4_StartAtPosition(This,wStreamNum,pvOffsetStart,pvDuration,dwOffsetFormat,fRate,pvContext) (This)->lpVtbl->StartAtPosition(This,wStreamNum,pvOffsetStart,pvDuration,dwOffsetFormat,fRate,pvContext)
+/*** IWMReaderAdvanced4 methods ***/
+#define IWMReaderAdvanced4_GetLanguageCount(This,dwOutputNum,pwLanguageCount) (This)->lpVtbl->GetLanguageCount(This,dwOutputNum,pwLanguageCount)
+#define IWMReaderAdvanced4_GetLanguage(This,dwOutputNum,wLanguage,pwszLanguageString,pcchLanguageStringLength) (This)->lpVtbl->GetLanguage(This,dwOutputNum,wLanguage,pwszLanguageString,pcchLanguageStringLength)
+#define IWMReaderAdvanced4_GetMaxSpeedFactor(This,pdblFactor) (This)->lpVtbl->GetMaxSpeedFactor(This,pdblFactor)
+#define IWMReaderAdvanced4_IsUsingFastCache(This,pfUsingFastCache) (This)->lpVtbl->IsUsingFastCache(This,pfUsingFastCache)
+#define IWMReaderAdvanced4_AddLogParam(This,wszNameSpace,wszName,wszValue) (This)->lpVtbl->AddLogParam(This,wszNameSpace,wszName,wszValue)
+#define IWMReaderAdvanced4_SendLogParams(This) (This)->lpVtbl->SendLogParams(This)
+#define IWMReaderAdvanced4_CanSaveFileAs(This,pfCanSave) (This)->lpVtbl->CanSaveFileAs(This,pfCanSave)
+#define IWMReaderAdvanced4_CancelSaveFileAs(This) (This)->lpVtbl->CancelSaveFileAs(This)
+#define IWMReaderAdvanced4_GetURL(This,pwszURL,pcchURL) (This)->lpVtbl->GetURL(This,pwszURL,pcchURL)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IWMReaderAdvanced4_QueryInterface(IWMReaderAdvanced4* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IWMReaderAdvanced4_AddRef(IWMReaderAdvanced4* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IWMReaderAdvanced4_Release(IWMReaderAdvanced4* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IWMReaderAdvanced methods ***/
+static FORCEINLINE HRESULT IWMReaderAdvanced4_SetUserProvidedClock(IWMReaderAdvanced4* This,WINBOOL fUserClock) {
+    return This->lpVtbl->SetUserProvidedClock(This,fUserClock);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_GetUserProvidedClock(IWMReaderAdvanced4* This,WINBOOL *pfUserClock) {
+    return This->lpVtbl->GetUserProvidedClock(This,pfUserClock);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_DeliverTime(IWMReaderAdvanced4* This,QWORD cnsTime) {
+    return This->lpVtbl->DeliverTime(This,cnsTime);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_SetManualStreamSelection(IWMReaderAdvanced4* This,WINBOOL fSelection) {
+    return This->lpVtbl->SetManualStreamSelection(This,fSelection);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_GetManualStreamSelection(IWMReaderAdvanced4* This,WINBOOL *pfSelection) {
+    return This->lpVtbl->GetManualStreamSelection(This,pfSelection);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_SetStreamsSelected(IWMReaderAdvanced4* This,WORD cStreamCount,WORD *pwStreamNumbers,WMT_STREAM_SELECTION *pSelections) {
+    return This->lpVtbl->SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_GetStreamSelected(IWMReaderAdvanced4* This,WORD wStreamNum,WMT_STREAM_SELECTION *pSelection) {
+    return This->lpVtbl->GetStreamSelected(This,wStreamNum,pSelection);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_SetReceiveSelectionCallbacks(IWMReaderAdvanced4* This,WINBOOL fGetCallbacks) {
+    return This->lpVtbl->SetReceiveSelectionCallbacks(This,fGetCallbacks);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_GetReceiveSelectionCallbacks(IWMReaderAdvanced4* This,WINBOOL *pfGetCallbacks) {
+    return This->lpVtbl->GetReceiveSelectionCallbacks(This,pfGetCallbacks);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_SetReceiveStreamSamples(IWMReaderAdvanced4* This,WORD wStreamNum,WINBOOL fReceiveStreamSamples) {
+    return This->lpVtbl->SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_GetReceiveStreamSamples(IWMReaderAdvanced4* This,WORD wStreamNum,WINBOOL *pfReceiveStreamSamples) {
+    return This->lpVtbl->GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_SetAllocateForOutput(IWMReaderAdvanced4* This,DWORD dwOutputNum,WINBOOL fAllocate) {
+    return This->lpVtbl->SetAllocateForOutput(This,dwOutputNum,fAllocate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_GetAllocateForOutput(IWMReaderAdvanced4* This,DWORD dwOutputNum,WINBOOL *pfAllocate) {
+    return This->lpVtbl->GetAllocateForOutput(This,dwOutputNum,pfAllocate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_SetAllocateForStream(IWMReaderAdvanced4* This,WORD wStreamNum,WINBOOL fAllocate) {
+    return This->lpVtbl->SetAllocateForStream(This,wStreamNum,fAllocate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_GetAllocateForStream(IWMReaderAdvanced4* This,WORD dwSreamNum,WINBOOL *pfAllocate) {
+    return This->lpVtbl->GetAllocateForStream(This,dwSreamNum,pfAllocate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_GetStatistics(IWMReaderAdvanced4* This,WM_READER_STATISTICS *pStatistics) {
+    return This->lpVtbl->GetStatistics(This,pStatistics);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_SetClientInfo(IWMReaderAdvanced4* This,WM_READER_CLIENTINFO *pClientInfo) {
+    return This->lpVtbl->SetClientInfo(This,pClientInfo);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_GetMaxOutputSampleSize(IWMReaderAdvanced4* This,DWORD dwOutput,DWORD *pcbMax) {
+    return This->lpVtbl->GetMaxOutputSampleSize(This,dwOutput,pcbMax);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_GetMaxStreamSampleSize(IWMReaderAdvanced4* This,WORD wStream,DWORD *pcbMax) {
+    return This->lpVtbl->GetMaxStreamSampleSize(This,wStream,pcbMax);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_NotifyLateDelivery(IWMReaderAdvanced4* This,QWORD cnsLateness) {
+    return This->lpVtbl->NotifyLateDelivery(This,cnsLateness);
+}
+/*** IWMReaderAdvanced2 methods ***/
+static FORCEINLINE HRESULT IWMReaderAdvanced4_SetPlayMode(IWMReaderAdvanced4* This,WMT_PLAY_MODE Mode) {
+    return This->lpVtbl->SetPlayMode(This,Mode);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_GetPlayMode(IWMReaderAdvanced4* This,WMT_PLAY_MODE *pMode) {
+    return This->lpVtbl->GetPlayMode(This,pMode);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_GetBufferProgress(IWMReaderAdvanced4* This,DWORD *pdwPercent,QWORD *pcnsBuffering) {
+    return This->lpVtbl->GetBufferProgress(This,pdwPercent,pcnsBuffering);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_GetDownloadProgress(IWMReaderAdvanced4* This,DWORD *pdwPercent,QWORD *pqwBytesDownloaded,QWORD *pcnsDownload) {
+    return This->lpVtbl->GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_GetSaveAsProgress(IWMReaderAdvanced4* This,DWORD *pdwPercent) {
+    return This->lpVtbl->GetSaveAsProgress(This,pdwPercent);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_SaveFileAs(IWMReaderAdvanced4* This,const WCHAR *pwszFilename) {
+    return This->lpVtbl->SaveFileAs(This,pwszFilename);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_GetProtocolName(IWMReaderAdvanced4* This,WCHAR *pwszProtocol,DWORD *pcchProtocol) {
+    return This->lpVtbl->GetProtocolName(This,pwszProtocol,pcchProtocol);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_StartAtMarker(IWMReaderAdvanced4* This,WORD wMarkerIndex,QWORD cnsDuration,float fRate,void *pvContext) {
+    return This->lpVtbl->StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_GetOutputSetting(IWMReaderAdvanced4* This,DWORD dwOutputNum,LPCWSTR pszName,WMT_ATTR_DATATYPE *pType,BYTE *pValue,WORD *pcbLength) {
+    return This->lpVtbl->GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_SetOutputSetting(IWMReaderAdvanced4* This,DWORD dwOutputNum,LPCWSTR pszName,WMT_ATTR_DATATYPE Type,const BYTE *pValue,WORD cbLength) {
+    return This->lpVtbl->SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_Preroll(IWMReaderAdvanced4* This,QWORD cnsStart,QWORD cnsDuration,float fRate) {
+    return This->lpVtbl->Preroll(This,cnsStart,cnsDuration,fRate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_SetLogClientID(IWMReaderAdvanced4* This,WINBOOL fLogClientID) {
+    return This->lpVtbl->SetLogClientID(This,fLogClientID);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_GetLogClientID(IWMReaderAdvanced4* This,WINBOOL *pfLogClientID) {
+    return This->lpVtbl->GetLogClientID(This,pfLogClientID);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_StopBuffering(IWMReaderAdvanced4* This) {
+    return This->lpVtbl->StopBuffering(This);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_OpenStream(IWMReaderAdvanced4* This,IStream *pStream,IWMReaderCallback *pCallback,void *pvContext) {
+    return This->lpVtbl->OpenStream(This,pStream,pCallback,pvContext);
+}
+/*** IWMReaderAdvanced3 methods ***/
+static FORCEINLINE HRESULT IWMReaderAdvanced4_StopNetStreaming(IWMReaderAdvanced4* This) {
+    return This->lpVtbl->StopNetStreaming(This);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_StartAtPosition(IWMReaderAdvanced4* This,WORD wStreamNum,void *pvOffsetStart,void *pvDuration,WMT_OFFSET_FORMAT dwOffsetFormat,float fRate,void *pvContext) {
+    return This->lpVtbl->StartAtPosition(This,wStreamNum,pvOffsetStart,pvDuration,dwOffsetFormat,fRate,pvContext);
+}
+/*** IWMReaderAdvanced4 methods ***/
+static FORCEINLINE HRESULT IWMReaderAdvanced4_GetLanguageCount(IWMReaderAdvanced4* This,DWORD dwOutputNum,WORD *pwLanguageCount) {
+    return This->lpVtbl->GetLanguageCount(This,dwOutputNum,pwLanguageCount);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_GetLanguage(IWMReaderAdvanced4* This,DWORD dwOutputNum,WORD wLanguage,WCHAR *pwszLanguageString,WORD *pcchLanguageStringLength) {
+    return This->lpVtbl->GetLanguage(This,dwOutputNum,wLanguage,pwszLanguageString,pcchLanguageStringLength);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_GetMaxSpeedFactor(IWMReaderAdvanced4* This,double *pdblFactor) {
+    return This->lpVtbl->GetMaxSpeedFactor(This,pdblFactor);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_IsUsingFastCache(IWMReaderAdvanced4* This,WINBOOL *pfUsingFastCache) {
+    return This->lpVtbl->IsUsingFastCache(This,pfUsingFastCache);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_AddLogParam(IWMReaderAdvanced4* This,LPCWSTR wszNameSpace,LPCWSTR wszName,LPCWSTR wszValue) {
+    return This->lpVtbl->AddLogParam(This,wszNameSpace,wszName,wszValue);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_SendLogParams(IWMReaderAdvanced4* This) {
+    return This->lpVtbl->SendLogParams(This);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_CanSaveFileAs(IWMReaderAdvanced4* This,WINBOOL *pfCanSave) {
+    return This->lpVtbl->CanSaveFileAs(This,pfCanSave);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_CancelSaveFileAs(IWMReaderAdvanced4* This) {
+    return This->lpVtbl->CancelSaveFileAs(This);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced4_GetURL(IWMReaderAdvanced4* This,WCHAR *pwszURL,DWORD *pcchURL) {
+    return This->lpVtbl->GetURL(This,pwszURL,pcchURL);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced4_GetLanguageCount_Proxy(
+    IWMReaderAdvanced4* This,
+    DWORD dwOutputNum,
+    WORD *pwLanguageCount);
+void __RPC_STUB IWMReaderAdvanced4_GetLanguageCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced4_GetLanguage_Proxy(
+    IWMReaderAdvanced4* This,
+    DWORD dwOutputNum,
+    WORD wLanguage,
+    WCHAR *pwszLanguageString,
+    WORD *pcchLanguageStringLength);
+void __RPC_STUB IWMReaderAdvanced4_GetLanguage_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced4_GetMaxSpeedFactor_Proxy(
+    IWMReaderAdvanced4* This,
+    double *pdblFactor);
+void __RPC_STUB IWMReaderAdvanced4_GetMaxSpeedFactor_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced4_IsUsingFastCache_Proxy(
+    IWMReaderAdvanced4* This,
+    WINBOOL *pfUsingFastCache);
+void __RPC_STUB IWMReaderAdvanced4_IsUsingFastCache_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced4_AddLogParam_Proxy(
+    IWMReaderAdvanced4* This,
+    LPCWSTR wszNameSpace,
+    LPCWSTR wszName,
+    LPCWSTR wszValue);
+void __RPC_STUB IWMReaderAdvanced4_AddLogParam_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced4_SendLogParams_Proxy(
+    IWMReaderAdvanced4* This);
+void __RPC_STUB IWMReaderAdvanced4_SendLogParams_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced4_CanSaveFileAs_Proxy(
+    IWMReaderAdvanced4* This,
+    WINBOOL *pfCanSave);
+void __RPC_STUB IWMReaderAdvanced4_CanSaveFileAs_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced4_CancelSaveFileAs_Proxy(
+    IWMReaderAdvanced4* This);
+void __RPC_STUB IWMReaderAdvanced4_CancelSaveFileAs_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced4_GetURL_Proxy(
+    IWMReaderAdvanced4* This,
+    WCHAR *pwszURL,
+    DWORD *pcchURL);
+void __RPC_STUB IWMReaderAdvanced4_GetURL_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWMReaderAdvanced4_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWMReaderAdvanced5 interface
+ */
+#ifndef __IWMReaderAdvanced5_INTERFACE_DEFINED__
+#define __IWMReaderAdvanced5_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWMReaderAdvanced5, 0x24c44db0, 0x55d1, 0x49ae, 0xa5,0xcc, 0xf1,0x38,0x15,0xe3,0x63,0x63);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("24c44db0-55d1-49ae-a5cc-f13815e36363")
+IWMReaderAdvanced5 : public IWMReaderAdvanced4
+{
+    virtual HRESULT STDMETHODCALLTYPE SetPlayerHook(
+        DWORD dwOutputNum,
+        IWMPlayerHook *pHook) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IWMReaderAdvanced5, 0x24c44db0, 0x55d1, 0x49ae, 0xa5,0xcc, 0xf1,0x38,0x15,0xe3,0x63,0x63)
+#endif
+#else
+typedef struct IWMReaderAdvanced5Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWMReaderAdvanced5* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWMReaderAdvanced5* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWMReaderAdvanced5* This);
+
+    /*** IWMReaderAdvanced methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetUserProvidedClock)(
+        IWMReaderAdvanced5* This,
+        WINBOOL fUserClock);
+
+    HRESULT (STDMETHODCALLTYPE *GetUserProvidedClock)(
+        IWMReaderAdvanced5* This,
+        WINBOOL *pfUserClock);
+
+    HRESULT (STDMETHODCALLTYPE *DeliverTime)(
+        IWMReaderAdvanced5* This,
+        QWORD cnsTime);
+
+    HRESULT (STDMETHODCALLTYPE *SetManualStreamSelection)(
+        IWMReaderAdvanced5* This,
+        WINBOOL fSelection);
+
+    HRESULT (STDMETHODCALLTYPE *GetManualStreamSelection)(
+        IWMReaderAdvanced5* This,
+        WINBOOL *pfSelection);
+
+    HRESULT (STDMETHODCALLTYPE *SetStreamsSelected)(
+        IWMReaderAdvanced5* This,
+        WORD cStreamCount,
+        WORD *pwStreamNumbers,
+        WMT_STREAM_SELECTION *pSelections);
+
+    HRESULT (STDMETHODCALLTYPE *GetStreamSelected)(
+        IWMReaderAdvanced5* This,
+        WORD wStreamNum,
+        WMT_STREAM_SELECTION *pSelection);
+
+    HRESULT (STDMETHODCALLTYPE *SetReceiveSelectionCallbacks)(
+        IWMReaderAdvanced5* This,
+        WINBOOL fGetCallbacks);
+
+    HRESULT (STDMETHODCALLTYPE *GetReceiveSelectionCallbacks)(
+        IWMReaderAdvanced5* This,
+        WINBOOL *pfGetCallbacks);
+
+    HRESULT (STDMETHODCALLTYPE *SetReceiveStreamSamples)(
+        IWMReaderAdvanced5* This,
+        WORD wStreamNum,
+        WINBOOL fReceiveStreamSamples);
+
+    HRESULT (STDMETHODCALLTYPE *GetReceiveStreamSamples)(
+        IWMReaderAdvanced5* This,
+        WORD wStreamNum,
+        WINBOOL *pfReceiveStreamSamples);
+
+    HRESULT (STDMETHODCALLTYPE *SetAllocateForOutput)(
+        IWMReaderAdvanced5* This,
+        DWORD dwOutputNum,
+        WINBOOL fAllocate);
+
+    HRESULT (STDMETHODCALLTYPE *GetAllocateForOutput)(
+        IWMReaderAdvanced5* This,
+        DWORD dwOutputNum,
+        WINBOOL *pfAllocate);
+
+    HRESULT (STDMETHODCALLTYPE *SetAllocateForStream)(
+        IWMReaderAdvanced5* This,
+        WORD wStreamNum,
+        WINBOOL fAllocate);
+
+    HRESULT (STDMETHODCALLTYPE *GetAllocateForStream)(
+        IWMReaderAdvanced5* This,
+        WORD dwSreamNum,
+        WINBOOL *pfAllocate);
+
+    HRESULT (STDMETHODCALLTYPE *GetStatistics)(
+        IWMReaderAdvanced5* This,
+        WM_READER_STATISTICS *pStatistics);
+
+    HRESULT (STDMETHODCALLTYPE *SetClientInfo)(
+        IWMReaderAdvanced5* This,
+        WM_READER_CLIENTINFO *pClientInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetMaxOutputSampleSize)(
+        IWMReaderAdvanced5* This,
+        DWORD dwOutput,
+        DWORD *pcbMax);
+
+    HRESULT (STDMETHODCALLTYPE *GetMaxStreamSampleSize)(
+        IWMReaderAdvanced5* This,
+        WORD wStream,
+        DWORD *pcbMax);
+
+    HRESULT (STDMETHODCALLTYPE *NotifyLateDelivery)(
+        IWMReaderAdvanced5* This,
+        QWORD cnsLateness);
+
+    /*** IWMReaderAdvanced2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPlayMode)(
+        IWMReaderAdvanced5* This,
+        WMT_PLAY_MODE Mode);
+
+    HRESULT (STDMETHODCALLTYPE *GetPlayMode)(
+        IWMReaderAdvanced5* This,
+        WMT_PLAY_MODE *pMode);
+
+    HRESULT (STDMETHODCALLTYPE *GetBufferProgress)(
+        IWMReaderAdvanced5* This,
+        DWORD *pdwPercent,
+        QWORD *pcnsBuffering);
+
+    HRESULT (STDMETHODCALLTYPE *GetDownloadProgress)(
+        IWMReaderAdvanced5* This,
+        DWORD *pdwPercent,
+        QWORD *pqwBytesDownloaded,
+        QWORD *pcnsDownload);
+
+    HRESULT (STDMETHODCALLTYPE *GetSaveAsProgress)(
+        IWMReaderAdvanced5* This,
+        DWORD *pdwPercent);
+
+    HRESULT (STDMETHODCALLTYPE *SaveFileAs)(
+        IWMReaderAdvanced5* This,
+        const WCHAR *pwszFilename);
+
+    HRESULT (STDMETHODCALLTYPE *GetProtocolName)(
+        IWMReaderAdvanced5* This,
+        WCHAR *pwszProtocol,
+        DWORD *pcchProtocol);
+
+    HRESULT (STDMETHODCALLTYPE *StartAtMarker)(
+        IWMReaderAdvanced5* This,
+        WORD wMarkerIndex,
+        QWORD cnsDuration,
+        float fRate,
+        void *pvContext);
+
+    HRESULT (STDMETHODCALLTYPE *GetOutputSetting)(
+        IWMReaderAdvanced5* This,
+        DWORD dwOutputNum,
+        LPCWSTR pszName,
+        WMT_ATTR_DATATYPE *pType,
+        BYTE *pValue,
+        WORD *pcbLength);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputSetting)(
+        IWMReaderAdvanced5* This,
+        DWORD dwOutputNum,
+        LPCWSTR pszName,
+        WMT_ATTR_DATATYPE Type,
+        const BYTE *pValue,
+        WORD cbLength);
+
+    HRESULT (STDMETHODCALLTYPE *Preroll)(
+        IWMReaderAdvanced5* This,
+        QWORD cnsStart,
+        QWORD cnsDuration,
+        float fRate);
+
+    HRESULT (STDMETHODCALLTYPE *SetLogClientID)(
+        IWMReaderAdvanced5* This,
+        WINBOOL fLogClientID);
+
+    HRESULT (STDMETHODCALLTYPE *GetLogClientID)(
+        IWMReaderAdvanced5* This,
+        WINBOOL *pfLogClientID);
+
+    HRESULT (STDMETHODCALLTYPE *StopBuffering)(
+        IWMReaderAdvanced5* This);
+
+    HRESULT (STDMETHODCALLTYPE *OpenStream)(
+        IWMReaderAdvanced5* This,
+        IStream *pStream,
+        IWMReaderCallback *pCallback,
+        void *pvContext);
+
+    /*** IWMReaderAdvanced3 methods ***/
+    HRESULT (STDMETHODCALLTYPE *StopNetStreaming)(
+        IWMReaderAdvanced5* This);
+
+    HRESULT (STDMETHODCALLTYPE *StartAtPosition)(
+        IWMReaderAdvanced5* This,
+        WORD wStreamNum,
+        void *pvOffsetStart,
+        void *pvDuration,
+        WMT_OFFSET_FORMAT dwOffsetFormat,
+        float fRate,
+        void *pvContext);
+
+    /*** IWMReaderAdvanced4 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetLanguageCount)(
+        IWMReaderAdvanced5* This,
+        DWORD dwOutputNum,
+        WORD *pwLanguageCount);
+
+    HRESULT (STDMETHODCALLTYPE *GetLanguage)(
+        IWMReaderAdvanced5* This,
+        DWORD dwOutputNum,
+        WORD wLanguage,
+        WCHAR *pwszLanguageString,
+        WORD *pcchLanguageStringLength);
+
+    HRESULT (STDMETHODCALLTYPE *GetMaxSpeedFactor)(
+        IWMReaderAdvanced5* This,
+        double *pdblFactor);
+
+    HRESULT (STDMETHODCALLTYPE *IsUsingFastCache)(
+        IWMReaderAdvanced5* This,
+        WINBOOL *pfUsingFastCache);
+
+    HRESULT (STDMETHODCALLTYPE *AddLogParam)(
+        IWMReaderAdvanced5* This,
+        LPCWSTR wszNameSpace,
+        LPCWSTR wszName,
+        LPCWSTR wszValue);
+
+    HRESULT (STDMETHODCALLTYPE *SendLogParams)(
+        IWMReaderAdvanced5* This);
+
+    HRESULT (STDMETHODCALLTYPE *CanSaveFileAs)(
+        IWMReaderAdvanced5* This,
+        WINBOOL *pfCanSave);
+
+    HRESULT (STDMETHODCALLTYPE *CancelSaveFileAs)(
+        IWMReaderAdvanced5* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetURL)(
+        IWMReaderAdvanced5* This,
+        WCHAR *pwszURL,
+        DWORD *pcchURL);
+
+    /*** IWMReaderAdvanced5 methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPlayerHook)(
+        IWMReaderAdvanced5* This,
+        DWORD dwOutputNum,
+        IWMPlayerHook *pHook);
+
+    END_INTERFACE
+} IWMReaderAdvanced5Vtbl;
+interface IWMReaderAdvanced5 {
+    CONST_VTBL IWMReaderAdvanced5Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IWMReaderAdvanced5_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWMReaderAdvanced5_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWMReaderAdvanced5_Release(This) (This)->lpVtbl->Release(This)
+/*** IWMReaderAdvanced methods ***/
+#define IWMReaderAdvanced5_SetUserProvidedClock(This,fUserClock) (This)->lpVtbl->SetUserProvidedClock(This,fUserClock)
+#define IWMReaderAdvanced5_GetUserProvidedClock(This,pfUserClock) (This)->lpVtbl->GetUserProvidedClock(This,pfUserClock)
+#define IWMReaderAdvanced5_DeliverTime(This,cnsTime) (This)->lpVtbl->DeliverTime(This,cnsTime)
+#define IWMReaderAdvanced5_SetManualStreamSelection(This,fSelection) (This)->lpVtbl->SetManualStreamSelection(This,fSelection)
+#define IWMReaderAdvanced5_GetManualStreamSelection(This,pfSelection) (This)->lpVtbl->GetManualStreamSelection(This,pfSelection)
+#define IWMReaderAdvanced5_SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections) (This)->lpVtbl->SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections)
+#define IWMReaderAdvanced5_GetStreamSelected(This,wStreamNum,pSelection) (This)->lpVtbl->GetStreamSelected(This,wStreamNum,pSelection)
+#define IWMReaderAdvanced5_SetReceiveSelectionCallbacks(This,fGetCallbacks) (This)->lpVtbl->SetReceiveSelectionCallbacks(This,fGetCallbacks)
+#define IWMReaderAdvanced5_GetReceiveSelectionCallbacks(This,pfGetCallbacks) (This)->lpVtbl->GetReceiveSelectionCallbacks(This,pfGetCallbacks)
+#define IWMReaderAdvanced5_SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples) (This)->lpVtbl->SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples)
+#define IWMReaderAdvanced5_GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples) (This)->lpVtbl->GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples)
+#define IWMReaderAdvanced5_SetAllocateForOutput(This,dwOutputNum,fAllocate) (This)->lpVtbl->SetAllocateForOutput(This,dwOutputNum,fAllocate)
+#define IWMReaderAdvanced5_GetAllocateForOutput(This,dwOutputNum,pfAllocate) (This)->lpVtbl->GetAllocateForOutput(This,dwOutputNum,pfAllocate)
+#define IWMReaderAdvanced5_SetAllocateForStream(This,wStreamNum,fAllocate) (This)->lpVtbl->SetAllocateForStream(This,wStreamNum,fAllocate)
+#define IWMReaderAdvanced5_GetAllocateForStream(This,dwSreamNum,pfAllocate) (This)->lpVtbl->GetAllocateForStream(This,dwSreamNum,pfAllocate)
+#define IWMReaderAdvanced5_GetStatistics(This,pStatistics) (This)->lpVtbl->GetStatistics(This,pStatistics)
+#define IWMReaderAdvanced5_SetClientInfo(This,pClientInfo) (This)->lpVtbl->SetClientInfo(This,pClientInfo)
+#define IWMReaderAdvanced5_GetMaxOutputSampleSize(This,dwOutput,pcbMax) (This)->lpVtbl->GetMaxOutputSampleSize(This,dwOutput,pcbMax)
+#define IWMReaderAdvanced5_GetMaxStreamSampleSize(This,wStream,pcbMax) (This)->lpVtbl->GetMaxStreamSampleSize(This,wStream,pcbMax)
+#define IWMReaderAdvanced5_NotifyLateDelivery(This,cnsLateness) (This)->lpVtbl->NotifyLateDelivery(This,cnsLateness)
+/*** IWMReaderAdvanced2 methods ***/
+#define IWMReaderAdvanced5_SetPlayMode(This,Mode) (This)->lpVtbl->SetPlayMode(This,Mode)
+#define IWMReaderAdvanced5_GetPlayMode(This,pMode) (This)->lpVtbl->GetPlayMode(This,pMode)
+#define IWMReaderAdvanced5_GetBufferProgress(This,pdwPercent,pcnsBuffering) (This)->lpVtbl->GetBufferProgress(This,pdwPercent,pcnsBuffering)
+#define IWMReaderAdvanced5_GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload) (This)->lpVtbl->GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload)
+#define IWMReaderAdvanced5_GetSaveAsProgress(This,pdwPercent) (This)->lpVtbl->GetSaveAsProgress(This,pdwPercent)
+#define IWMReaderAdvanced5_SaveFileAs(This,pwszFilename) (This)->lpVtbl->SaveFileAs(This,pwszFilename)
+#define IWMReaderAdvanced5_GetProtocolName(This,pwszProtocol,pcchProtocol) (This)->lpVtbl->GetProtocolName(This,pwszProtocol,pcchProtocol)
+#define IWMReaderAdvanced5_StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext) (This)->lpVtbl->StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext)
+#define IWMReaderAdvanced5_GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength) (This)->lpVtbl->GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength)
+#define IWMReaderAdvanced5_SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength) (This)->lpVtbl->SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength)
+#define IWMReaderAdvanced5_Preroll(This,cnsStart,cnsDuration,fRate) (This)->lpVtbl->Preroll(This,cnsStart,cnsDuration,fRate)
+#define IWMReaderAdvanced5_SetLogClientID(This,fLogClientID) (This)->lpVtbl->SetLogClientID(This,fLogClientID)
+#define IWMReaderAdvanced5_GetLogClientID(This,pfLogClientID) (This)->lpVtbl->GetLogClientID(This,pfLogClientID)
+#define IWMReaderAdvanced5_StopBuffering(This) (This)->lpVtbl->StopBuffering(This)
+#define IWMReaderAdvanced5_OpenStream(This,pStream,pCallback,pvContext) (This)->lpVtbl->OpenStream(This,pStream,pCallback,pvContext)
+/*** IWMReaderAdvanced3 methods ***/
+#define IWMReaderAdvanced5_StopNetStreaming(This) (This)->lpVtbl->StopNetStreaming(This)
+#define IWMReaderAdvanced5_StartAtPosition(This,wStreamNum,pvOffsetStart,pvDuration,dwOffsetFormat,fRate,pvContext) (This)->lpVtbl->StartAtPosition(This,wStreamNum,pvOffsetStart,pvDuration,dwOffsetFormat,fRate,pvContext)
+/*** IWMReaderAdvanced4 methods ***/
+#define IWMReaderAdvanced5_GetLanguageCount(This,dwOutputNum,pwLanguageCount) (This)->lpVtbl->GetLanguageCount(This,dwOutputNum,pwLanguageCount)
+#define IWMReaderAdvanced5_GetLanguage(This,dwOutputNum,wLanguage,pwszLanguageString,pcchLanguageStringLength) (This)->lpVtbl->GetLanguage(This,dwOutputNum,wLanguage,pwszLanguageString,pcchLanguageStringLength)
+#define IWMReaderAdvanced5_GetMaxSpeedFactor(This,pdblFactor) (This)->lpVtbl->GetMaxSpeedFactor(This,pdblFactor)
+#define IWMReaderAdvanced5_IsUsingFastCache(This,pfUsingFastCache) (This)->lpVtbl->IsUsingFastCache(This,pfUsingFastCache)
+#define IWMReaderAdvanced5_AddLogParam(This,wszNameSpace,wszName,wszValue) (This)->lpVtbl->AddLogParam(This,wszNameSpace,wszName,wszValue)
+#define IWMReaderAdvanced5_SendLogParams(This) (This)->lpVtbl->SendLogParams(This)
+#define IWMReaderAdvanced5_CanSaveFileAs(This,pfCanSave) (This)->lpVtbl->CanSaveFileAs(This,pfCanSave)
+#define IWMReaderAdvanced5_CancelSaveFileAs(This) (This)->lpVtbl->CancelSaveFileAs(This)
+#define IWMReaderAdvanced5_GetURL(This,pwszURL,pcchURL) (This)->lpVtbl->GetURL(This,pwszURL,pcchURL)
+/*** IWMReaderAdvanced5 methods ***/
+#define IWMReaderAdvanced5_SetPlayerHook(This,dwOutputNum,pHook) (This)->lpVtbl->SetPlayerHook(This,dwOutputNum,pHook)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IWMReaderAdvanced5_QueryInterface(IWMReaderAdvanced5* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IWMReaderAdvanced5_AddRef(IWMReaderAdvanced5* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IWMReaderAdvanced5_Release(IWMReaderAdvanced5* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IWMReaderAdvanced methods ***/
+static FORCEINLINE HRESULT IWMReaderAdvanced5_SetUserProvidedClock(IWMReaderAdvanced5* This,WINBOOL fUserClock) {
+    return This->lpVtbl->SetUserProvidedClock(This,fUserClock);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_GetUserProvidedClock(IWMReaderAdvanced5* This,WINBOOL *pfUserClock) {
+    return This->lpVtbl->GetUserProvidedClock(This,pfUserClock);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_DeliverTime(IWMReaderAdvanced5* This,QWORD cnsTime) {
+    return This->lpVtbl->DeliverTime(This,cnsTime);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_SetManualStreamSelection(IWMReaderAdvanced5* This,WINBOOL fSelection) {
+    return This->lpVtbl->SetManualStreamSelection(This,fSelection);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_GetManualStreamSelection(IWMReaderAdvanced5* This,WINBOOL *pfSelection) {
+    return This->lpVtbl->GetManualStreamSelection(This,pfSelection);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_SetStreamsSelected(IWMReaderAdvanced5* This,WORD cStreamCount,WORD *pwStreamNumbers,WMT_STREAM_SELECTION *pSelections) {
+    return This->lpVtbl->SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_GetStreamSelected(IWMReaderAdvanced5* This,WORD wStreamNum,WMT_STREAM_SELECTION *pSelection) {
+    return This->lpVtbl->GetStreamSelected(This,wStreamNum,pSelection);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_SetReceiveSelectionCallbacks(IWMReaderAdvanced5* This,WINBOOL fGetCallbacks) {
+    return This->lpVtbl->SetReceiveSelectionCallbacks(This,fGetCallbacks);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_GetReceiveSelectionCallbacks(IWMReaderAdvanced5* This,WINBOOL *pfGetCallbacks) {
+    return This->lpVtbl->GetReceiveSelectionCallbacks(This,pfGetCallbacks);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_SetReceiveStreamSamples(IWMReaderAdvanced5* This,WORD wStreamNum,WINBOOL fReceiveStreamSamples) {
+    return This->lpVtbl->SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_GetReceiveStreamSamples(IWMReaderAdvanced5* This,WORD wStreamNum,WINBOOL *pfReceiveStreamSamples) {
+    return This->lpVtbl->GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_SetAllocateForOutput(IWMReaderAdvanced5* This,DWORD dwOutputNum,WINBOOL fAllocate) {
+    return This->lpVtbl->SetAllocateForOutput(This,dwOutputNum,fAllocate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_GetAllocateForOutput(IWMReaderAdvanced5* This,DWORD dwOutputNum,WINBOOL *pfAllocate) {
+    return This->lpVtbl->GetAllocateForOutput(This,dwOutputNum,pfAllocate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_SetAllocateForStream(IWMReaderAdvanced5* This,WORD wStreamNum,WINBOOL fAllocate) {
+    return This->lpVtbl->SetAllocateForStream(This,wStreamNum,fAllocate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_GetAllocateForStream(IWMReaderAdvanced5* This,WORD dwSreamNum,WINBOOL *pfAllocate) {
+    return This->lpVtbl->GetAllocateForStream(This,dwSreamNum,pfAllocate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_GetStatistics(IWMReaderAdvanced5* This,WM_READER_STATISTICS *pStatistics) {
+    return This->lpVtbl->GetStatistics(This,pStatistics);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_SetClientInfo(IWMReaderAdvanced5* This,WM_READER_CLIENTINFO *pClientInfo) {
+    return This->lpVtbl->SetClientInfo(This,pClientInfo);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_GetMaxOutputSampleSize(IWMReaderAdvanced5* This,DWORD dwOutput,DWORD *pcbMax) {
+    return This->lpVtbl->GetMaxOutputSampleSize(This,dwOutput,pcbMax);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_GetMaxStreamSampleSize(IWMReaderAdvanced5* This,WORD wStream,DWORD *pcbMax) {
+    return This->lpVtbl->GetMaxStreamSampleSize(This,wStream,pcbMax);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_NotifyLateDelivery(IWMReaderAdvanced5* This,QWORD cnsLateness) {
+    return This->lpVtbl->NotifyLateDelivery(This,cnsLateness);
+}
+/*** IWMReaderAdvanced2 methods ***/
+static FORCEINLINE HRESULT IWMReaderAdvanced5_SetPlayMode(IWMReaderAdvanced5* This,WMT_PLAY_MODE Mode) {
+    return This->lpVtbl->SetPlayMode(This,Mode);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_GetPlayMode(IWMReaderAdvanced5* This,WMT_PLAY_MODE *pMode) {
+    return This->lpVtbl->GetPlayMode(This,pMode);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_GetBufferProgress(IWMReaderAdvanced5* This,DWORD *pdwPercent,QWORD *pcnsBuffering) {
+    return This->lpVtbl->GetBufferProgress(This,pdwPercent,pcnsBuffering);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_GetDownloadProgress(IWMReaderAdvanced5* This,DWORD *pdwPercent,QWORD *pqwBytesDownloaded,QWORD *pcnsDownload) {
+    return This->lpVtbl->GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_GetSaveAsProgress(IWMReaderAdvanced5* This,DWORD *pdwPercent) {
+    return This->lpVtbl->GetSaveAsProgress(This,pdwPercent);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_SaveFileAs(IWMReaderAdvanced5* This,const WCHAR *pwszFilename) {
+    return This->lpVtbl->SaveFileAs(This,pwszFilename);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_GetProtocolName(IWMReaderAdvanced5* This,WCHAR *pwszProtocol,DWORD *pcchProtocol) {
+    return This->lpVtbl->GetProtocolName(This,pwszProtocol,pcchProtocol);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_StartAtMarker(IWMReaderAdvanced5* This,WORD wMarkerIndex,QWORD cnsDuration,float fRate,void *pvContext) {
+    return This->lpVtbl->StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_GetOutputSetting(IWMReaderAdvanced5* This,DWORD dwOutputNum,LPCWSTR pszName,WMT_ATTR_DATATYPE *pType,BYTE *pValue,WORD *pcbLength) {
+    return This->lpVtbl->GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_SetOutputSetting(IWMReaderAdvanced5* This,DWORD dwOutputNum,LPCWSTR pszName,WMT_ATTR_DATATYPE Type,const BYTE *pValue,WORD cbLength) {
+    return This->lpVtbl->SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_Preroll(IWMReaderAdvanced5* This,QWORD cnsStart,QWORD cnsDuration,float fRate) {
+    return This->lpVtbl->Preroll(This,cnsStart,cnsDuration,fRate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_SetLogClientID(IWMReaderAdvanced5* This,WINBOOL fLogClientID) {
+    return This->lpVtbl->SetLogClientID(This,fLogClientID);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_GetLogClientID(IWMReaderAdvanced5* This,WINBOOL *pfLogClientID) {
+    return This->lpVtbl->GetLogClientID(This,pfLogClientID);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_StopBuffering(IWMReaderAdvanced5* This) {
+    return This->lpVtbl->StopBuffering(This);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_OpenStream(IWMReaderAdvanced5* This,IStream *pStream,IWMReaderCallback *pCallback,void *pvContext) {
+    return This->lpVtbl->OpenStream(This,pStream,pCallback,pvContext);
+}
+/*** IWMReaderAdvanced3 methods ***/
+static FORCEINLINE HRESULT IWMReaderAdvanced5_StopNetStreaming(IWMReaderAdvanced5* This) {
+    return This->lpVtbl->StopNetStreaming(This);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_StartAtPosition(IWMReaderAdvanced5* This,WORD wStreamNum,void *pvOffsetStart,void *pvDuration,WMT_OFFSET_FORMAT dwOffsetFormat,float fRate,void *pvContext) {
+    return This->lpVtbl->StartAtPosition(This,wStreamNum,pvOffsetStart,pvDuration,dwOffsetFormat,fRate,pvContext);
+}
+/*** IWMReaderAdvanced4 methods ***/
+static FORCEINLINE HRESULT IWMReaderAdvanced5_GetLanguageCount(IWMReaderAdvanced5* This,DWORD dwOutputNum,WORD *pwLanguageCount) {
+    return This->lpVtbl->GetLanguageCount(This,dwOutputNum,pwLanguageCount);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_GetLanguage(IWMReaderAdvanced5* This,DWORD dwOutputNum,WORD wLanguage,WCHAR *pwszLanguageString,WORD *pcchLanguageStringLength) {
+    return This->lpVtbl->GetLanguage(This,dwOutputNum,wLanguage,pwszLanguageString,pcchLanguageStringLength);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_GetMaxSpeedFactor(IWMReaderAdvanced5* This,double *pdblFactor) {
+    return This->lpVtbl->GetMaxSpeedFactor(This,pdblFactor);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_IsUsingFastCache(IWMReaderAdvanced5* This,WINBOOL *pfUsingFastCache) {
+    return This->lpVtbl->IsUsingFastCache(This,pfUsingFastCache);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_AddLogParam(IWMReaderAdvanced5* This,LPCWSTR wszNameSpace,LPCWSTR wszName,LPCWSTR wszValue) {
+    return This->lpVtbl->AddLogParam(This,wszNameSpace,wszName,wszValue);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_SendLogParams(IWMReaderAdvanced5* This) {
+    return This->lpVtbl->SendLogParams(This);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_CanSaveFileAs(IWMReaderAdvanced5* This,WINBOOL *pfCanSave) {
+    return This->lpVtbl->CanSaveFileAs(This,pfCanSave);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_CancelSaveFileAs(IWMReaderAdvanced5* This) {
+    return This->lpVtbl->CancelSaveFileAs(This);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced5_GetURL(IWMReaderAdvanced5* This,WCHAR *pwszURL,DWORD *pcchURL) {
+    return This->lpVtbl->GetURL(This,pwszURL,pcchURL);
+}
+/*** IWMReaderAdvanced5 methods ***/
+static FORCEINLINE HRESULT IWMReaderAdvanced5_SetPlayerHook(IWMReaderAdvanced5* This,DWORD dwOutputNum,IWMPlayerHook *pHook) {
+    return This->lpVtbl->SetPlayerHook(This,dwOutputNum,pHook);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced5_SetPlayerHook_Proxy(
+    IWMReaderAdvanced5* This,
+    DWORD dwOutputNum,
+    IWMPlayerHook *pHook);
+void __RPC_STUB IWMReaderAdvanced5_SetPlayerHook_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWMReaderAdvanced5_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWMReaderAdvanced6 interface
+ */
+#ifndef __IWMReaderAdvanced6_INTERFACE_DEFINED__
+#define __IWMReaderAdvanced6_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWMReaderAdvanced6, 0x18a2e7f8, 0x428f, 0x4acd, 0x8a,0x00, 0xe6,0x46,0x39,0xbc,0x93,0xde);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("18a2e7f8-428f-4acd-8a00-e64639bc93de")
+IWMReaderAdvanced6 : public IWMReaderAdvanced5
+{
+    virtual HRESULT STDMETHODCALLTYPE SetProtectStreamSamples(
+        BYTE *pbCertificate,
+        DWORD cbCertificate,
+        DWORD dwCertificateType,
+        DWORD dwFlags,
+        BYTE *pbInitializationVector,
+        DWORD *pcbInitializationVector) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IWMReaderAdvanced6, 0x18a2e7f8, 0x428f, 0x4acd, 0x8a,0x00, 0xe6,0x46,0x39,0xbc,0x93,0xde)
+#endif
+#else
+typedef struct IWMReaderAdvanced6Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWMReaderAdvanced6* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWMReaderAdvanced6* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWMReaderAdvanced6* This);
+
+    /*** IWMReaderAdvanced methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetUserProvidedClock)(
+        IWMReaderAdvanced6* This,
+        WINBOOL fUserClock);
+
+    HRESULT (STDMETHODCALLTYPE *GetUserProvidedClock)(
+        IWMReaderAdvanced6* This,
+        WINBOOL *pfUserClock);
+
+    HRESULT (STDMETHODCALLTYPE *DeliverTime)(
+        IWMReaderAdvanced6* This,
+        QWORD cnsTime);
+
+    HRESULT (STDMETHODCALLTYPE *SetManualStreamSelection)(
+        IWMReaderAdvanced6* This,
+        WINBOOL fSelection);
+
+    HRESULT (STDMETHODCALLTYPE *GetManualStreamSelection)(
+        IWMReaderAdvanced6* This,
+        WINBOOL *pfSelection);
+
+    HRESULT (STDMETHODCALLTYPE *SetStreamsSelected)(
+        IWMReaderAdvanced6* This,
+        WORD cStreamCount,
+        WORD *pwStreamNumbers,
+        WMT_STREAM_SELECTION *pSelections);
+
+    HRESULT (STDMETHODCALLTYPE *GetStreamSelected)(
+        IWMReaderAdvanced6* This,
+        WORD wStreamNum,
+        WMT_STREAM_SELECTION *pSelection);
+
+    HRESULT (STDMETHODCALLTYPE *SetReceiveSelectionCallbacks)(
+        IWMReaderAdvanced6* This,
+        WINBOOL fGetCallbacks);
+
+    HRESULT (STDMETHODCALLTYPE *GetReceiveSelectionCallbacks)(
+        IWMReaderAdvanced6* This,
+        WINBOOL *pfGetCallbacks);
+
+    HRESULT (STDMETHODCALLTYPE *SetReceiveStreamSamples)(
+        IWMReaderAdvanced6* This,
+        WORD wStreamNum,
+        WINBOOL fReceiveStreamSamples);
+
+    HRESULT (STDMETHODCALLTYPE *GetReceiveStreamSamples)(
+        IWMReaderAdvanced6* This,
+        WORD wStreamNum,
+        WINBOOL *pfReceiveStreamSamples);
+
+    HRESULT (STDMETHODCALLTYPE *SetAllocateForOutput)(
+        IWMReaderAdvanced6* This,
+        DWORD dwOutputNum,
+        WINBOOL fAllocate);
+
+    HRESULT (STDMETHODCALLTYPE *GetAllocateForOutput)(
+        IWMReaderAdvanced6* This,
+        DWORD dwOutputNum,
+        WINBOOL *pfAllocate);
+
+    HRESULT (STDMETHODCALLTYPE *SetAllocateForStream)(
+        IWMReaderAdvanced6* This,
+        WORD wStreamNum,
+        WINBOOL fAllocate);
+
+    HRESULT (STDMETHODCALLTYPE *GetAllocateForStream)(
+        IWMReaderAdvanced6* This,
+        WORD dwSreamNum,
+        WINBOOL *pfAllocate);
+
+    HRESULT (STDMETHODCALLTYPE *GetStatistics)(
+        IWMReaderAdvanced6* This,
+        WM_READER_STATISTICS *pStatistics);
+
+    HRESULT (STDMETHODCALLTYPE *SetClientInfo)(
+        IWMReaderAdvanced6* This,
+        WM_READER_CLIENTINFO *pClientInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetMaxOutputSampleSize)(
+        IWMReaderAdvanced6* This,
+        DWORD dwOutput,
+        DWORD *pcbMax);
+
+    HRESULT (STDMETHODCALLTYPE *GetMaxStreamSampleSize)(
+        IWMReaderAdvanced6* This,
+        WORD wStream,
+        DWORD *pcbMax);
+
+    HRESULT (STDMETHODCALLTYPE *NotifyLateDelivery)(
+        IWMReaderAdvanced6* This,
+        QWORD cnsLateness);
+
+    /*** IWMReaderAdvanced2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPlayMode)(
+        IWMReaderAdvanced6* This,
+        WMT_PLAY_MODE Mode);
+
+    HRESULT (STDMETHODCALLTYPE *GetPlayMode)(
+        IWMReaderAdvanced6* This,
+        WMT_PLAY_MODE *pMode);
+
+    HRESULT (STDMETHODCALLTYPE *GetBufferProgress)(
+        IWMReaderAdvanced6* This,
+        DWORD *pdwPercent,
+        QWORD *pcnsBuffering);
+
+    HRESULT (STDMETHODCALLTYPE *GetDownloadProgress)(
+        IWMReaderAdvanced6* This,
+        DWORD *pdwPercent,
+        QWORD *pqwBytesDownloaded,
+        QWORD *pcnsDownload);
+
+    HRESULT (STDMETHODCALLTYPE *GetSaveAsProgress)(
+        IWMReaderAdvanced6* This,
+        DWORD *pdwPercent);
+
+    HRESULT (STDMETHODCALLTYPE *SaveFileAs)(
+        IWMReaderAdvanced6* This,
+        const WCHAR *pwszFilename);
+
+    HRESULT (STDMETHODCALLTYPE *GetProtocolName)(
+        IWMReaderAdvanced6* This,
+        WCHAR *pwszProtocol,
+        DWORD *pcchProtocol);
+
+    HRESULT (STDMETHODCALLTYPE *StartAtMarker)(
+        IWMReaderAdvanced6* This,
+        WORD wMarkerIndex,
+        QWORD cnsDuration,
+        float fRate,
+        void *pvContext);
+
+    HRESULT (STDMETHODCALLTYPE *GetOutputSetting)(
+        IWMReaderAdvanced6* This,
+        DWORD dwOutputNum,
+        LPCWSTR pszName,
+        WMT_ATTR_DATATYPE *pType,
+        BYTE *pValue,
+        WORD *pcbLength);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputSetting)(
+        IWMReaderAdvanced6* This,
+        DWORD dwOutputNum,
+        LPCWSTR pszName,
+        WMT_ATTR_DATATYPE Type,
+        const BYTE *pValue,
+        WORD cbLength);
+
+    HRESULT (STDMETHODCALLTYPE *Preroll)(
+        IWMReaderAdvanced6* This,
+        QWORD cnsStart,
+        QWORD cnsDuration,
+        float fRate);
+
+    HRESULT (STDMETHODCALLTYPE *SetLogClientID)(
+        IWMReaderAdvanced6* This,
+        WINBOOL fLogClientID);
+
+    HRESULT (STDMETHODCALLTYPE *GetLogClientID)(
+        IWMReaderAdvanced6* This,
+        WINBOOL *pfLogClientID);
+
+    HRESULT (STDMETHODCALLTYPE *StopBuffering)(
+        IWMReaderAdvanced6* This);
+
+    HRESULT (STDMETHODCALLTYPE *OpenStream)(
+        IWMReaderAdvanced6* This,
+        IStream *pStream,
+        IWMReaderCallback *pCallback,
+        void *pvContext);
+
+    /*** IWMReaderAdvanced3 methods ***/
+    HRESULT (STDMETHODCALLTYPE *StopNetStreaming)(
+        IWMReaderAdvanced6* This);
+
+    HRESULT (STDMETHODCALLTYPE *StartAtPosition)(
+        IWMReaderAdvanced6* This,
+        WORD wStreamNum,
+        void *pvOffsetStart,
+        void *pvDuration,
+        WMT_OFFSET_FORMAT dwOffsetFormat,
+        float fRate,
+        void *pvContext);
+
+    /*** IWMReaderAdvanced4 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetLanguageCount)(
+        IWMReaderAdvanced6* This,
+        DWORD dwOutputNum,
+        WORD *pwLanguageCount);
+
+    HRESULT (STDMETHODCALLTYPE *GetLanguage)(
+        IWMReaderAdvanced6* This,
+        DWORD dwOutputNum,
+        WORD wLanguage,
+        WCHAR *pwszLanguageString,
+        WORD *pcchLanguageStringLength);
+
+    HRESULT (STDMETHODCALLTYPE *GetMaxSpeedFactor)(
+        IWMReaderAdvanced6* This,
+        double *pdblFactor);
+
+    HRESULT (STDMETHODCALLTYPE *IsUsingFastCache)(
+        IWMReaderAdvanced6* This,
+        WINBOOL *pfUsingFastCache);
+
+    HRESULT (STDMETHODCALLTYPE *AddLogParam)(
+        IWMReaderAdvanced6* This,
+        LPCWSTR wszNameSpace,
+        LPCWSTR wszName,
+        LPCWSTR wszValue);
+
+    HRESULT (STDMETHODCALLTYPE *SendLogParams)(
+        IWMReaderAdvanced6* This);
+
+    HRESULT (STDMETHODCALLTYPE *CanSaveFileAs)(
+        IWMReaderAdvanced6* This,
+        WINBOOL *pfCanSave);
+
+    HRESULT (STDMETHODCALLTYPE *CancelSaveFileAs)(
+        IWMReaderAdvanced6* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetURL)(
+        IWMReaderAdvanced6* This,
+        WCHAR *pwszURL,
+        DWORD *pcchURL);
+
+    /*** IWMReaderAdvanced5 methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPlayerHook)(
+        IWMReaderAdvanced6* This,
+        DWORD dwOutputNum,
+        IWMPlayerHook *pHook);
+
+    /*** IWMReaderAdvanced6 methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetProtectStreamSamples)(
+        IWMReaderAdvanced6* This,
+        BYTE *pbCertificate,
+        DWORD cbCertificate,
+        DWORD dwCertificateType,
+        DWORD dwFlags,
+        BYTE *pbInitializationVector,
+        DWORD *pcbInitializationVector);
+
+    END_INTERFACE
+} IWMReaderAdvanced6Vtbl;
+interface IWMReaderAdvanced6 {
+    CONST_VTBL IWMReaderAdvanced6Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IWMReaderAdvanced6_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWMReaderAdvanced6_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWMReaderAdvanced6_Release(This) (This)->lpVtbl->Release(This)
+/*** IWMReaderAdvanced methods ***/
+#define IWMReaderAdvanced6_SetUserProvidedClock(This,fUserClock) (This)->lpVtbl->SetUserProvidedClock(This,fUserClock)
+#define IWMReaderAdvanced6_GetUserProvidedClock(This,pfUserClock) (This)->lpVtbl->GetUserProvidedClock(This,pfUserClock)
+#define IWMReaderAdvanced6_DeliverTime(This,cnsTime) (This)->lpVtbl->DeliverTime(This,cnsTime)
+#define IWMReaderAdvanced6_SetManualStreamSelection(This,fSelection) (This)->lpVtbl->SetManualStreamSelection(This,fSelection)
+#define IWMReaderAdvanced6_GetManualStreamSelection(This,pfSelection) (This)->lpVtbl->GetManualStreamSelection(This,pfSelection)
+#define IWMReaderAdvanced6_SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections) (This)->lpVtbl->SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections)
+#define IWMReaderAdvanced6_GetStreamSelected(This,wStreamNum,pSelection) (This)->lpVtbl->GetStreamSelected(This,wStreamNum,pSelection)
+#define IWMReaderAdvanced6_SetReceiveSelectionCallbacks(This,fGetCallbacks) (This)->lpVtbl->SetReceiveSelectionCallbacks(This,fGetCallbacks)
+#define IWMReaderAdvanced6_GetReceiveSelectionCallbacks(This,pfGetCallbacks) (This)->lpVtbl->GetReceiveSelectionCallbacks(This,pfGetCallbacks)
+#define IWMReaderAdvanced6_SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples) (This)->lpVtbl->SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples)
+#define IWMReaderAdvanced6_GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples) (This)->lpVtbl->GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples)
+#define IWMReaderAdvanced6_SetAllocateForOutput(This,dwOutputNum,fAllocate) (This)->lpVtbl->SetAllocateForOutput(This,dwOutputNum,fAllocate)
+#define IWMReaderAdvanced6_GetAllocateForOutput(This,dwOutputNum,pfAllocate) (This)->lpVtbl->GetAllocateForOutput(This,dwOutputNum,pfAllocate)
+#define IWMReaderAdvanced6_SetAllocateForStream(This,wStreamNum,fAllocate) (This)->lpVtbl->SetAllocateForStream(This,wStreamNum,fAllocate)
+#define IWMReaderAdvanced6_GetAllocateForStream(This,dwSreamNum,pfAllocate) (This)->lpVtbl->GetAllocateForStream(This,dwSreamNum,pfAllocate)
+#define IWMReaderAdvanced6_GetStatistics(This,pStatistics) (This)->lpVtbl->GetStatistics(This,pStatistics)
+#define IWMReaderAdvanced6_SetClientInfo(This,pClientInfo) (This)->lpVtbl->SetClientInfo(This,pClientInfo)
+#define IWMReaderAdvanced6_GetMaxOutputSampleSize(This,dwOutput,pcbMax) (This)->lpVtbl->GetMaxOutputSampleSize(This,dwOutput,pcbMax)
+#define IWMReaderAdvanced6_GetMaxStreamSampleSize(This,wStream,pcbMax) (This)->lpVtbl->GetMaxStreamSampleSize(This,wStream,pcbMax)
+#define IWMReaderAdvanced6_NotifyLateDelivery(This,cnsLateness) (This)->lpVtbl->NotifyLateDelivery(This,cnsLateness)
+/*** IWMReaderAdvanced2 methods ***/
+#define IWMReaderAdvanced6_SetPlayMode(This,Mode) (This)->lpVtbl->SetPlayMode(This,Mode)
+#define IWMReaderAdvanced6_GetPlayMode(This,pMode) (This)->lpVtbl->GetPlayMode(This,pMode)
+#define IWMReaderAdvanced6_GetBufferProgress(This,pdwPercent,pcnsBuffering) (This)->lpVtbl->GetBufferProgress(This,pdwPercent,pcnsBuffering)
+#define IWMReaderAdvanced6_GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload) (This)->lpVtbl->GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload)
+#define IWMReaderAdvanced6_GetSaveAsProgress(This,pdwPercent) (This)->lpVtbl->GetSaveAsProgress(This,pdwPercent)
+#define IWMReaderAdvanced6_SaveFileAs(This,pwszFilename) (This)->lpVtbl->SaveFileAs(This,pwszFilename)
+#define IWMReaderAdvanced6_GetProtocolName(This,pwszProtocol,pcchProtocol) (This)->lpVtbl->GetProtocolName(This,pwszProtocol,pcchProtocol)
+#define IWMReaderAdvanced6_StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext) (This)->lpVtbl->StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext)
+#define IWMReaderAdvanced6_GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength) (This)->lpVtbl->GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength)
+#define IWMReaderAdvanced6_SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength) (This)->lpVtbl->SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength)
+#define IWMReaderAdvanced6_Preroll(This,cnsStart,cnsDuration,fRate) (This)->lpVtbl->Preroll(This,cnsStart,cnsDuration,fRate)
+#define IWMReaderAdvanced6_SetLogClientID(This,fLogClientID) (This)->lpVtbl->SetLogClientID(This,fLogClientID)
+#define IWMReaderAdvanced6_GetLogClientID(This,pfLogClientID) (This)->lpVtbl->GetLogClientID(This,pfLogClientID)
+#define IWMReaderAdvanced6_StopBuffering(This) (This)->lpVtbl->StopBuffering(This)
+#define IWMReaderAdvanced6_OpenStream(This,pStream,pCallback,pvContext) (This)->lpVtbl->OpenStream(This,pStream,pCallback,pvContext)
+/*** IWMReaderAdvanced3 methods ***/
+#define IWMReaderAdvanced6_StopNetStreaming(This) (This)->lpVtbl->StopNetStreaming(This)
+#define IWMReaderAdvanced6_StartAtPosition(This,wStreamNum,pvOffsetStart,pvDuration,dwOffsetFormat,fRate,pvContext) (This)->lpVtbl->StartAtPosition(This,wStreamNum,pvOffsetStart,pvDuration,dwOffsetFormat,fRate,pvContext)
+/*** IWMReaderAdvanced4 methods ***/
+#define IWMReaderAdvanced6_GetLanguageCount(This,dwOutputNum,pwLanguageCount) (This)->lpVtbl->GetLanguageCount(This,dwOutputNum,pwLanguageCount)
+#define IWMReaderAdvanced6_GetLanguage(This,dwOutputNum,wLanguage,pwszLanguageString,pcchLanguageStringLength) (This)->lpVtbl->GetLanguage(This,dwOutputNum,wLanguage,pwszLanguageString,pcchLanguageStringLength)
+#define IWMReaderAdvanced6_GetMaxSpeedFactor(This,pdblFactor) (This)->lpVtbl->GetMaxSpeedFactor(This,pdblFactor)
+#define IWMReaderAdvanced6_IsUsingFastCache(This,pfUsingFastCache) (This)->lpVtbl->IsUsingFastCache(This,pfUsingFastCache)
+#define IWMReaderAdvanced6_AddLogParam(This,wszNameSpace,wszName,wszValue) (This)->lpVtbl->AddLogParam(This,wszNameSpace,wszName,wszValue)
+#define IWMReaderAdvanced6_SendLogParams(This) (This)->lpVtbl->SendLogParams(This)
+#define IWMReaderAdvanced6_CanSaveFileAs(This,pfCanSave) (This)->lpVtbl->CanSaveFileAs(This,pfCanSave)
+#define IWMReaderAdvanced6_CancelSaveFileAs(This) (This)->lpVtbl->CancelSaveFileAs(This)
+#define IWMReaderAdvanced6_GetURL(This,pwszURL,pcchURL) (This)->lpVtbl->GetURL(This,pwszURL,pcchURL)
+/*** IWMReaderAdvanced5 methods ***/
+#define IWMReaderAdvanced6_SetPlayerHook(This,dwOutputNum,pHook) (This)->lpVtbl->SetPlayerHook(This,dwOutputNum,pHook)
+/*** IWMReaderAdvanced6 methods ***/
+#define IWMReaderAdvanced6_SetProtectStreamSamples(This,pbCertificate,cbCertificate,dwCertificateType,dwFlags,pbInitializationVector,pcbInitializationVector) (This)->lpVtbl->SetProtectStreamSamples(This,pbCertificate,cbCertificate,dwCertificateType,dwFlags,pbInitializationVector,pcbInitializationVector)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IWMReaderAdvanced6_QueryInterface(IWMReaderAdvanced6* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IWMReaderAdvanced6_AddRef(IWMReaderAdvanced6* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IWMReaderAdvanced6_Release(IWMReaderAdvanced6* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IWMReaderAdvanced methods ***/
+static FORCEINLINE HRESULT IWMReaderAdvanced6_SetUserProvidedClock(IWMReaderAdvanced6* This,WINBOOL fUserClock) {
+    return This->lpVtbl->SetUserProvidedClock(This,fUserClock);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_GetUserProvidedClock(IWMReaderAdvanced6* This,WINBOOL *pfUserClock) {
+    return This->lpVtbl->GetUserProvidedClock(This,pfUserClock);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_DeliverTime(IWMReaderAdvanced6* This,QWORD cnsTime) {
+    return This->lpVtbl->DeliverTime(This,cnsTime);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_SetManualStreamSelection(IWMReaderAdvanced6* This,WINBOOL fSelection) {
+    return This->lpVtbl->SetManualStreamSelection(This,fSelection);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_GetManualStreamSelection(IWMReaderAdvanced6* This,WINBOOL *pfSelection) {
+    return This->lpVtbl->GetManualStreamSelection(This,pfSelection);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_SetStreamsSelected(IWMReaderAdvanced6* This,WORD cStreamCount,WORD *pwStreamNumbers,WMT_STREAM_SELECTION *pSelections) {
+    return This->lpVtbl->SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_GetStreamSelected(IWMReaderAdvanced6* This,WORD wStreamNum,WMT_STREAM_SELECTION *pSelection) {
+    return This->lpVtbl->GetStreamSelected(This,wStreamNum,pSelection);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_SetReceiveSelectionCallbacks(IWMReaderAdvanced6* This,WINBOOL fGetCallbacks) {
+    return This->lpVtbl->SetReceiveSelectionCallbacks(This,fGetCallbacks);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_GetReceiveSelectionCallbacks(IWMReaderAdvanced6* This,WINBOOL *pfGetCallbacks) {
+    return This->lpVtbl->GetReceiveSelectionCallbacks(This,pfGetCallbacks);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_SetReceiveStreamSamples(IWMReaderAdvanced6* This,WORD wStreamNum,WINBOOL fReceiveStreamSamples) {
+    return This->lpVtbl->SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_GetReceiveStreamSamples(IWMReaderAdvanced6* This,WORD wStreamNum,WINBOOL *pfReceiveStreamSamples) {
+    return This->lpVtbl->GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_SetAllocateForOutput(IWMReaderAdvanced6* This,DWORD dwOutputNum,WINBOOL fAllocate) {
+    return This->lpVtbl->SetAllocateForOutput(This,dwOutputNum,fAllocate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_GetAllocateForOutput(IWMReaderAdvanced6* This,DWORD dwOutputNum,WINBOOL *pfAllocate) {
+    return This->lpVtbl->GetAllocateForOutput(This,dwOutputNum,pfAllocate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_SetAllocateForStream(IWMReaderAdvanced6* This,WORD wStreamNum,WINBOOL fAllocate) {
+    return This->lpVtbl->SetAllocateForStream(This,wStreamNum,fAllocate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_GetAllocateForStream(IWMReaderAdvanced6* This,WORD dwSreamNum,WINBOOL *pfAllocate) {
+    return This->lpVtbl->GetAllocateForStream(This,dwSreamNum,pfAllocate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_GetStatistics(IWMReaderAdvanced6* This,WM_READER_STATISTICS *pStatistics) {
+    return This->lpVtbl->GetStatistics(This,pStatistics);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_SetClientInfo(IWMReaderAdvanced6* This,WM_READER_CLIENTINFO *pClientInfo) {
+    return This->lpVtbl->SetClientInfo(This,pClientInfo);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_GetMaxOutputSampleSize(IWMReaderAdvanced6* This,DWORD dwOutput,DWORD *pcbMax) {
+    return This->lpVtbl->GetMaxOutputSampleSize(This,dwOutput,pcbMax);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_GetMaxStreamSampleSize(IWMReaderAdvanced6* This,WORD wStream,DWORD *pcbMax) {
+    return This->lpVtbl->GetMaxStreamSampleSize(This,wStream,pcbMax);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_NotifyLateDelivery(IWMReaderAdvanced6* This,QWORD cnsLateness) {
+    return This->lpVtbl->NotifyLateDelivery(This,cnsLateness);
+}
+/*** IWMReaderAdvanced2 methods ***/
+static FORCEINLINE HRESULT IWMReaderAdvanced6_SetPlayMode(IWMReaderAdvanced6* This,WMT_PLAY_MODE Mode) {
+    return This->lpVtbl->SetPlayMode(This,Mode);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_GetPlayMode(IWMReaderAdvanced6* This,WMT_PLAY_MODE *pMode) {
+    return This->lpVtbl->GetPlayMode(This,pMode);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_GetBufferProgress(IWMReaderAdvanced6* This,DWORD *pdwPercent,QWORD *pcnsBuffering) {
+    return This->lpVtbl->GetBufferProgress(This,pdwPercent,pcnsBuffering);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_GetDownloadProgress(IWMReaderAdvanced6* This,DWORD *pdwPercent,QWORD *pqwBytesDownloaded,QWORD *pcnsDownload) {
+    return This->lpVtbl->GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_GetSaveAsProgress(IWMReaderAdvanced6* This,DWORD *pdwPercent) {
+    return This->lpVtbl->GetSaveAsProgress(This,pdwPercent);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_SaveFileAs(IWMReaderAdvanced6* This,const WCHAR *pwszFilename) {
+    return This->lpVtbl->SaveFileAs(This,pwszFilename);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_GetProtocolName(IWMReaderAdvanced6* This,WCHAR *pwszProtocol,DWORD *pcchProtocol) {
+    return This->lpVtbl->GetProtocolName(This,pwszProtocol,pcchProtocol);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_StartAtMarker(IWMReaderAdvanced6* This,WORD wMarkerIndex,QWORD cnsDuration,float fRate,void *pvContext) {
+    return This->lpVtbl->StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_GetOutputSetting(IWMReaderAdvanced6* This,DWORD dwOutputNum,LPCWSTR pszName,WMT_ATTR_DATATYPE *pType,BYTE *pValue,WORD *pcbLength) {
+    return This->lpVtbl->GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_SetOutputSetting(IWMReaderAdvanced6* This,DWORD dwOutputNum,LPCWSTR pszName,WMT_ATTR_DATATYPE Type,const BYTE *pValue,WORD cbLength) {
+    return This->lpVtbl->SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_Preroll(IWMReaderAdvanced6* This,QWORD cnsStart,QWORD cnsDuration,float fRate) {
+    return This->lpVtbl->Preroll(This,cnsStart,cnsDuration,fRate);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_SetLogClientID(IWMReaderAdvanced6* This,WINBOOL fLogClientID) {
+    return This->lpVtbl->SetLogClientID(This,fLogClientID);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_GetLogClientID(IWMReaderAdvanced6* This,WINBOOL *pfLogClientID) {
+    return This->lpVtbl->GetLogClientID(This,pfLogClientID);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_StopBuffering(IWMReaderAdvanced6* This) {
+    return This->lpVtbl->StopBuffering(This);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_OpenStream(IWMReaderAdvanced6* This,IStream *pStream,IWMReaderCallback *pCallback,void *pvContext) {
+    return This->lpVtbl->OpenStream(This,pStream,pCallback,pvContext);
+}
+/*** IWMReaderAdvanced3 methods ***/
+static FORCEINLINE HRESULT IWMReaderAdvanced6_StopNetStreaming(IWMReaderAdvanced6* This) {
+    return This->lpVtbl->StopNetStreaming(This);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_StartAtPosition(IWMReaderAdvanced6* This,WORD wStreamNum,void *pvOffsetStart,void *pvDuration,WMT_OFFSET_FORMAT dwOffsetFormat,float fRate,void *pvContext) {
+    return This->lpVtbl->StartAtPosition(This,wStreamNum,pvOffsetStart,pvDuration,dwOffsetFormat,fRate,pvContext);
+}
+/*** IWMReaderAdvanced4 methods ***/
+static FORCEINLINE HRESULT IWMReaderAdvanced6_GetLanguageCount(IWMReaderAdvanced6* This,DWORD dwOutputNum,WORD *pwLanguageCount) {
+    return This->lpVtbl->GetLanguageCount(This,dwOutputNum,pwLanguageCount);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_GetLanguage(IWMReaderAdvanced6* This,DWORD dwOutputNum,WORD wLanguage,WCHAR *pwszLanguageString,WORD *pcchLanguageStringLength) {
+    return This->lpVtbl->GetLanguage(This,dwOutputNum,wLanguage,pwszLanguageString,pcchLanguageStringLength);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_GetMaxSpeedFactor(IWMReaderAdvanced6* This,double *pdblFactor) {
+    return This->lpVtbl->GetMaxSpeedFactor(This,pdblFactor);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_IsUsingFastCache(IWMReaderAdvanced6* This,WINBOOL *pfUsingFastCache) {
+    return This->lpVtbl->IsUsingFastCache(This,pfUsingFastCache);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_AddLogParam(IWMReaderAdvanced6* This,LPCWSTR wszNameSpace,LPCWSTR wszName,LPCWSTR wszValue) {
+    return This->lpVtbl->AddLogParam(This,wszNameSpace,wszName,wszValue);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_SendLogParams(IWMReaderAdvanced6* This) {
+    return This->lpVtbl->SendLogParams(This);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_CanSaveFileAs(IWMReaderAdvanced6* This,WINBOOL *pfCanSave) {
+    return This->lpVtbl->CanSaveFileAs(This,pfCanSave);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_CancelSaveFileAs(IWMReaderAdvanced6* This) {
+    return This->lpVtbl->CancelSaveFileAs(This);
+}
+static FORCEINLINE HRESULT IWMReaderAdvanced6_GetURL(IWMReaderAdvanced6* This,WCHAR *pwszURL,DWORD *pcchURL) {
+    return This->lpVtbl->GetURL(This,pwszURL,pcchURL);
+}
+/*** IWMReaderAdvanced5 methods ***/
+static FORCEINLINE HRESULT IWMReaderAdvanced6_SetPlayerHook(IWMReaderAdvanced6* This,DWORD dwOutputNum,IWMPlayerHook *pHook) {
+    return This->lpVtbl->SetPlayerHook(This,dwOutputNum,pHook);
+}
+/*** IWMReaderAdvanced6 methods ***/
+static FORCEINLINE HRESULT IWMReaderAdvanced6_SetProtectStreamSamples(IWMReaderAdvanced6* This,BYTE *pbCertificate,DWORD cbCertificate,DWORD dwCertificateType,DWORD dwFlags,BYTE *pbInitializationVector,DWORD *pcbInitializationVector) {
+    return This->lpVtbl->SetProtectStreamSamples(This,pbCertificate,cbCertificate,dwCertificateType,dwFlags,pbInitializationVector,pcbInitializationVector);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWMReaderAdvanced6_SetProtectStreamSamples_Proxy(
+    IWMReaderAdvanced6* This,
+    BYTE *pbCertificate,
+    DWORD cbCertificate,
+    DWORD dwCertificateType,
+    DWORD dwFlags,
+    BYTE *pbInitializationVector,
+    DWORD *pcbInitializationVector);
+void __RPC_STUB IWMReaderAdvanced6_SetProtectStreamSamples_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWMReaderAdvanced6_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
  * IWMSyncReader interface
  */
 #ifndef __IWMSyncReader_INTERFACE_DEFINED__
@@ -4206,6 +7468,7 @@
 #endif  /* __IWMWriterAdvanced3_INTERFACE_DEFINED__ */
 
 HRESULT WINAPI WMCreateWriter(IUnknown*,IWMWriter**);
+HRESULT WINAPI WMCreateReader(IUnknown*,DWORD,IWMReader**);
 EXTERN_GUID(WMMEDIASUBTYPE_Base,   0x00000000,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
 EXTERN_GUID(WMMEDIATYPE_Video,     0x73646976,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
 EXTERN_GUID(WMMEDIASUBTYPE_RGB1,   0xe436eb78,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);
diff --git a/x86_64-w64-mingw32/include/wrl.h b/x86_64-w64-mingw32/include/wrl.h
new file mode 100644
index 0000000..be147fe
--- /dev/null
+++ b/x86_64-w64-mingw32/include/wrl.h
@@ -0,0 +1,15 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef _WRL_H_
+#define _WRL_H_
+
+#include <wrl/client.h>
+/* #include <wrl/implements.h> */
+#include <wrl/module.h>
+/* #include <wrl/event.h> */
+
+#endif
diff --git a/x86_64-w64-mingw32/include/wrl/client.h b/x86_64-w64-mingw32/include/wrl/client.h
new file mode 100644
index 0000000..83b4cb3
--- /dev/null
+++ b/x86_64-w64-mingw32/include/wrl/client.h
@@ -0,0 +1,308 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef _WRL_CLIENT_H_
+#define _WRL_CLIENT_H_
+
+#include <stddef.h>
+#include <unknwn.h>
+/* #include <weakreference.h> */
+#include <roapi.h>
+
+/* #include <wrl/def.h> */
+#include <wrl/internal.h>
+
+namespace Microsoft {
+    namespace WRL {
+        namespace Details {
+            template <typename T> class ComPtrRefBase {
+            protected:
+                T* ptr_;
+
+            public:
+                typedef typename T::InterfaceType InterfaceType;
+
+#ifndef __WRL_CLASSIC_COM__
+                operator IInspectable**() const throw()  {
+                    static_assert(__is_base_of(IInspectable, InterfaceType), "Invalid cast");
+                    return reinterpret_cast<IInspectable**>(ptr_->ReleaseAndGetAddressOf());
+                }
+#endif
+
+                operator IUnknown**() const throw() {
+                    static_assert(__is_base_of(IUnknown, InterfaceType), "Invalid cast");
+                    return reinterpret_cast<IUnknown**>(ptr_->ReleaseAndGetAddressOf());
+                }
+            };
+
+            template <typename T> class ComPtrRef : public Details::ComPtrRefBase<T> {
+            public:
+                ComPtrRef(T *ptr) throw() {
+                    ComPtrRefBase<T>::ptr_ = ptr;
+                }
+
+                operator void**() const throw() {
+                    return reinterpret_cast<void**>(ComPtrRefBase<T>::ptr_->ReleaseAndGetAddressOf());
+                }
+
+                operator T*() throw() {
+                    *ComPtrRefBase<T>::ptr_ = nullptr;
+                    return ComPtrRefBase<T>::ptr_;
+                }
+
+                operator typename ComPtrRefBase<T>::InterfaceType**() throw() {
+                    return ComPtrRefBase<T>::ptr_->ReleaseAndGetAddressOf();
+                }
+
+                typename ComPtrRefBase<T>::InterfaceType *operator*() throw() {
+                    return ComPtrRefBase<T>::ptr_->Get();
+                }
+
+                typename ComPtrRefBase<T>::InterfaceType *const *GetAddressOf() const throw() {
+                    return ComPtrRefBase<T>::ptr_->GetAddressOf();
+                }
+
+                typename ComPtrRefBase<T>::InterfaceType **ReleaseAndGetAddressOf() throw() {
+                    return ComPtrRefBase<T>::ptr_->ReleaseAndGetAddressOf();
+                }
+            };
+
+        }
+
+        template<typename T> class ComPtr {
+        public:
+            typedef T InterfaceType;
+
+            ComPtr() throw() : ptr_(nullptr) {}
+            ComPtr(decltype(nullptr)) throw() : ptr_(nullptr) {}
+
+            template<class U> ComPtr(U *other) throw() : ptr_(other) {
+                InternalAddRef();
+            }
+
+            ComPtr(const ComPtr &other) throw() : ptr_(other.ptr_) {
+                InternalAddRef();
+            }
+
+            template<class U>
+            ComPtr(const ComPtr<U> &other) throw() : ptr_(other.ptr_) {
+                InternalAddRef();
+            }
+
+            ComPtr(ComPtr &&other) throw() : ptr_(nullptr) {
+                if(this != reinterpret_cast<ComPtr*>(&reinterpret_cast<unsigned char&>(other)))
+                    Swap(other);
+            }
+
+            template<class U>
+            ComPtr(ComPtr<U>&& other) throw() : ptr_(other.ptr_) {
+                other.ptr_ = nullptr;
+            }
+
+            ~ComPtr() throw() {
+                InternalRelease();
+            }
+
+            ComPtr &operator=(decltype(nullptr)) throw() {
+                InternalRelease();
+                return *this;
+            }
+
+            ComPtr &operator=(InterfaceType *other) throw() {
+                if (ptr_ != other) {
+                    InternalRelease();
+                    ptr_ = other;
+                    InternalAddRef();
+                }
+                return *this;
+            }
+
+            template<typename U>
+            ComPtr &operator=(U *other) throw()  {
+                if (ptr_ != other) {
+                    InternalRelease();
+                    ptr_ = other;
+                    InternalAddRef();
+                }
+                return *this;
+            }
+
+            ComPtr& operator=(const ComPtr &other) throw() {
+                if (ptr_ != other.ptr_)
+                    ComPtr(other).Swap(*this);
+                return *this;
+            }
+
+            template<class U>
+            ComPtr &operator=(const ComPtr<U> &other) throw() {
+                ComPtr(other).Swap(*this);
+                return *this;
+            }
+
+            ComPtr& operator=(ComPtr &&other) throw() {
+                ComPtr(other).Swap(*this);
+                return *this;
+            }
+
+            template<class U>
+            ComPtr& operator=(ComPtr<U> &&other) throw() {
+                ComPtr(other).Swap(*this);
+                return *this;
+            }
+
+            void Swap(ComPtr &&r) throw() {
+                InterfaceType *tmp = ptr_;
+                ptr_ = r.ptr_;
+                r.ptr_ = tmp;
+            }
+
+            void Swap(ComPtr &r) throw() {
+                InterfaceType *tmp = ptr_;
+                ptr_ = r.ptr_;
+                r.ptr_ = tmp;
+            }
+
+            operator Details::BoolType() const throw() {
+                return Get() != nullptr ? &Details::BoolStruct::Member : nullptr;
+            }
+
+            InterfaceType *Get() const throw()  {
+                return ptr_;
+            }
+
+            InterfaceType *operator->() const throw() {
+                return ptr_;
+            }
+
+            Details::ComPtrRef<ComPtr<T>> operator&() throw()  {
+                return Details::ComPtrRef<ComPtr<T>>(this);
+            }
+
+            const Details::ComPtrRef<const ComPtr<T>> operator&() const throw() {
+                return Details::ComPtrRef<const ComPtr<T>>(this);
+            }
+
+            InterfaceType *const *GetAddressOf() const throw() {
+                return &ptr_;
+            }
+
+            InterfaceType **GetAddressOf() throw() {
+                return &ptr_;
+            }
+
+            InterfaceType **ReleaseAndGetAddressOf() throw() {
+                InternalRelease();
+                return &ptr_;
+            }
+
+            InterfaceType *Detach() throw() {
+                T* ptr = ptr_;
+                ptr_ = nullptr;
+                return ptr;
+            }
+
+            void Attach(InterfaceType *other) throw() {
+                if (ptr_ != other) {
+                    InternalRelease();
+                    ptr_ = other;
+                    InternalAddRef();
+                }
+            }
+
+            unsigned long Reset() {
+                return InternalRelease();
+            }
+
+            HRESULT CopyTo(InterfaceType **ptr) const throw() {
+                InternalAddRef();
+                *ptr = ptr_;
+                return S_OK;
+            }
+
+            HRESULT CopyTo(REFIID riid, void **ptr) const throw() {
+                return ptr_->QueryInterface(riid, ptr);
+            }
+
+            template<typename U>
+            HRESULT CopyTo(U **ptr) const throw() {
+                return ptr_->QueryInterface(__uuidof(U), reinterpret_cast<void**>(ptr));
+            }
+
+            template<typename U>
+            HRESULT As(Details::ComPtrRef<ComPtr<U>> p) const throw() {
+                return ptr_->QueryInterface(__uuidof(U), p);
+            }
+
+            template<typename U>
+            HRESULT As(ComPtr<U> *p) const throw() {
+                return ptr_->QueryInterface(__uuidof(U), reinterpret_cast<void**>(p->ReleaseAndGetAddressOf()));
+            }
+
+            HRESULT AsIID(REFIID riid, ComPtr<IUnknown> *p) const throw() {
+                return ptr_->QueryInterface(riid, reinterpret_cast<void**>(p->ReleaseAndGetAddressOf()));
+            }
+
+            /*
+            HRESULT AsWeak(WeakRef *pWeakRef) const throw() {
+                return ::Microsoft::WRL::AsWeak(ptr_, pWeakRef);
+            }
+            */
+        protected:
+            InterfaceType *ptr_;
+
+            void InternalAddRef() const throw() {
+                if(ptr_)
+                    ptr_->AddRef();
+            }
+
+            unsigned long InternalRelease() throw() {
+                InterfaceType *tmp = ptr_;
+                if(!tmp)
+                    return 0;
+                ptr_ = nullptr;
+                return tmp->Release();
+            }
+        };
+    }
+}
+
+template<typename T>
+void **IID_PPV_ARGS_Helper(::Microsoft::WRL::Details::ComPtrRef<T> pp) throw() {
+    static_assert(__is_base_of(IUnknown, typename T::InterfaceType), "Expected COM interface");
+    return pp;
+}
+
+namespace Windows {
+    namespace Foundation {
+        template<typename T>
+        inline HRESULT ActivateInstance(HSTRING classid, ::Microsoft::WRL::Details::ComPtrRef<T> instance) throw() {
+            return ActivateInstance(classid, instance.ReleaseAndGetAddressOf());
+        }
+
+        template<typename T>
+        inline HRESULT GetActivationFactory(HSTRING classid, ::Microsoft::WRL::Details::ComPtrRef<T> factory) throw() {
+            return RoGetActivationFactory(classid, IID_INS_ARGS(factory.ReleaseAndGetAddressOf()));
+        }
+    }
+}
+
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<typename T>
+            inline HRESULT ActivateInstance(HSTRING classid, ::Microsoft::WRL::Details::ComPtrRef<T> instance) throw() {
+                return ActivateInstance(classid, instance.ReleaseAndGetAddressOf());
+            }
+
+            template<typename T>
+            inline HRESULT GetActivationFactory(HSTRING classid, ::Microsoft::WRL::Details::ComPtrRef<T> factory) throw() {
+                return RoGetActivationFactory(classid, IID_INS_ARGS(factory.ReleaseAndGetAddressOf()));
+            }
+        }
+    }
+}
+
+#endif
diff --git a/x86_64-w64-mingw32/include/wrl/internal.h b/x86_64-w64-mingw32/include/wrl/internal.h
new file mode 100644
index 0000000..715ef74
--- /dev/null
+++ b/x86_64-w64-mingw32/include/wrl/internal.h
@@ -0,0 +1,36 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef _WRL_INTERNAL_H_
+#define _WRL_INTERNAL_H_
+
+#include <windows.h>
+
+namespace Microsoft {
+    namespace WRL {
+        namespace Details {
+            struct BoolStruct {
+                int Member;
+            };
+
+            typedef int BoolStruct::* BoolType;
+
+            inline void DECLSPEC_NORETURN RaiseException(HRESULT hr, DWORD flags = EXCEPTION_NONCONTINUABLE) throw() {
+                ::RaiseException(static_cast<DWORD>(hr), flags, 0, NULL);
+            }
+
+            template <bool b, typename T = void>
+            struct EnableIf {};
+
+            template <typename T>
+            struct EnableIf<true, T> {
+                typedef T type;
+            };
+        }
+    }
+}
+
+#endif
diff --git a/x86_64-w64-mingw32/include/wrl/module.h b/x86_64-w64-mingw32/include/wrl/module.h
new file mode 100644
index 0000000..4ac93ca
--- /dev/null
+++ b/x86_64-w64-mingw32/include/wrl/module.h
@@ -0,0 +1,23 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef _WRL_MODULE_H_
+#define _WRL_MODULE_H_
+
+#include <roapi.h>
+#include <activation.h>
+#include <winstring.h>
+#include <intrin.h>
+#include <winapifamily.h>
+
+/* #include <wrl/def.h> */
+#include <wrl/internal.h>
+#include <wrl/client.h>
+/* #include <wrl/implements.h> */
+/* #include <wrl/ftm.h> */
+#include <wrl/wrappers/corewrappers.h>
+
+#endif
diff --git a/x86_64-w64-mingw32/include/wrl/wrappers/corewrappers.h b/x86_64-w64-mingw32/include/wrl/wrappers/corewrappers.h
new file mode 100644
index 0000000..221d9cc
--- /dev/null
+++ b/x86_64-w64-mingw32/include/wrl/wrappers/corewrappers.h
@@ -0,0 +1,117 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef _WRL_COREWRAPPERS_H_
+#define _WRL_COREWRAPPERS_H_
+
+#include <windows.h>
+#include <intsafe.h>
+#include <winstring.h>
+#include <roapi.h>
+
+/* #include <wrl/def.h> */
+#include <wrl/internal.h>
+
+namespace Microsoft {
+    namespace WRL {
+        namespace Details {
+            struct Dummy {};
+        }
+
+        namespace Wrappers {
+            class HStringReference {
+            private:
+                void Init(const wchar_t* str, unsigned int len) {
+                    HRESULT hres = ::WindowsCreateStringReference(str, len, &header_, &hstr_);
+                    if (FAILED(hres))
+                        ::Microsoft::WRL::Details::RaiseException(hres);
+                }
+
+                HStringReference() : hstr_(nullptr) {}
+
+            public:
+                HStringReference(const wchar_t* str, unsigned int len) throw() : hstr_(nullptr) {
+                    Init(str, len);
+                }
+
+                template<unsigned int sizeDest>
+                 explicit HStringReference(wchar_t const (&str)[sizeDest]) throw() : hstr_(nullptr) {
+                    Init(str, sizeDest - 1);
+                }
+
+                template <size_t sizeDest>
+                explicit HStringReference(wchar_t (&strRef)[sizeDest]) throw() {
+                    const wchar_t *str = static_cast<const wchar_t*>(strRef);
+                    Init(str, ::wcslen(str));
+                }
+
+                template<typename T>
+                explicit HStringReference(const T &strRef) throw() : hstr_(nullptr) {
+                    const wchar_t* str = static_cast<const wchar_t*>(strRef);
+                    size_t len = ::wcslen(str);
+                    if(static_cast<size_t>(static_cast<unsigned int>(len)) != len)
+                        ::Microsoft::WRL::Details::RaiseException(INTSAFE_E_ARITHMETIC_OVERFLOW);
+                    Init(str, len);
+                }
+
+                HStringReference(const HStringReference &other) throw() : hstr_(nullptr) {
+                    unsigned int len = 0;
+                    const wchar_t* value = other.GetRawBuffer(&len);
+                    Init(value, len);
+                }
+
+                ~HStringReference() throw() {
+                    hstr_ = nullptr;
+                }
+
+                HStringReference& operator=(const HStringReference &other) throw() {
+                    unsigned int len = 0;
+                    const wchar_t* value = other.GetRawBuffer(&len);
+                    Init(value, len);
+                    return *this;
+                }
+
+                HSTRING Get() const throw() {
+                    return hstr_;
+                }
+
+                const wchar_t *GetRawBuffer(unsigned int *len) const {
+                    return ::WindowsGetStringRawBuffer(hstr_, len);
+                }
+
+                HRESULT CopyTo(HSTRING *str) const throw() {
+                    return ::WindowsDuplicateString(hstr_, str);
+                }
+
+                friend class HString;
+
+            protected:
+                HSTRING_HEADER header_;
+                HSTRING hstr_;
+            };
+
+            class RoInitializeWrapper {
+            public:
+                RoInitializeWrapper(RO_INIT_TYPE flags) {
+                    hres = ::Windows::Foundation::Initialize(flags);
+                }
+
+                ~RoInitializeWrapper() {
+                    if(SUCCEEDED(hres))
+                        ::Windows::Foundation::Uninitialize();
+                }
+
+                operator HRESULT() {
+                    return hres;
+                }
+            private:
+                HRESULT hres;
+            };
+        }
+    }
+}
+
+#endif
diff --git a/x86_64-w64-mingw32/include/ws2tcpip.h b/x86_64-w64-mingw32/include/ws2tcpip.h
index ae940b0..c530d57 100644
--- a/x86_64-w64-mingw32/include/ws2tcpip.h
+++ b/x86_64-w64-mingw32/include/ws2tcpip.h
@@ -221,6 +221,9 @@
 #define AI_FQDN                     0x00020000
 #define AI_FILESERVER               0x00040000
 #endif
+#if (_WIN32_WINNT >= 0x0602)
+#define AI_DISABLE_IDN_ENCODING     0x00080000
+#endif
 
 #ifdef __cplusplus
 extern "C" {
diff --git a/x86_64-w64-mingw32/include/wsmandisp.h b/x86_64-w64-mingw32/include/wsmandisp.h
index f72464d..9c5c0b8 100644
--- a/x86_64-w64-mingw32/include/wsmandisp.h
+++ b/x86_64-w64-mingw32/include/wsmandisp.h
@@ -253,9 +253,9 @@
 IWSMan : public IDispatch
 {
     virtual HRESULT STDMETHODCALLTYPE CreateSession(
-        BSTR connection = L"",
-        LONG flags = 0,
-        IDispatch *connectionOptions = 0,
+        BSTR connection,
+        LONG flags,
+        IDispatch *connectionOptions,
         IDispatch **session) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE CreateConnectionOptions(
@@ -451,7 +451,7 @@
 IWSManEx : public IWSMan
 {
     virtual HRESULT STDMETHODCALLTYPE CreateResourceLocator(
-        BSTR strResourceLocator = L"",
+        BSTR strResourceLocator,
         IDispatch **newResourceLocator) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE SessionFlagUTF8(
@@ -2452,19 +2452,19 @@
 {
     virtual HRESULT STDMETHODCALLTYPE Get(
         VARIANT resourceUri,
-        LONG flags = 0,
+        LONG flags,
         BSTR *resource) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Put(
         VARIANT resourceUri,
         BSTR resource,
-        LONG flags = 0,
+        LONG flags,
         BSTR *resultResource) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Create(
         VARIANT resourceUri,
         BSTR resource,
-        LONG flags = 0,
+        LONG flags,
         BSTR *newUri) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Delete(
@@ -2475,18 +2475,18 @@
         BSTR actionUri,
         VARIANT resourceUri,
         BSTR parameters,
-        LONG flags = 0,
+        LONG flags,
         BSTR *result) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Enumerate(
         VARIANT resourceUri,
-        BSTR filter = L"",
-        BSTR dialect = L"",
-        LONG flags = 0,
+        BSTR filter,
+        BSTR dialect,
+        LONG flags,
         IDispatch **resultSet) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Identify(
-        LONG flags = 0,
+        LONG flags,
         BSTR *result) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE get_Error(
@@ -3441,7 +3441,7 @@
     virtual HRESULT STDMETHODCALLTYPE ConfigSDDL(
         IDispatch *session,
         VARIANT resourceUri,
-        LONG flags = 0,
+        LONG flags,
         BSTR *resource) = 0;
 
 };
diff --git a/x86_64-w64-mingw32/include/wspiapi.h b/x86_64-w64-mingw32/include/wspiapi.h
index 3328955..476a561 100644
--- a/x86_64-w64-mingw32/include/wspiapi.h
+++ b/x86_64-w64-mingw32/include/wspiapi.h
@@ -23,7 +23,7 @@
 #ifndef __cplusplus
 #define _WSPIAPI_COUNTOF(_Array) (sizeof(_Array) / sizeof(_Array[0]))
 #else
-template <typename __CountofType,size_t _N> char (&__wspiapi_countof_helper(__CountofType (&_Array)[_N]))[_N];
+template <typename __CountofType,size_t __wspiapi_countof_helper_N> char (&__wspiapi_countof_helper(__CountofType (&_Array)[__wspiapi_countof_helper_N]))[__wspiapi_countof_helper_N];
 #define _WSPIAPI_COUNTOF(_Array) sizeof(__wspiapi_countof_helper(_Array))
 #endif
 #endif
diff --git a/x86_64-w64-mingw32/include/xpsobjectmodel.h b/x86_64-w64-mingw32/include/xpsobjectmodel.h
index 5fce3fd..d34706e 100644
--- a/x86_64-w64-mingw32/include/xpsobjectmodel.h
+++ b/x86_64-w64-mingw32/include/xpsobjectmodel.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 1.6 from /usr/local/google/buildbot/src/android/mingw/toolchain/mingw/mingw-w64-v4.0.4/mingw-w64-headers/include/xpsobjectmodel.idl - Do not edit ***/
+/*** Autogenerated by WIDL 1.6 from include/xpsobjectmodel.idl - Do not edit ***/
 
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
 #define __REQUIRED_RPCNDR_H_VERSION__ 475
diff --git a/x86_64-w64-mingw32/lib/CRT_fp10.o b/x86_64-w64-mingw32/lib/CRT_fp10.o
index 79a612b..b37e5d4 100644
--- a/x86_64-w64-mingw32/lib/CRT_fp10.o
+++ b/x86_64-w64-mingw32/lib/CRT_fp10.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/CRT_fp8.o b/x86_64-w64-mingw32/lib/CRT_fp8.o
index 7a252a9..06b381b 100644
--- a/x86_64-w64-mingw32/lib/CRT_fp8.o
+++ b/x86_64-w64-mingw32/lib/CRT_fp8.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/CRT_glob.o b/x86_64-w64-mingw32/lib/CRT_glob.o
index 509fa44..2203529 100644
--- a/x86_64-w64-mingw32/lib/CRT_glob.o
+++ b/x86_64-w64-mingw32/lib/CRT_glob.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/CRT_noglob.o b/x86_64-w64-mingw32/lib/CRT_noglob.o
index d482ba8..a3283d7 100644
--- a/x86_64-w64-mingw32/lib/CRT_noglob.o
+++ b/x86_64-w64-mingw32/lib/CRT_noglob.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/binmode.o b/x86_64-w64-mingw32/lib/binmode.o
index 99a799c..1d92e89 100644
--- a/x86_64-w64-mingw32/lib/binmode.o
+++ b/x86_64-w64-mingw32/lib/binmode.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/crt1.o b/x86_64-w64-mingw32/lib/crt1.o
index 3f93e9c..e369d64 100644
--- a/x86_64-w64-mingw32/lib/crt1.o
+++ b/x86_64-w64-mingw32/lib/crt1.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/crt1u.o b/x86_64-w64-mingw32/lib/crt1u.o
index 1a0a46c..00c6d8f 100644
--- a/x86_64-w64-mingw32/lib/crt1u.o
+++ b/x86_64-w64-mingw32/lib/crt1u.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/crt2.o b/x86_64-w64-mingw32/lib/crt2.o
index 3f93e9c..e369d64 100644
--- a/x86_64-w64-mingw32/lib/crt2.o
+++ b/x86_64-w64-mingw32/lib/crt2.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/crt2u.o b/x86_64-w64-mingw32/lib/crt2u.o
index 1a0a46c..00c6d8f 100644
--- a/x86_64-w64-mingw32/lib/crt2u.o
+++ b/x86_64-w64-mingw32/lib/crt2u.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/dllcrt1.o b/x86_64-w64-mingw32/lib/dllcrt1.o
index 8d9c0cf..97415e8 100644
--- a/x86_64-w64-mingw32/lib/dllcrt1.o
+++ b/x86_64-w64-mingw32/lib/dllcrt1.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/dllcrt2.o b/x86_64-w64-mingw32/lib/dllcrt2.o
index 8d9c0cf..97415e8 100644
--- a/x86_64-w64-mingw32/lib/dllcrt2.o
+++ b/x86_64-w64-mingw32/lib/dllcrt2.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/gcrt0.o b/x86_64-w64-mingw32/lib/gcrt0.o
index 2476c7b..b76428f 100644
--- a/x86_64-w64-mingw32/lib/gcrt0.o
+++ b/x86_64-w64-mingw32/lib/gcrt0.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/gcrt1.o b/x86_64-w64-mingw32/lib/gcrt1.o
index 2476c7b..b76428f 100644
--- a/x86_64-w64-mingw32/lib/gcrt1.o
+++ b/x86_64-w64-mingw32/lib/gcrt1.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/gcrt2.o b/x86_64-w64-mingw32/lib/gcrt2.o
index 2476c7b..b76428f 100644
--- a/x86_64-w64-mingw32/lib/gcrt2.o
+++ b/x86_64-w64-mingw32/lib/gcrt2.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/lib6to4svc.a b/x86_64-w64-mingw32/lib/lib6to4svc.a
index 89e714a..34302e4 100644
--- a/x86_64-w64-mingw32/lib/lib6to4svc.a
+++ b/x86_64-w64-mingw32/lib/lib6to4svc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libCINTIME.a b/x86_64-w64-mingw32/lib/libCINTIME.a
index 5423efc..16684cf 100644
--- a/x86_64-w64-mingw32/lib/libCINTIME.a
+++ b/x86_64-w64-mingw32/lib/libCINTIME.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libPS5UI.a b/x86_64-w64-mingw32/lib/libPS5UI.a
index f5974b4..0f67e05 100644
--- a/x86_64-w64-mingw32/lib/libPS5UI.a
+++ b/x86_64-w64-mingw32/lib/libPS5UI.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libPSCRIPT5.a b/x86_64-w64-mingw32/lib/libPSCRIPT5.a
index 18fe03e..416612d 100644
--- a/x86_64-w64-mingw32/lib/libPSCRIPT5.a
+++ b/x86_64-w64-mingw32/lib/libPSCRIPT5.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libUNIDRV.a b/x86_64-w64-mingw32/lib/libUNIDRV.a
index d3229c0..3ba427d 100644
--- a/x86_64-w64-mingw32/lib/libUNIDRV.a
+++ b/x86_64-w64-mingw32/lib/libUNIDRV.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libUNIDRVUI.a b/x86_64-w64-mingw32/lib/libUNIDRVUI.a
index abe6457..a2c65e5 100644
--- a/x86_64-w64-mingw32/lib/libUNIDRVUI.a
+++ b/x86_64-w64-mingw32/lib/libUNIDRVUI.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libaaaamon.a b/x86_64-w64-mingw32/lib/libaaaamon.a
index 5f467ef..4c45d45 100644
--- a/x86_64-w64-mingw32/lib/libaaaamon.a
+++ b/x86_64-w64-mingw32/lib/libaaaamon.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libacledit.a b/x86_64-w64-mingw32/lib/libacledit.a
index fdeb313..2a60831 100644
--- a/x86_64-w64-mingw32/lib/libacledit.a
+++ b/x86_64-w64-mingw32/lib/libacledit.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libaclui.a b/x86_64-w64-mingw32/lib/libaclui.a
index 8710619..ccae574 100644
--- a/x86_64-w64-mingw32/lib/libaclui.a
+++ b/x86_64-w64-mingw32/lib/libaclui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libactiveds.a b/x86_64-w64-mingw32/lib/libactiveds.a
index f8f9644..4a3ac3b 100644
--- a/x86_64-w64-mingw32/lib/libactiveds.a
+++ b/x86_64-w64-mingw32/lib/libactiveds.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libactxprxy.a b/x86_64-w64-mingw32/lib/libactxprxy.a
index 07a736b..d335e00 100644
--- a/x86_64-w64-mingw32/lib/libactxprxy.a
+++ b/x86_64-w64-mingw32/lib/libactxprxy.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libadmparse.a b/x86_64-w64-mingw32/lib/libadmparse.a
index f2f870c..a669021 100644
--- a/x86_64-w64-mingw32/lib/libadmparse.a
+++ b/x86_64-w64-mingw32/lib/libadmparse.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libadmwprox.a b/x86_64-w64-mingw32/lib/libadmwprox.a
index e908111..2f0c760 100644
--- a/x86_64-w64-mingw32/lib/libadmwprox.a
+++ b/x86_64-w64-mingw32/lib/libadmwprox.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libadptif.a b/x86_64-w64-mingw32/lib/libadptif.a
index bc9128d..de2e1e6 100644
--- a/x86_64-w64-mingw32/lib/libadptif.a
+++ b/x86_64-w64-mingw32/lib/libadptif.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libadrot.a b/x86_64-w64-mingw32/lib/libadrot.a
index 46c51bc..aaab4cf 100644
--- a/x86_64-w64-mingw32/lib/libadrot.a
+++ b/x86_64-w64-mingw32/lib/libadrot.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libadsiis.a b/x86_64-w64-mingw32/lib/libadsiis.a
index bf2f606..e2008f5 100644
--- a/x86_64-w64-mingw32/lib/libadsiis.a
+++ b/x86_64-w64-mingw32/lib/libadsiis.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libadsiisex.a b/x86_64-w64-mingw32/lib/libadsiisex.a
index 077f1aa..7dcc86c 100644
--- a/x86_64-w64-mingw32/lib/libadsiisex.a
+++ b/x86_64-w64-mingw32/lib/libadsiisex.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libadsldp.a b/x86_64-w64-mingw32/lib/libadsldp.a
index 38873e1..73730a9 100644
--- a/x86_64-w64-mingw32/lib/libadsldp.a
+++ b/x86_64-w64-mingw32/lib/libadsldp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libadsldpc.a b/x86_64-w64-mingw32/lib/libadsldpc.a
index dea64ac..0bdf437 100644
--- a/x86_64-w64-mingw32/lib/libadsldpc.a
+++ b/x86_64-w64-mingw32/lib/libadsldpc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libadsmsext.a b/x86_64-w64-mingw32/lib/libadsmsext.a
index 428602c..b4f6590 100644
--- a/x86_64-w64-mingw32/lib/libadsmsext.a
+++ b/x86_64-w64-mingw32/lib/libadsmsext.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libadsnt.a b/x86_64-w64-mingw32/lib/libadsnt.a
index 6344503..de5b2d5 100644
--- a/x86_64-w64-mingw32/lib/libadsnt.a
+++ b/x86_64-w64-mingw32/lib/libadsnt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libadvapi32.a b/x86_64-w64-mingw32/lib/libadvapi32.a
index 6250523..c90ce4e 100644
--- a/x86_64-w64-mingw32/lib/libadvapi32.a
+++ b/x86_64-w64-mingw32/lib/libadvapi32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libadvpack.a b/x86_64-w64-mingw32/lib/libadvpack.a
index 6957abc..6ad5fe5 100644
--- a/x86_64-w64-mingw32/lib/libadvpack.a
+++ b/x86_64-w64-mingw32/lib/libadvpack.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libaelupsvc.a b/x86_64-w64-mingw32/lib/libaelupsvc.a
index b8f9c28..6bd3936 100644
--- a/x86_64-w64-mingw32/lib/libaelupsvc.a
+++ b/x86_64-w64-mingw32/lib/libaelupsvc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libagentanm.a b/x86_64-w64-mingw32/lib/libagentanm.a
index 3fffa6e..b030ef5 100644
--- a/x86_64-w64-mingw32/lib/libagentanm.a
+++ b/x86_64-w64-mingw32/lib/libagentanm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libagentctl.a b/x86_64-w64-mingw32/lib/libagentctl.a
index b3a41d6..d7f2dd9 100644
--- a/x86_64-w64-mingw32/lib/libagentctl.a
+++ b/x86_64-w64-mingw32/lib/libagentctl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libagentdp2.a b/x86_64-w64-mingw32/lib/libagentdp2.a
index 7e591fa..5d63e34 100644
--- a/x86_64-w64-mingw32/lib/libagentdp2.a
+++ b/x86_64-w64-mingw32/lib/libagentdp2.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libagentdpv.a b/x86_64-w64-mingw32/lib/libagentdpv.a
index 183a598..0a8e72f 100644
--- a/x86_64-w64-mingw32/lib/libagentdpv.a
+++ b/x86_64-w64-mingw32/lib/libagentdpv.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libagentmpx.a b/x86_64-w64-mingw32/lib/libagentmpx.a
index 0772104..24c850e 100644
--- a/x86_64-w64-mingw32/lib/libagentmpx.a
+++ b/x86_64-w64-mingw32/lib/libagentmpx.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libagentpsh.a b/x86_64-w64-mingw32/lib/libagentpsh.a
index 527397b..a605499 100644
--- a/x86_64-w64-mingw32/lib/libagentpsh.a
+++ b/x86_64-w64-mingw32/lib/libagentpsh.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libagentsr.a b/x86_64-w64-mingw32/lib/libagentsr.a
index 9f9e4bb..98ce914 100644
--- a/x86_64-w64-mingw32/lib/libagentsr.a
+++ b/x86_64-w64-mingw32/lib/libagentsr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libagrmco64.a b/x86_64-w64-mingw32/lib/libagrmco64.a
index 848a32b..579ecab 100644
--- a/x86_64-w64-mingw32/lib/libagrmco64.a
+++ b/x86_64-w64-mingw32/lib/libagrmco64.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libagtintl.a b/x86_64-w64-mingw32/lib/libagtintl.a
index fea8de1..10dc6f7 100644
--- a/x86_64-w64-mingw32/lib/libagtintl.a
+++ b/x86_64-w64-mingw32/lib/libagtintl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libakscoinst.a b/x86_64-w64-mingw32/lib/libakscoinst.a
index e44a79f..0072e1c 100644
--- a/x86_64-w64-mingw32/lib/libakscoinst.a
+++ b/x86_64-w64-mingw32/lib/libakscoinst.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libalrsvc.a b/x86_64-w64-mingw32/lib/libalrsvc.a
index f4499fa..3a95061 100644
--- a/x86_64-w64-mingw32/lib/libalrsvc.a
+++ b/x86_64-w64-mingw32/lib/libalrsvc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libamstream.a b/x86_64-w64-mingw32/lib/libamstream.a
index 2133aa8..400b7fc 100644
--- a/x86_64-w64-mingw32/lib/libamstream.a
+++ b/x86_64-w64-mingw32/lib/libamstream.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libamstrmid.a b/x86_64-w64-mingw32/lib/libamstrmid.a
new file mode 100644
index 0000000..e5a88e6
--- /dev/null
+++ b/x86_64-w64-mingw32/lib/libamstrmid.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libapcups.a b/x86_64-w64-mingw32/lib/libapcups.a
index 347c1db..553af10 100644
--- a/x86_64-w64-mingw32/lib/libapcups.a
+++ b/x86_64-w64-mingw32/lib/libapcups.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libapphelp.a b/x86_64-w64-mingw32/lib/libapphelp.a
index 9df03e3..1bdbc18 100644
--- a/x86_64-w64-mingw32/lib/libapphelp.a
+++ b/x86_64-w64-mingw32/lib/libapphelp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libappmgmts.a b/x86_64-w64-mingw32/lib/libappmgmts.a
index 60c61be..ad47b58 100644
--- a/x86_64-w64-mingw32/lib/libappmgmts.a
+++ b/x86_64-w64-mingw32/lib/libappmgmts.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libappmgr.a b/x86_64-w64-mingw32/lib/libappmgr.a
index 9728166..adff214 100644
--- a/x86_64-w64-mingw32/lib/libappmgr.a
+++ b/x86_64-w64-mingw32/lib/libappmgr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libaqadmin.a b/x86_64-w64-mingw32/lib/libaqadmin.a
index 5b20953..74a5960 100644
--- a/x86_64-w64-mingw32/lib/libaqadmin.a
+++ b/x86_64-w64-mingw32/lib/libaqadmin.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libaqueue.a b/x86_64-w64-mingw32/lib/libaqueue.a
index 3239822..cfe723c 100644
--- a/x86_64-w64-mingw32/lib/libaqueue.a
+++ b/x86_64-w64-mingw32/lib/libaqueue.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libasp.a b/x86_64-w64-mingw32/lib/libasp.a
index 4f1935c..8ee81fb 100644
--- a/x86_64-w64-mingw32/lib/libasp.a
+++ b/x86_64-w64-mingw32/lib/libasp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libaspperf.a b/x86_64-w64-mingw32/lib/libaspperf.a
index 89e2e8b..714a46f 100644
--- a/x86_64-w64-mingw32/lib/libaspperf.a
+++ b/x86_64-w64-mingw32/lib/libaspperf.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libasycfilt.a b/x86_64-w64-mingw32/lib/libasycfilt.a
index 9dd233a..dbcf664 100644
--- a/x86_64-w64-mingw32/lib/libasycfilt.a
+++ b/x86_64-w64-mingw32/lib/libasycfilt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libatkctrs.a b/x86_64-w64-mingw32/lib/libatkctrs.a
index ab557a7..35ad47f 100644
--- a/x86_64-w64-mingw32/lib/libatkctrs.a
+++ b/x86_64-w64-mingw32/lib/libatkctrs.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libatl.a b/x86_64-w64-mingw32/lib/libatl.a
index d134d79..49880ce 100644
--- a/x86_64-w64-mingw32/lib/libatl.a
+++ b/x86_64-w64-mingw32/lib/libatl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libatmlib.a b/x86_64-w64-mingw32/lib/libatmlib.a
index 1ac3a6a..c8ab84b 100644
--- a/x86_64-w64-mingw32/lib/libatmlib.a
+++ b/x86_64-w64-mingw32/lib/libatmlib.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libatmpvcno.a b/x86_64-w64-mingw32/lib/libatmpvcno.a
index 3bd07a3..1dc3874 100644
--- a/x86_64-w64-mingw32/lib/libatmpvcno.a
+++ b/x86_64-w64-mingw32/lib/libatmpvcno.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libatrace.a b/x86_64-w64-mingw32/lib/libatrace.a
index 067e6d6..ffe867c 100644
--- a/x86_64-w64-mingw32/lib/libatrace.a
+++ b/x86_64-w64-mingw32/lib/libatrace.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libaudiosrv.a b/x86_64-w64-mingw32/lib/libaudiosrv.a
index e39e335..971a9bb 100644
--- a/x86_64-w64-mingw32/lib/libaudiosrv.a
+++ b/x86_64-w64-mingw32/lib/libaudiosrv.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libauthz.a b/x86_64-w64-mingw32/lib/libauthz.a
index 767b872..412f9b1 100644
--- a/x86_64-w64-mingw32/lib/libauthz.a
+++ b/x86_64-w64-mingw32/lib/libauthz.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libautodisc.a b/x86_64-w64-mingw32/lib/libautodisc.a
index 94d8862..004fe73 100644
--- a/x86_64-w64-mingw32/lib/libautodisc.a
+++ b/x86_64-w64-mingw32/lib/libautodisc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libavicap32.a b/x86_64-w64-mingw32/lib/libavicap32.a
index 6b33515..b416a71 100644
--- a/x86_64-w64-mingw32/lib/libavicap32.a
+++ b/x86_64-w64-mingw32/lib/libavicap32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libavifil32.a b/x86_64-w64-mingw32/lib/libavifil32.a
index 1e6bae0..2467296 100644
--- a/x86_64-w64-mingw32/lib/libavifil32.a
+++ b/x86_64-w64-mingw32/lib/libavifil32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libavrt.a b/x86_64-w64-mingw32/lib/libavrt.a
index ce3e0a8..e3e2898 100644
--- a/x86_64-w64-mingw32/lib/libavrt.a
+++ b/x86_64-w64-mingw32/lib/libavrt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libazroles.a b/x86_64-w64-mingw32/lib/libazroles.a
index 090f6f9..7aad677 100644
--- a/x86_64-w64-mingw32/lib/libazroles.a
+++ b/x86_64-w64-mingw32/lib/libazroles.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libazroleui.a b/x86_64-w64-mingw32/lib/libazroleui.a
index d6e84ee..503eefb 100644
--- a/x86_64-w64-mingw32/lib/libazroleui.a
+++ b/x86_64-w64-mingw32/lib/libazroleui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libbasesrv.a b/x86_64-w64-mingw32/lib/libbasesrv.a
index 18d5cd0..6a660d9 100644
--- a/x86_64-w64-mingw32/lib/libbasesrv.a
+++ b/x86_64-w64-mingw32/lib/libbasesrv.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libbatmeter.a b/x86_64-w64-mingw32/lib/libbatmeter.a
index 6076ad2..f1f9466 100644
--- a/x86_64-w64-mingw32/lib/libbatmeter.a
+++ b/x86_64-w64-mingw32/lib/libbatmeter.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libbatt.a b/x86_64-w64-mingw32/lib/libbatt.a
index 178198f..db8b977 100644
--- a/x86_64-w64-mingw32/lib/libbatt.a
+++ b/x86_64-w64-mingw32/lib/libbatt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libbcrypt.a b/x86_64-w64-mingw32/lib/libbcrypt.a
index 62dadff..cafc4bc 100644
--- a/x86_64-w64-mingw32/lib/libbcrypt.a
+++ b/x86_64-w64-mingw32/lib/libbcrypt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libbidispl.a b/x86_64-w64-mingw32/lib/libbidispl.a
index 65ed3f7..7f32192 100644
--- a/x86_64-w64-mingw32/lib/libbidispl.a
+++ b/x86_64-w64-mingw32/lib/libbidispl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libbitsprx2.a b/x86_64-w64-mingw32/lib/libbitsprx2.a
index 68bbae4..5fac798 100644
--- a/x86_64-w64-mingw32/lib/libbitsprx2.a
+++ b/x86_64-w64-mingw32/lib/libbitsprx2.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libbitsprx3.a b/x86_64-w64-mingw32/lib/libbitsprx3.a
index f45bcd3..1fa7987 100644
--- a/x86_64-w64-mingw32/lib/libbitsprx3.a
+++ b/x86_64-w64-mingw32/lib/libbitsprx3.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libbnts.a b/x86_64-w64-mingw32/lib/libbnts.a
index 9a9bc4f..6cc17b5 100644
--- a/x86_64-w64-mingw32/lib/libbnts.a
+++ b/x86_64-w64-mingw32/lib/libbnts.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libbootvid.a b/x86_64-w64-mingw32/lib/libbootvid.a
index 8de9c45..721917c 100644
--- a/x86_64-w64-mingw32/lib/libbootvid.a
+++ b/x86_64-w64-mingw32/lib/libbootvid.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libbrowscap.a b/x86_64-w64-mingw32/lib/libbrowscap.a
index 9ac54fd..d05c98a 100644
--- a/x86_64-w64-mingw32/lib/libbrowscap.a
+++ b/x86_64-w64-mingw32/lib/libbrowscap.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libbrowser.a b/x86_64-w64-mingw32/lib/libbrowser.a
index a911dc3..466dca3 100644
--- a/x86_64-w64-mingw32/lib/libbrowser.a
+++ b/x86_64-w64-mingw32/lib/libbrowser.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libbrowseui.a b/x86_64-w64-mingw32/lib/libbrowseui.a
index cfd1e40..ca554ea 100644
--- a/x86_64-w64-mingw32/lib/libbrowseui.a
+++ b/x86_64-w64-mingw32/lib/libbrowseui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libbrpinfo.a b/x86_64-w64-mingw32/lib/libbrpinfo.a
index c7196cb..68fe548 100644
--- a/x86_64-w64-mingw32/lib/libbrpinfo.a
+++ b/x86_64-w64-mingw32/lib/libbrpinfo.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libbthci.a b/x86_64-w64-mingw32/lib/libbthci.a
index 1fff068..5e28b29 100644
--- a/x86_64-w64-mingw32/lib/libbthci.a
+++ b/x86_64-w64-mingw32/lib/libbthci.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libbthprops.a b/x86_64-w64-mingw32/lib/libbthprops.a
index eafbd8a..e3a9b43 100644
--- a/x86_64-w64-mingw32/lib/libbthprops.a
+++ b/x86_64-w64-mingw32/lib/libbthprops.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libbthserv.a b/x86_64-w64-mingw32/lib/libbthserv.a
index 44f5c56..fb1c7e2 100644
--- a/x86_64-w64-mingw32/lib/libbthserv.a
+++ b/x86_64-w64-mingw32/lib/libbthserv.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libbtpanui.a b/x86_64-w64-mingw32/lib/libbtpanui.a
index 1b5d112..1324155 100644
--- a/x86_64-w64-mingw32/lib/libbtpanui.a
+++ b/x86_64-w64-mingw32/lib/libbtpanui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libc_g18030.a b/x86_64-w64-mingw32/lib/libc_g18030.a
index 64081ad..28f3fa9 100644
--- a/x86_64-w64-mingw32/lib/libc_g18030.a
+++ b/x86_64-w64-mingw32/lib/libc_g18030.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libc_is2022.a b/x86_64-w64-mingw32/lib/libc_is2022.a
index 9645b82..081fb76 100644
--- a/x86_64-w64-mingw32/lib/libc_is2022.a
+++ b/x86_64-w64-mingw32/lib/libc_is2022.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libc_iscii.a b/x86_64-w64-mingw32/lib/libc_iscii.a
index 9dd00d8..0678112 100644
--- a/x86_64-w64-mingw32/lib/libc_iscii.a
+++ b/x86_64-w64-mingw32/lib/libc_iscii.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcabinet.a b/x86_64-w64-mingw32/lib/libcabinet.a
index 6cfef2e..93bbfba 100644
--- a/x86_64-w64-mingw32/lib/libcabinet.a
+++ b/x86_64-w64-mingw32/lib/libcabinet.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcabview.a b/x86_64-w64-mingw32/lib/libcabview.a
index 7dd5739..b65ee3b 100644
--- a/x86_64-w64-mingw32/lib/libcabview.a
+++ b/x86_64-w64-mingw32/lib/libcabview.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcamocx.a b/x86_64-w64-mingw32/lib/libcamocx.a
index 38c8532..60fc1bd 100644
--- a/x86_64-w64-mingw32/lib/libcamocx.a
+++ b/x86_64-w64-mingw32/lib/libcamocx.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcards.a b/x86_64-w64-mingw32/lib/libcards.a
index ce8b72a..b451917 100644
--- a/x86_64-w64-mingw32/lib/libcards.a
+++ b/x86_64-w64-mingw32/lib/libcards.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcatsrv.a b/x86_64-w64-mingw32/lib/libcatsrv.a
index 587f03d..3a53cee 100644
--- a/x86_64-w64-mingw32/lib/libcatsrv.a
+++ b/x86_64-w64-mingw32/lib/libcatsrv.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcatsrvps.a b/x86_64-w64-mingw32/lib/libcatsrvps.a
index e826ed7..8b92ba4 100644
--- a/x86_64-w64-mingw32/lib/libcatsrvps.a
+++ b/x86_64-w64-mingw32/lib/libcatsrvps.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcatsrvut.a b/x86_64-w64-mingw32/lib/libcatsrvut.a
index f9b5fdb..9af7a54 100644
--- a/x86_64-w64-mingw32/lib/libcatsrvut.a
+++ b/x86_64-w64-mingw32/lib/libcatsrvut.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libccfgnt.a b/x86_64-w64-mingw32/lib/libccfgnt.a
index 2afc09f..b50ac4d 100644
--- a/x86_64-w64-mingw32/lib/libccfgnt.a
+++ b/x86_64-w64-mingw32/lib/libccfgnt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcdfview.a b/x86_64-w64-mingw32/lib/libcdfview.a
index 31022b1..08fd07e 100644
--- a/x86_64-w64-mingw32/lib/libcdfview.a
+++ b/x86_64-w64-mingw32/lib/libcdfview.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcdm.a b/x86_64-w64-mingw32/lib/libcdm.a
index cd45ed2..782ed86 100644
--- a/x86_64-w64-mingw32/lib/libcdm.a
+++ b/x86_64-w64-mingw32/lib/libcdm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcdosys.a b/x86_64-w64-mingw32/lib/libcdosys.a
index 6bf3510..d75ed18 100644
--- a/x86_64-w64-mingw32/lib/libcdosys.a
+++ b/x86_64-w64-mingw32/lib/libcdosys.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcertcli.a b/x86_64-w64-mingw32/lib/libcertcli.a
index 8c96ffd..45ba323 100644
--- a/x86_64-w64-mingw32/lib/libcertcli.a
+++ b/x86_64-w64-mingw32/lib/libcertcli.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcertmgr.a b/x86_64-w64-mingw32/lib/libcertmgr.a
index 47adfed..3f622b9 100644
--- a/x86_64-w64-mingw32/lib/libcertmgr.a
+++ b/x86_64-w64-mingw32/lib/libcertmgr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcertobj.a b/x86_64-w64-mingw32/lib/libcertobj.a
index d876e7e..b5e3238 100644
--- a/x86_64-w64-mingw32/lib/libcertobj.a
+++ b/x86_64-w64-mingw32/lib/libcertobj.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcfgbkend.a b/x86_64-w64-mingw32/lib/libcfgbkend.a
index 04d8739..2d7a14f 100644
--- a/x86_64-w64-mingw32/lib/libcfgbkend.a
+++ b/x86_64-w64-mingw32/lib/libcfgbkend.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcfgmgr32.a b/x86_64-w64-mingw32/lib/libcfgmgr32.a
index cf68884..ff5890e 100644
--- a/x86_64-w64-mingw32/lib/libcfgmgr32.a
+++ b/x86_64-w64-mingw32/lib/libcfgmgr32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libchsbrkr.a b/x86_64-w64-mingw32/lib/libchsbrkr.a
index 562224f..bb5c482 100644
--- a/x86_64-w64-mingw32/lib/libchsbrkr.a
+++ b/x86_64-w64-mingw32/lib/libchsbrkr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libchtbrkr.a b/x86_64-w64-mingw32/lib/libchtbrkr.a
index 3ecd99c..04b59f0 100644
--- a/x86_64-w64-mingw32/lib/libchtbrkr.a
+++ b/x86_64-w64-mingw32/lib/libchtbrkr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libchtskdic.a b/x86_64-w64-mingw32/lib/libchtskdic.a
index a0b0a40..31f9719 100644
--- a/x86_64-w64-mingw32/lib/libchtskdic.a
+++ b/x86_64-w64-mingw32/lib/libchtskdic.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libciadmin.a b/x86_64-w64-mingw32/lib/libciadmin.a
index 0e7edb0..81607e7 100644
--- a/x86_64-w64-mingw32/lib/libciadmin.a
+++ b/x86_64-w64-mingw32/lib/libciadmin.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcic.a b/x86_64-w64-mingw32/lib/libcic.a
index 5c233f8..4bc3efc 100644
--- a/x86_64-w64-mingw32/lib/libcic.a
+++ b/x86_64-w64-mingw32/lib/libcic.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcimwin32.a b/x86_64-w64-mingw32/lib/libcimwin32.a
index d2c9c1a..ff60142 100644
--- a/x86_64-w64-mingw32/lib/libcimwin32.a
+++ b/x86_64-w64-mingw32/lib/libcimwin32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libciodm.a b/x86_64-w64-mingw32/lib/libciodm.a
index 0765bb8..d1938d8 100644
--- a/x86_64-w64-mingw32/lib/libciodm.a
+++ b/x86_64-w64-mingw32/lib/libciodm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libclasspnp.a b/x86_64-w64-mingw32/lib/libclasspnp.a
index ab5531f..2b41f78 100644
--- a/x86_64-w64-mingw32/lib/libclasspnp.a
+++ b/x86_64-w64-mingw32/lib/libclasspnp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libclb.a b/x86_64-w64-mingw32/lib/libclb.a
index 6aa4dd0..99aaa7b 100644
--- a/x86_64-w64-mingw32/lib/libclb.a
+++ b/x86_64-w64-mingw32/lib/libclb.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libclbcatex.a b/x86_64-w64-mingw32/lib/libclbcatex.a
index 213858d..f6a7bad 100644
--- a/x86_64-w64-mingw32/lib/libclbcatex.a
+++ b/x86_64-w64-mingw32/lib/libclbcatex.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libclbcatq.a b/x86_64-w64-mingw32/lib/libclbcatq.a
index bdcd0d0..f9b907b 100644
--- a/x86_64-w64-mingw32/lib/libclbcatq.a
+++ b/x86_64-w64-mingw32/lib/libclbcatq.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libclfsw32.a b/x86_64-w64-mingw32/lib/libclfsw32.a
index e01fd55..d09dd89 100644
--- a/x86_64-w64-mingw32/lib/libclfsw32.a
+++ b/x86_64-w64-mingw32/lib/libclfsw32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcliconfg.a b/x86_64-w64-mingw32/lib/libcliconfg.a
index 79a83df..fa7c5da 100644
--- a/x86_64-w64-mingw32/lib/libcliconfg.a
+++ b/x86_64-w64-mingw32/lib/libcliconfg.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libclusapi.a b/x86_64-w64-mingw32/lib/libclusapi.a
index a4600c5..eb3f4f1 100644
--- a/x86_64-w64-mingw32/lib/libclusapi.a
+++ b/x86_64-w64-mingw32/lib/libclusapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcmcfg32.a b/x86_64-w64-mingw32/lib/libcmcfg32.a
index 7dabbaa..2df3057 100644
--- a/x86_64-w64-mingw32/lib/libcmcfg32.a
+++ b/x86_64-w64-mingw32/lib/libcmcfg32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcmdial32.a b/x86_64-w64-mingw32/lib/libcmdial32.a
index 421cb55..dfa979a 100644
--- a/x86_64-w64-mingw32/lib/libcmdial32.a
+++ b/x86_64-w64-mingw32/lib/libcmdial32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcmpbk32.a b/x86_64-w64-mingw32/lib/libcmpbk32.a
index 2fd9c17..c304864 100644
--- a/x86_64-w64-mingw32/lib/libcmpbk32.a
+++ b/x86_64-w64-mingw32/lib/libcmpbk32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcmprops.a b/x86_64-w64-mingw32/lib/libcmprops.a
index b0c3361..b9b5440 100644
--- a/x86_64-w64-mingw32/lib/libcmprops.a
+++ b/x86_64-w64-mingw32/lib/libcmprops.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcmsetacl.a b/x86_64-w64-mingw32/lib/libcmsetacl.a
index fc9d044..f7a2cbb 100644
--- a/x86_64-w64-mingw32/lib/libcmsetacl.a
+++ b/x86_64-w64-mingw32/lib/libcmsetacl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcmutil.a b/x86_64-w64-mingw32/lib/libcmutil.a
index aaaa5db..40e23d3 100644
--- a/x86_64-w64-mingw32/lib/libcmutil.a
+++ b/x86_64-w64-mingw32/lib/libcmutil.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcnbjmon.a b/x86_64-w64-mingw32/lib/libcnbjmon.a
index 576039c..5444c4f 100644
--- a/x86_64-w64-mingw32/lib/libcnbjmon.a
+++ b/x86_64-w64-mingw32/lib/libcnbjmon.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcnetcfg.a b/x86_64-w64-mingw32/lib/libcnetcfg.a
index 36463d8..d7576c6 100644
--- a/x86_64-w64-mingw32/lib/libcnetcfg.a
+++ b/x86_64-w64-mingw32/lib/libcnetcfg.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcnvfat.a b/x86_64-w64-mingw32/lib/libcnvfat.a
index 260be26..50ec339 100644
--- a/x86_64-w64-mingw32/lib/libcnvfat.a
+++ b/x86_64-w64-mingw32/lib/libcnvfat.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcoadmin.a b/x86_64-w64-mingw32/lib/libcoadmin.a
index 2097f46..dd96b54 100644
--- a/x86_64-w64-mingw32/lib/libcoadmin.a
+++ b/x86_64-w64-mingw32/lib/libcoadmin.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcolbact.a b/x86_64-w64-mingw32/lib/libcolbact.a
index e68c20c..0fef13e 100644
--- a/x86_64-w64-mingw32/lib/libcolbact.a
+++ b/x86_64-w64-mingw32/lib/libcolbact.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcomaddin.a b/x86_64-w64-mingw32/lib/libcomaddin.a
index ed967c0..7ac5ff0 100644
--- a/x86_64-w64-mingw32/lib/libcomaddin.a
+++ b/x86_64-w64-mingw32/lib/libcomaddin.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcomadmin.a b/x86_64-w64-mingw32/lib/libcomadmin.a
index a146edd..568cce1 100644
--- a/x86_64-w64-mingw32/lib/libcomadmin.a
+++ b/x86_64-w64-mingw32/lib/libcomadmin.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcomcat.a b/x86_64-w64-mingw32/lib/libcomcat.a
index 88d5694..34f9500 100644
--- a/x86_64-w64-mingw32/lib/libcomcat.a
+++ b/x86_64-w64-mingw32/lib/libcomcat.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcomctl32.a b/x86_64-w64-mingw32/lib/libcomctl32.a
index a4551ef..c9ab445 100644
--- a/x86_64-w64-mingw32/lib/libcomctl32.a
+++ b/x86_64-w64-mingw32/lib/libcomctl32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcomdlg32.a b/x86_64-w64-mingw32/lib/libcomdlg32.a
index 8be8c80..a9c983b 100644
--- a/x86_64-w64-mingw32/lib/libcomdlg32.a
+++ b/x86_64-w64-mingw32/lib/libcomdlg32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcompatui.a b/x86_64-w64-mingw32/lib/libcompatui.a
index ebc01f1..ddba7ae 100644
--- a/x86_64-w64-mingw32/lib/libcompatui.a
+++ b/x86_64-w64-mingw32/lib/libcompatui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcompstui.a b/x86_64-w64-mingw32/lib/libcompstui.a
index 1eaa969..282e61e 100644
--- a/x86_64-w64-mingw32/lib/libcompstui.a
+++ b/x86_64-w64-mingw32/lib/libcompstui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcomrepl.a b/x86_64-w64-mingw32/lib/libcomrepl.a
index f29c3ac..09ee368 100644
--- a/x86_64-w64-mingw32/lib/libcomrepl.a
+++ b/x86_64-w64-mingw32/lib/libcomrepl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcomres.a b/x86_64-w64-mingw32/lib/libcomres.a
index 3e74947..59acb0e 100644
--- a/x86_64-w64-mingw32/lib/libcomres.a
+++ b/x86_64-w64-mingw32/lib/libcomres.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcomsetup.a b/x86_64-w64-mingw32/lib/libcomsetup.a
index 2aee2b2..2822022 100644
--- a/x86_64-w64-mingw32/lib/libcomsetup.a
+++ b/x86_64-w64-mingw32/lib/libcomsetup.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcomsnap.a b/x86_64-w64-mingw32/lib/libcomsnap.a
index efb6dea..24f3e8a 100644
--- a/x86_64-w64-mingw32/lib/libcomsnap.a
+++ b/x86_64-w64-mingw32/lib/libcomsnap.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcomsvcs.a b/x86_64-w64-mingw32/lib/libcomsvcs.a
index 1daa099..2120fde 100644
--- a/x86_64-w64-mingw32/lib/libcomsvcs.a
+++ b/x86_64-w64-mingw32/lib/libcomsvcs.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcomuid.a b/x86_64-w64-mingw32/lib/libcomuid.a
index 6ada056..82dc54d 100644
--- a/x86_64-w64-mingw32/lib/libcomuid.a
+++ b/x86_64-w64-mingw32/lib/libcomuid.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libconfmsp.a b/x86_64-w64-mingw32/lib/libconfmsp.a
index 0413163..ac5c41d 100644
--- a/x86_64-w64-mingw32/lib/libconfmsp.a
+++ b/x86_64-w64-mingw32/lib/libconfmsp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libconnect.a b/x86_64-w64-mingw32/lib/libconnect.a
index 3bc2ace..5ea9ec9 100644
--- a/x86_64-w64-mingw32/lib/libconnect.a
+++ b/x86_64-w64-mingw32/lib/libconnect.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libconsole.a b/x86_64-w64-mingw32/lib/libconsole.a
index 26181fb..5c0426e 100644
--- a/x86_64-w64-mingw32/lib/libconsole.a
+++ b/x86_64-w64-mingw32/lib/libconsole.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcontrot.a b/x86_64-w64-mingw32/lib/libcontrot.a
index 5d61442..8ffcef0 100644
--- a/x86_64-w64-mingw32/lib/libcontrot.a
+++ b/x86_64-w64-mingw32/lib/libcontrot.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcorpol.a b/x86_64-w64-mingw32/lib/libcorpol.a
index 693a277..a5d15fb 100644
--- a/x86_64-w64-mingw32/lib/libcorpol.a
+++ b/x86_64-w64-mingw32/lib/libcorpol.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcredui.a b/x86_64-w64-mingw32/lib/libcredui.a
index c0d2d4e..a62c259 100644
--- a/x86_64-w64-mingw32/lib/libcredui.a
+++ b/x86_64-w64-mingw32/lib/libcredui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcrtdll.a b/x86_64-w64-mingw32/lib/libcrtdll.a
index ae47d94..8eea75d 100644
--- a/x86_64-w64-mingw32/lib/libcrtdll.a
+++ b/x86_64-w64-mingw32/lib/libcrtdll.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcrypt32.a b/x86_64-w64-mingw32/lib/libcrypt32.a
index 8df5e06..9818a27 100644
--- a/x86_64-w64-mingw32/lib/libcrypt32.a
+++ b/x86_64-w64-mingw32/lib/libcrypt32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcryptdlg.a b/x86_64-w64-mingw32/lib/libcryptdlg.a
index ff61e83..0cdb45d 100644
--- a/x86_64-w64-mingw32/lib/libcryptdlg.a
+++ b/x86_64-w64-mingw32/lib/libcryptdlg.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcryptdll.a b/x86_64-w64-mingw32/lib/libcryptdll.a
index 555eba7..e7f038d 100644
--- a/x86_64-w64-mingw32/lib/libcryptdll.a
+++ b/x86_64-w64-mingw32/lib/libcryptdll.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcryptext.a b/x86_64-w64-mingw32/lib/libcryptext.a
index 5b445a4..60680af 100644
--- a/x86_64-w64-mingw32/lib/libcryptext.a
+++ b/x86_64-w64-mingw32/lib/libcryptext.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcryptnet.a b/x86_64-w64-mingw32/lib/libcryptnet.a
index 63ed787..9ebc6de 100644
--- a/x86_64-w64-mingw32/lib/libcryptnet.a
+++ b/x86_64-w64-mingw32/lib/libcryptnet.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcryptsp.a b/x86_64-w64-mingw32/lib/libcryptsp.a
index 63a7cf4..aed9fb2 100644
--- a/x86_64-w64-mingw32/lib/libcryptsp.a
+++ b/x86_64-w64-mingw32/lib/libcryptsp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcryptsvc.a b/x86_64-w64-mingw32/lib/libcryptsvc.a
index 84d098d..5aff5be 100644
--- a/x86_64-w64-mingw32/lib/libcryptsvc.a
+++ b/x86_64-w64-mingw32/lib/libcryptsvc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcryptui.a b/x86_64-w64-mingw32/lib/libcryptui.a
index 06ff379..0c4e369 100644
--- a/x86_64-w64-mingw32/lib/libcryptui.a
+++ b/x86_64-w64-mingw32/lib/libcryptui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcryptxml.a b/x86_64-w64-mingw32/lib/libcryptxml.a
index 777bbf1..9ca0cbc 100644
--- a/x86_64-w64-mingw32/lib/libcryptxml.a
+++ b/x86_64-w64-mingw32/lib/libcryptxml.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcscapi.a b/x86_64-w64-mingw32/lib/libcscapi.a
index 256204f..460f6aa 100644
--- a/x86_64-w64-mingw32/lib/libcscapi.a
+++ b/x86_64-w64-mingw32/lib/libcscapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcscdll.a b/x86_64-w64-mingw32/lib/libcscdll.a
index 2067b04..655a4bd 100644
--- a/x86_64-w64-mingw32/lib/libcscdll.a
+++ b/x86_64-w64-mingw32/lib/libcscdll.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcscui.a b/x86_64-w64-mingw32/lib/libcscui.a
index 6450e5c..8660ac0 100644
--- a/x86_64-w64-mingw32/lib/libcscui.a
+++ b/x86_64-w64-mingw32/lib/libcscui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libcsrsrv.a b/x86_64-w64-mingw32/lib/libcsrsrv.a
index 582b3a2..6403430 100644
--- a/x86_64-w64-mingw32/lib/libcsrsrv.a
+++ b/x86_64-w64-mingw32/lib/libcsrsrv.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd2d1.a b/x86_64-w64-mingw32/lib/libd2d1.a
index 08e8b65..8a8531d 100644
--- a/x86_64-w64-mingw32/lib/libd2d1.a
+++ b/x86_64-w64-mingw32/lib/libd2d1.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3d11.a b/x86_64-w64-mingw32/lib/libd3d11.a
index 4399931..c6f7015 100644
--- a/x86_64-w64-mingw32/lib/libd3d11.a
+++ b/x86_64-w64-mingw32/lib/libd3d11.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3d8thk.a b/x86_64-w64-mingw32/lib/libd3d8thk.a
index 48a7abc..a60c451 100644
--- a/x86_64-w64-mingw32/lib/libd3d8thk.a
+++ b/x86_64-w64-mingw32/lib/libd3d8thk.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3d9.a b/x86_64-w64-mingw32/lib/libd3d9.a
index 2194830..448bdc8 100644
--- a/x86_64-w64-mingw32/lib/libd3d9.a
+++ b/x86_64-w64-mingw32/lib/libd3d9.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dcompiler.a b/x86_64-w64-mingw32/lib/libd3dcompiler.a
index 5b76e4e..86c6504 100644
--- a/x86_64-w64-mingw32/lib/libd3dcompiler.a
+++ b/x86_64-w64-mingw32/lib/libd3dcompiler.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dcompiler_33.a b/x86_64-w64-mingw32/lib/libd3dcompiler_33.a
index 625eb5f..c50b95b 100644
--- a/x86_64-w64-mingw32/lib/libd3dcompiler_33.a
+++ b/x86_64-w64-mingw32/lib/libd3dcompiler_33.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dcompiler_34.a b/x86_64-w64-mingw32/lib/libd3dcompiler_34.a
index 5846c83..c4ce8ad 100644
--- a/x86_64-w64-mingw32/lib/libd3dcompiler_34.a
+++ b/x86_64-w64-mingw32/lib/libd3dcompiler_34.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dcompiler_35.a b/x86_64-w64-mingw32/lib/libd3dcompiler_35.a
index 72aba80..f84e00b 100644
--- a/x86_64-w64-mingw32/lib/libd3dcompiler_35.a
+++ b/x86_64-w64-mingw32/lib/libd3dcompiler_35.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dcompiler_36.a b/x86_64-w64-mingw32/lib/libd3dcompiler_36.a
index b6fb927..4e66800 100644
--- a/x86_64-w64-mingw32/lib/libd3dcompiler_36.a
+++ b/x86_64-w64-mingw32/lib/libd3dcompiler_36.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dcompiler_37.a b/x86_64-w64-mingw32/lib/libd3dcompiler_37.a
index b4843aa..1739c06 100644
--- a/x86_64-w64-mingw32/lib/libd3dcompiler_37.a
+++ b/x86_64-w64-mingw32/lib/libd3dcompiler_37.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dcompiler_38.a b/x86_64-w64-mingw32/lib/libd3dcompiler_38.a
index fa135cc..d6feab4 100644
--- a/x86_64-w64-mingw32/lib/libd3dcompiler_38.a
+++ b/x86_64-w64-mingw32/lib/libd3dcompiler_38.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dcompiler_39.a b/x86_64-w64-mingw32/lib/libd3dcompiler_39.a
index 10bf1fc..7a733f9 100644
--- a/x86_64-w64-mingw32/lib/libd3dcompiler_39.a
+++ b/x86_64-w64-mingw32/lib/libd3dcompiler_39.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dcompiler_40.a b/x86_64-w64-mingw32/lib/libd3dcompiler_40.a
index c25ba9a..e9a0f53 100644
--- a/x86_64-w64-mingw32/lib/libd3dcompiler_40.a
+++ b/x86_64-w64-mingw32/lib/libd3dcompiler_40.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dcompiler_41.a b/x86_64-w64-mingw32/lib/libd3dcompiler_41.a
index 45aae95..25a4914 100644
--- a/x86_64-w64-mingw32/lib/libd3dcompiler_41.a
+++ b/x86_64-w64-mingw32/lib/libd3dcompiler_41.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dcompiler_42.a b/x86_64-w64-mingw32/lib/libd3dcompiler_42.a
index a9c50da..895e115 100644
--- a/x86_64-w64-mingw32/lib/libd3dcompiler_42.a
+++ b/x86_64-w64-mingw32/lib/libd3dcompiler_42.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dcompiler_43.a b/x86_64-w64-mingw32/lib/libd3dcompiler_43.a
index e322994..76c3eea 100644
--- a/x86_64-w64-mingw32/lib/libd3dcompiler_43.a
+++ b/x86_64-w64-mingw32/lib/libd3dcompiler_43.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dcompiler_46.a b/x86_64-w64-mingw32/lib/libd3dcompiler_46.a
index d8fed6c..a3518f5 100644
--- a/x86_64-w64-mingw32/lib/libd3dcompiler_46.a
+++ b/x86_64-w64-mingw32/lib/libd3dcompiler_46.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dcompiler_47.a b/x86_64-w64-mingw32/lib/libd3dcompiler_47.a
new file mode 100644
index 0000000..80fb7ec
--- /dev/null
+++ b/x86_64-w64-mingw32/lib/libd3dcompiler_47.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dcsx_46.a b/x86_64-w64-mingw32/lib/libd3dcsx_46.a
index 9242fdf..1768aab 100644
--- a/x86_64-w64-mingw32/lib/libd3dcsx_46.a
+++ b/x86_64-w64-mingw32/lib/libd3dcsx_46.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dcsxd.a b/x86_64-w64-mingw32/lib/libd3dcsxd.a
index 6f1fda1..21858bd 100644
--- a/x86_64-w64-mingw32/lib/libd3dcsxd.a
+++ b/x86_64-w64-mingw32/lib/libd3dcsxd.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dcsxd_43.a b/x86_64-w64-mingw32/lib/libd3dcsxd_43.a
index be8ea86..c8132ab 100644
--- a/x86_64-w64-mingw32/lib/libd3dcsxd_43.a
+++ b/x86_64-w64-mingw32/lib/libd3dcsxd_43.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx10.a b/x86_64-w64-mingw32/lib/libd3dx10.a
index a35cd9d..906bea9 100644
--- a/x86_64-w64-mingw32/lib/libd3dx10.a
+++ b/x86_64-w64-mingw32/lib/libd3dx10.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx10_33.a b/x86_64-w64-mingw32/lib/libd3dx10_33.a
index 6038f5d..c80b1e4 100644
--- a/x86_64-w64-mingw32/lib/libd3dx10_33.a
+++ b/x86_64-w64-mingw32/lib/libd3dx10_33.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx10_34.a b/x86_64-w64-mingw32/lib/libd3dx10_34.a
index 6c98b7b..2e0b5d4 100644
--- a/x86_64-w64-mingw32/lib/libd3dx10_34.a
+++ b/x86_64-w64-mingw32/lib/libd3dx10_34.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx10_35.a b/x86_64-w64-mingw32/lib/libd3dx10_35.a
index 2d864d8..1f05131 100644
--- a/x86_64-w64-mingw32/lib/libd3dx10_35.a
+++ b/x86_64-w64-mingw32/lib/libd3dx10_35.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx10_36.a b/x86_64-w64-mingw32/lib/libd3dx10_36.a
index 7080bd1..82bf21b 100644
--- a/x86_64-w64-mingw32/lib/libd3dx10_36.a
+++ b/x86_64-w64-mingw32/lib/libd3dx10_36.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx10_37.a b/x86_64-w64-mingw32/lib/libd3dx10_37.a
index ac74275..642f8b2 100644
--- a/x86_64-w64-mingw32/lib/libd3dx10_37.a
+++ b/x86_64-w64-mingw32/lib/libd3dx10_37.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx10_38.a b/x86_64-w64-mingw32/lib/libd3dx10_38.a
index beb3464..1c190ee 100644
--- a/x86_64-w64-mingw32/lib/libd3dx10_38.a
+++ b/x86_64-w64-mingw32/lib/libd3dx10_38.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx10_39.a b/x86_64-w64-mingw32/lib/libd3dx10_39.a
index 9f41fbf..1fed4d6 100644
--- a/x86_64-w64-mingw32/lib/libd3dx10_39.a
+++ b/x86_64-w64-mingw32/lib/libd3dx10_39.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx10_40.a b/x86_64-w64-mingw32/lib/libd3dx10_40.a
index 2079b87..1ed4e9c 100644
--- a/x86_64-w64-mingw32/lib/libd3dx10_40.a
+++ b/x86_64-w64-mingw32/lib/libd3dx10_40.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx10_41.a b/x86_64-w64-mingw32/lib/libd3dx10_41.a
index 52fea3e..59241b8 100644
--- a/x86_64-w64-mingw32/lib/libd3dx10_41.a
+++ b/x86_64-w64-mingw32/lib/libd3dx10_41.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx10_42.a b/x86_64-w64-mingw32/lib/libd3dx10_42.a
index 4ea37d3..c7497ed 100644
--- a/x86_64-w64-mingw32/lib/libd3dx10_42.a
+++ b/x86_64-w64-mingw32/lib/libd3dx10_42.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx10_43.a b/x86_64-w64-mingw32/lib/libd3dx10_43.a
index c35a06a..cac6308 100644
--- a/x86_64-w64-mingw32/lib/libd3dx10_43.a
+++ b/x86_64-w64-mingw32/lib/libd3dx10_43.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx11.a b/x86_64-w64-mingw32/lib/libd3dx11.a
index 2a5ea24..2594195 100644
--- a/x86_64-w64-mingw32/lib/libd3dx11.a
+++ b/x86_64-w64-mingw32/lib/libd3dx11.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx11_42.a b/x86_64-w64-mingw32/lib/libd3dx11_42.a
index 53615af..035ed91 100644
--- a/x86_64-w64-mingw32/lib/libd3dx11_42.a
+++ b/x86_64-w64-mingw32/lib/libd3dx11_42.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx11_43.a b/x86_64-w64-mingw32/lib/libd3dx11_43.a
index d7633f7..783bc02 100644
--- a/x86_64-w64-mingw32/lib/libd3dx11_43.a
+++ b/x86_64-w64-mingw32/lib/libd3dx11_43.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx9.a b/x86_64-w64-mingw32/lib/libd3dx9.a
index 15ac89c..fd92388 100644
--- a/x86_64-w64-mingw32/lib/libd3dx9.a
+++ b/x86_64-w64-mingw32/lib/libd3dx9.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx9_24.a b/x86_64-w64-mingw32/lib/libd3dx9_24.a
index 8e21b19..e2be013 100644
--- a/x86_64-w64-mingw32/lib/libd3dx9_24.a
+++ b/x86_64-w64-mingw32/lib/libd3dx9_24.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx9_25.a b/x86_64-w64-mingw32/lib/libd3dx9_25.a
index 7e6e173..50cf243 100644
--- a/x86_64-w64-mingw32/lib/libd3dx9_25.a
+++ b/x86_64-w64-mingw32/lib/libd3dx9_25.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx9_26.a b/x86_64-w64-mingw32/lib/libd3dx9_26.a
index 55cff60..77c5520 100644
--- a/x86_64-w64-mingw32/lib/libd3dx9_26.a
+++ b/x86_64-w64-mingw32/lib/libd3dx9_26.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx9_27.a b/x86_64-w64-mingw32/lib/libd3dx9_27.a
index 6ce6872..b275b6c 100644
--- a/x86_64-w64-mingw32/lib/libd3dx9_27.a
+++ b/x86_64-w64-mingw32/lib/libd3dx9_27.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx9_28.a b/x86_64-w64-mingw32/lib/libd3dx9_28.a
index e129894..53375c2 100644
--- a/x86_64-w64-mingw32/lib/libd3dx9_28.a
+++ b/x86_64-w64-mingw32/lib/libd3dx9_28.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx9_29.a b/x86_64-w64-mingw32/lib/libd3dx9_29.a
index f394886..6dd4252 100644
--- a/x86_64-w64-mingw32/lib/libd3dx9_29.a
+++ b/x86_64-w64-mingw32/lib/libd3dx9_29.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx9_30.a b/x86_64-w64-mingw32/lib/libd3dx9_30.a
index 38fe3e0..9c46965 100644
--- a/x86_64-w64-mingw32/lib/libd3dx9_30.a
+++ b/x86_64-w64-mingw32/lib/libd3dx9_30.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx9_31.a b/x86_64-w64-mingw32/lib/libd3dx9_31.a
index 7de515a..e070be2 100644
--- a/x86_64-w64-mingw32/lib/libd3dx9_31.a
+++ b/x86_64-w64-mingw32/lib/libd3dx9_31.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx9_32.a b/x86_64-w64-mingw32/lib/libd3dx9_32.a
index 37189cb..60f0f00 100644
--- a/x86_64-w64-mingw32/lib/libd3dx9_32.a
+++ b/x86_64-w64-mingw32/lib/libd3dx9_32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx9_33.a b/x86_64-w64-mingw32/lib/libd3dx9_33.a
index 706e42c..75ed597 100644
--- a/x86_64-w64-mingw32/lib/libd3dx9_33.a
+++ b/x86_64-w64-mingw32/lib/libd3dx9_33.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx9_34.a b/x86_64-w64-mingw32/lib/libd3dx9_34.a
index 3064762..484100a 100644
--- a/x86_64-w64-mingw32/lib/libd3dx9_34.a
+++ b/x86_64-w64-mingw32/lib/libd3dx9_34.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx9_35.a b/x86_64-w64-mingw32/lib/libd3dx9_35.a
index 4733757..0a66b6c 100644
--- a/x86_64-w64-mingw32/lib/libd3dx9_35.a
+++ b/x86_64-w64-mingw32/lib/libd3dx9_35.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx9_36.a b/x86_64-w64-mingw32/lib/libd3dx9_36.a
index 7f10b27..38a6481 100644
--- a/x86_64-w64-mingw32/lib/libd3dx9_36.a
+++ b/x86_64-w64-mingw32/lib/libd3dx9_36.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx9_37.a b/x86_64-w64-mingw32/lib/libd3dx9_37.a
index 88c1ce1..1e88dee 100644
--- a/x86_64-w64-mingw32/lib/libd3dx9_37.a
+++ b/x86_64-w64-mingw32/lib/libd3dx9_37.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx9_38.a b/x86_64-w64-mingw32/lib/libd3dx9_38.a
index a3bcabe..a717af4 100644
--- a/x86_64-w64-mingw32/lib/libd3dx9_38.a
+++ b/x86_64-w64-mingw32/lib/libd3dx9_38.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx9_39.a b/x86_64-w64-mingw32/lib/libd3dx9_39.a
index 20489cc..aaf4bba 100644
--- a/x86_64-w64-mingw32/lib/libd3dx9_39.a
+++ b/x86_64-w64-mingw32/lib/libd3dx9_39.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx9_40.a b/x86_64-w64-mingw32/lib/libd3dx9_40.a
index 9df298d..2cc299e 100644
--- a/x86_64-w64-mingw32/lib/libd3dx9_40.a
+++ b/x86_64-w64-mingw32/lib/libd3dx9_40.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx9_41.a b/x86_64-w64-mingw32/lib/libd3dx9_41.a
index c26c72c..977a3b4 100644
--- a/x86_64-w64-mingw32/lib/libd3dx9_41.a
+++ b/x86_64-w64-mingw32/lib/libd3dx9_41.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx9_42.a b/x86_64-w64-mingw32/lib/libd3dx9_42.a
index 3eb63d8..5f5b70f 100644
--- a/x86_64-w64-mingw32/lib/libd3dx9_42.a
+++ b/x86_64-w64-mingw32/lib/libd3dx9_42.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dx9_43.a b/x86_64-w64-mingw32/lib/libd3dx9_43.a
index 8f06529..2e5dd01 100644
--- a/x86_64-w64-mingw32/lib/libd3dx9_43.a
+++ b/x86_64-w64-mingw32/lib/libd3dx9_43.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libd3dxof.a b/x86_64-w64-mingw32/lib/libd3dxof.a
index fb65b94..520f30f 100644
--- a/x86_64-w64-mingw32/lib/libd3dxof.a
+++ b/x86_64-w64-mingw32/lib/libd3dxof.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdanim.a b/x86_64-w64-mingw32/lib/libdanim.a
index f2413e5..284c89e 100644
--- a/x86_64-w64-mingw32/lib/libdanim.a
+++ b/x86_64-w64-mingw32/lib/libdanim.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdataclen.a b/x86_64-w64-mingw32/lib/libdataclen.a
index 5651279..adff8e5 100644
--- a/x86_64-w64-mingw32/lib/libdataclen.a
+++ b/x86_64-w64-mingw32/lib/libdataclen.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdatime.a b/x86_64-w64-mingw32/lib/libdatime.a
index d132ce8..14f3624 100644
--- a/x86_64-w64-mingw32/lib/libdatime.a
+++ b/x86_64-w64-mingw32/lib/libdatime.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdavclnt.a b/x86_64-w64-mingw32/lib/libdavclnt.a
index 7cfe192..48280d1 100644
--- a/x86_64-w64-mingw32/lib/libdavclnt.a
+++ b/x86_64-w64-mingw32/lib/libdavclnt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdavcprox.a b/x86_64-w64-mingw32/lib/libdavcprox.a
index 828b401..ef2d6db 100644
--- a/x86_64-w64-mingw32/lib/libdavcprox.a
+++ b/x86_64-w64-mingw32/lib/libdavcprox.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdbgeng.a b/x86_64-w64-mingw32/lib/libdbgeng.a
index 5d156a9..6a4e98e 100644
--- a/x86_64-w64-mingw32/lib/libdbgeng.a
+++ b/x86_64-w64-mingw32/lib/libdbgeng.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdbghelp.a b/x86_64-w64-mingw32/lib/libdbghelp.a
index 6d51538..b0af495 100644
--- a/x86_64-w64-mingw32/lib/libdbghelp.a
+++ b/x86_64-w64-mingw32/lib/libdbghelp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdbnetlib.a b/x86_64-w64-mingw32/lib/libdbnetlib.a
index 54edee8..e6d356c 100644
--- a/x86_64-w64-mingw32/lib/libdbnetlib.a
+++ b/x86_64-w64-mingw32/lib/libdbnetlib.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdbnmpntw.a b/x86_64-w64-mingw32/lib/libdbnmpntw.a
index 8a44e50..71b37f9 100644
--- a/x86_64-w64-mingw32/lib/libdbnmpntw.a
+++ b/x86_64-w64-mingw32/lib/libdbnmpntw.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdciman32.a b/x86_64-w64-mingw32/lib/libdciman32.a
index fc1ee1f..b36c0e8 100644
--- a/x86_64-w64-mingw32/lib/libdciman32.a
+++ b/x86_64-w64-mingw32/lib/libdciman32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libddraw.a b/x86_64-w64-mingw32/lib/libddraw.a
index b52bd84..3d6f230 100644
--- a/x86_64-w64-mingw32/lib/libddraw.a
+++ b/x86_64-w64-mingw32/lib/libddraw.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libddrawex.a b/x86_64-w64-mingw32/lib/libddrawex.a
index 26cece4..27e1671 100644
--- a/x86_64-w64-mingw32/lib/libddrawex.a
+++ b/x86_64-w64-mingw32/lib/libddrawex.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdeskadp.a b/x86_64-w64-mingw32/lib/libdeskadp.a
index de72571..0343501 100644
--- a/x86_64-w64-mingw32/lib/libdeskadp.a
+++ b/x86_64-w64-mingw32/lib/libdeskadp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdeskmon.a b/x86_64-w64-mingw32/lib/libdeskmon.a
index ed2ee66..c61f2d7 100644
--- a/x86_64-w64-mingw32/lib/libdeskmon.a
+++ b/x86_64-w64-mingw32/lib/libdeskmon.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdeskperf.a b/x86_64-w64-mingw32/lib/libdeskperf.a
index 125a898..2a7c5a0 100644
--- a/x86_64-w64-mingw32/lib/libdeskperf.a
+++ b/x86_64-w64-mingw32/lib/libdeskperf.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdevenum.a b/x86_64-w64-mingw32/lib/libdevenum.a
index ff0b8bf..18fe9fb 100644
--- a/x86_64-w64-mingw32/lib/libdevenum.a
+++ b/x86_64-w64-mingw32/lib/libdevenum.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdevmgr.a b/x86_64-w64-mingw32/lib/libdevmgr.a
index 7f56c1c..ccc5856 100644
--- a/x86_64-w64-mingw32/lib/libdevmgr.a
+++ b/x86_64-w64-mingw32/lib/libdevmgr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdevobj.a b/x86_64-w64-mingw32/lib/libdevobj.a
index 6cae593..3c391c0 100644
--- a/x86_64-w64-mingw32/lib/libdevobj.a
+++ b/x86_64-w64-mingw32/lib/libdevobj.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdevrtl.a b/x86_64-w64-mingw32/lib/libdevrtl.a
index 21e9a15..561d0ea 100644
--- a/x86_64-w64-mingw32/lib/libdevrtl.a
+++ b/x86_64-w64-mingw32/lib/libdevrtl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdfrgifps.a b/x86_64-w64-mingw32/lib/libdfrgifps.a
index 41001e2..6e007e7 100644
--- a/x86_64-w64-mingw32/lib/libdfrgifps.a
+++ b/x86_64-w64-mingw32/lib/libdfrgifps.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdfrgsnap.a b/x86_64-w64-mingw32/lib/libdfrgsnap.a
index 1434eab..6cdc63c 100644
--- a/x86_64-w64-mingw32/lib/libdfrgsnap.a
+++ b/x86_64-w64-mingw32/lib/libdfrgsnap.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdfrgui.a b/x86_64-w64-mingw32/lib/libdfrgui.a
index fb02221..ad315c5 100644
--- a/x86_64-w64-mingw32/lib/libdfrgui.a
+++ b/x86_64-w64-mingw32/lib/libdfrgui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdfsshlex.a b/x86_64-w64-mingw32/lib/libdfsshlex.a
index cb53ba3..36e2c63 100644
--- a/x86_64-w64-mingw32/lib/libdfsshlex.a
+++ b/x86_64-w64-mingw32/lib/libdfsshlex.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdgnet.a b/x86_64-w64-mingw32/lib/libdgnet.a
index a8af2c0..0c0dbef 100644
--- a/x86_64-w64-mingw32/lib/libdgnet.a
+++ b/x86_64-w64-mingw32/lib/libdgnet.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdhcpcsvc.a b/x86_64-w64-mingw32/lib/libdhcpcsvc.a
index d3bea71..5e4e0ad 100644
--- a/x86_64-w64-mingw32/lib/libdhcpcsvc.a
+++ b/x86_64-w64-mingw32/lib/libdhcpcsvc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdhcpcsvc6.a b/x86_64-w64-mingw32/lib/libdhcpcsvc6.a
index 07e7ea0..5bcfd4e 100644
--- a/x86_64-w64-mingw32/lib/libdhcpcsvc6.a
+++ b/x86_64-w64-mingw32/lib/libdhcpcsvc6.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdhcpmon.a b/x86_64-w64-mingw32/lib/libdhcpmon.a
index 23690c8..a9179e7 100644
--- a/x86_64-w64-mingw32/lib/libdhcpmon.a
+++ b/x86_64-w64-mingw32/lib/libdhcpmon.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdhcpsapi.a b/x86_64-w64-mingw32/lib/libdhcpsapi.a
index 49e6ee6..11eedd7 100644
--- a/x86_64-w64-mingw32/lib/libdhcpsapi.a
+++ b/x86_64-w64-mingw32/lib/libdhcpsapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdiactfrm.a b/x86_64-w64-mingw32/lib/libdiactfrm.a
index 5c8e789..f657db3 100644
--- a/x86_64-w64-mingw32/lib/libdiactfrm.a
+++ b/x86_64-w64-mingw32/lib/libdiactfrm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdigest.a b/x86_64-w64-mingw32/lib/libdigest.a
index 23a153a..08bc6f2 100644
--- a/x86_64-w64-mingw32/lib/libdigest.a
+++ b/x86_64-w64-mingw32/lib/libdigest.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdimap.a b/x86_64-w64-mingw32/lib/libdimap.a
index ad1e52f..d22aaed 100644
--- a/x86_64-w64-mingw32/lib/libdimap.a
+++ b/x86_64-w64-mingw32/lib/libdimap.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdimsntfy.a b/x86_64-w64-mingw32/lib/libdimsntfy.a
index b9f1499..9b12303 100644
--- a/x86_64-w64-mingw32/lib/libdimsntfy.a
+++ b/x86_64-w64-mingw32/lib/libdimsntfy.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdimsroam.a b/x86_64-w64-mingw32/lib/libdimsroam.a
index 5975190..d4886d8 100644
--- a/x86_64-w64-mingw32/lib/libdimsroam.a
+++ b/x86_64-w64-mingw32/lib/libdimsroam.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdinput.a b/x86_64-w64-mingw32/lib/libdinput.a
index df61535..76d97dd 100644
--- a/x86_64-w64-mingw32/lib/libdinput.a
+++ b/x86_64-w64-mingw32/lib/libdinput.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdinput8.a b/x86_64-w64-mingw32/lib/libdinput8.a
index 83f23d0..611d400 100644
--- a/x86_64-w64-mingw32/lib/libdinput8.a
+++ b/x86_64-w64-mingw32/lib/libdinput8.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdirectdb.a b/x86_64-w64-mingw32/lib/libdirectdb.a
index ece9493..83b89b7 100644
--- a/x86_64-w64-mingw32/lib/libdirectdb.a
+++ b/x86_64-w64-mingw32/lib/libdirectdb.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdiskcopy.a b/x86_64-w64-mingw32/lib/libdiskcopy.a
index 2331fcb..99e71b2 100644
--- a/x86_64-w64-mingw32/lib/libdiskcopy.a
+++ b/x86_64-w64-mingw32/lib/libdiskcopy.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdispex.a b/x86_64-w64-mingw32/lib/libdispex.a
index ea597ee..6f6f348 100644
--- a/x86_64-w64-mingw32/lib/libdispex.a
+++ b/x86_64-w64-mingw32/lib/libdispex.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdmconfig.a b/x86_64-w64-mingw32/lib/libdmconfig.a
index 14906bf..fe7a885 100644
--- a/x86_64-w64-mingw32/lib/libdmconfig.a
+++ b/x86_64-w64-mingw32/lib/libdmconfig.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdmdlgs.a b/x86_64-w64-mingw32/lib/libdmdlgs.a
index 996c5b3..dd3016c 100644
--- a/x86_64-w64-mingw32/lib/libdmdlgs.a
+++ b/x86_64-w64-mingw32/lib/libdmdlgs.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdmdskmgr.a b/x86_64-w64-mingw32/lib/libdmdskmgr.a
index a265c5c..6c4af7d 100644
--- a/x86_64-w64-mingw32/lib/libdmdskmgr.a
+++ b/x86_64-w64-mingw32/lib/libdmdskmgr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdmintf.a b/x86_64-w64-mingw32/lib/libdmintf.a
index f8b5c20..1d0af49 100644
--- a/x86_64-w64-mingw32/lib/libdmintf.a
+++ b/x86_64-w64-mingw32/lib/libdmintf.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdmivcitf.a b/x86_64-w64-mingw32/lib/libdmivcitf.a
index cbc5a81..7f379d2 100644
--- a/x86_64-w64-mingw32/lib/libdmivcitf.a
+++ b/x86_64-w64-mingw32/lib/libdmivcitf.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdmocx.a b/x86_64-w64-mingw32/lib/libdmocx.a
index 00108e5..a34a58a 100644
--- a/x86_64-w64-mingw32/lib/libdmocx.a
+++ b/x86_64-w64-mingw32/lib/libdmocx.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdmoguids.a b/x86_64-w64-mingw32/lib/libdmoguids.a
index 85a3abb..e604df2 100644
--- a/x86_64-w64-mingw32/lib/libdmoguids.a
+++ b/x86_64-w64-mingw32/lib/libdmoguids.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdmserver.a b/x86_64-w64-mingw32/lib/libdmserver.a
index e5dbbaf..dc227b8 100644
--- a/x86_64-w64-mingw32/lib/libdmserver.a
+++ b/x86_64-w64-mingw32/lib/libdmserver.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdmutil.a b/x86_64-w64-mingw32/lib/libdmutil.a
index e7e27a2..03bd615 100644
--- a/x86_64-w64-mingw32/lib/libdmutil.a
+++ b/x86_64-w64-mingw32/lib/libdmutil.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdmvdsitf.a b/x86_64-w64-mingw32/lib/libdmvdsitf.a
index 140d0fa..a3dcc28 100644
--- a/x86_64-w64-mingw32/lib/libdmvdsitf.a
+++ b/x86_64-w64-mingw32/lib/libdmvdsitf.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdnsapi.a b/x86_64-w64-mingw32/lib/libdnsapi.a
index 4bc996d..c8fadf8 100644
--- a/x86_64-w64-mingw32/lib/libdnsapi.a
+++ b/x86_64-w64-mingw32/lib/libdnsapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdnsrslvr.a b/x86_64-w64-mingw32/lib/libdnsrslvr.a
index 974e239..3abaa1c 100644
--- a/x86_64-w64-mingw32/lib/libdnsrslvr.a
+++ b/x86_64-w64-mingw32/lib/libdnsrslvr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdocprop.a b/x86_64-w64-mingw32/lib/libdocprop.a
index 9768b8c..ec52967 100644
--- a/x86_64-w64-mingw32/lib/libdocprop.a
+++ b/x86_64-w64-mingw32/lib/libdocprop.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdocprop2.a b/x86_64-w64-mingw32/lib/libdocprop2.a
index d4d00fe..28a10ec 100644
--- a/x86_64-w64-mingw32/lib/libdocprop2.a
+++ b/x86_64-w64-mingw32/lib/libdocprop2.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdpnaddr.a b/x86_64-w64-mingw32/lib/libdpnaddr.a
index 7c1c692..f5baa09 100644
--- a/x86_64-w64-mingw32/lib/libdpnaddr.a
+++ b/x86_64-w64-mingw32/lib/libdpnaddr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdpnet.a b/x86_64-w64-mingw32/lib/libdpnet.a
index afab57a..95b5887 100644
--- a/x86_64-w64-mingw32/lib/libdpnet.a
+++ b/x86_64-w64-mingw32/lib/libdpnet.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdpnhpast.a b/x86_64-w64-mingw32/lib/libdpnhpast.a
index 0a46829..930f3ce 100644
--- a/x86_64-w64-mingw32/lib/libdpnhpast.a
+++ b/x86_64-w64-mingw32/lib/libdpnhpast.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdpnhupnp.a b/x86_64-w64-mingw32/lib/libdpnhupnp.a
index c0c354c..6988312 100644
--- a/x86_64-w64-mingw32/lib/libdpnhupnp.a
+++ b/x86_64-w64-mingw32/lib/libdpnhupnp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdpnlobby.a b/x86_64-w64-mingw32/lib/libdpnlobby.a
index 55f4180..9ce5887 100644
--- a/x86_64-w64-mingw32/lib/libdpnlobby.a
+++ b/x86_64-w64-mingw32/lib/libdpnlobby.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdpvacm.a b/x86_64-w64-mingw32/lib/libdpvacm.a
index 4390f18..7658710 100644
--- a/x86_64-w64-mingw32/lib/libdpvacm.a
+++ b/x86_64-w64-mingw32/lib/libdpvacm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdpvoice.a b/x86_64-w64-mingw32/lib/libdpvoice.a
index 5b8ecf5..314c80c 100644
--- a/x86_64-w64-mingw32/lib/libdpvoice.a
+++ b/x86_64-w64-mingw32/lib/libdpvoice.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdpvvox.a b/x86_64-w64-mingw32/lib/libdpvvox.a
index 322c07e..9babb3d 100644
--- a/x86_64-w64-mingw32/lib/libdpvvox.a
+++ b/x86_64-w64-mingw32/lib/libdpvvox.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdrprov.a b/x86_64-w64-mingw32/lib/libdrprov.a
index 4417bcf..0114039 100644
--- a/x86_64-w64-mingw32/lib/libdrprov.a
+++ b/x86_64-w64-mingw32/lib/libdrprov.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libds32gt.a b/x86_64-w64-mingw32/lib/libds32gt.a
index d87ef9a..54119e2 100644
--- a/x86_64-w64-mingw32/lib/libds32gt.a
+++ b/x86_64-w64-mingw32/lib/libds32gt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdsauth.a b/x86_64-w64-mingw32/lib/libdsauth.a
index 647f3f6..045bde5 100644
--- a/x86_64-w64-mingw32/lib/libdsauth.a
+++ b/x86_64-w64-mingw32/lib/libdsauth.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdsdmo.a b/x86_64-w64-mingw32/lib/libdsdmo.a
index 7a05870..2e0732c 100644
--- a/x86_64-w64-mingw32/lib/libdsdmo.a
+++ b/x86_64-w64-mingw32/lib/libdsdmo.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdsdmoprp.a b/x86_64-w64-mingw32/lib/libdsdmoprp.a
index 6d9c87c..1ca3dbe 100644
--- a/x86_64-w64-mingw32/lib/libdsdmoprp.a
+++ b/x86_64-w64-mingw32/lib/libdsdmoprp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdskquota.a b/x86_64-w64-mingw32/lib/libdskquota.a
index a7e5d88..8d59bed 100644
--- a/x86_64-w64-mingw32/lib/libdskquota.a
+++ b/x86_64-w64-mingw32/lib/libdskquota.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdskquoui.a b/x86_64-w64-mingw32/lib/libdskquoui.a
index 56b59b1..c567ece 100644
--- a/x86_64-w64-mingw32/lib/libdskquoui.a
+++ b/x86_64-w64-mingw32/lib/libdskquoui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdsound.a b/x86_64-w64-mingw32/lib/libdsound.a
index 0d94a53..b215423 100644
--- a/x86_64-w64-mingw32/lib/libdsound.a
+++ b/x86_64-w64-mingw32/lib/libdsound.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdsound3d.a b/x86_64-w64-mingw32/lib/libdsound3d.a
index cf5dd8e..a6d1201 100644
--- a/x86_64-w64-mingw32/lib/libdsound3d.a
+++ b/x86_64-w64-mingw32/lib/libdsound3d.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdsprop.a b/x86_64-w64-mingw32/lib/libdsprop.a
index 2b4d48a..2cda57f 100644
--- a/x86_64-w64-mingw32/lib/libdsprop.a
+++ b/x86_64-w64-mingw32/lib/libdsprop.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdsprov.a b/x86_64-w64-mingw32/lib/libdsprov.a
index 7fa94f1..c606fa2 100644
--- a/x86_64-w64-mingw32/lib/libdsprov.a
+++ b/x86_64-w64-mingw32/lib/libdsprov.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdsquery.a b/x86_64-w64-mingw32/lib/libdsquery.a
index 000b31e..9e76a1c 100644
--- a/x86_64-w64-mingw32/lib/libdsquery.a
+++ b/x86_64-w64-mingw32/lib/libdsquery.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdssec.a b/x86_64-w64-mingw32/lib/libdssec.a
index fa2b28b..a0b8a90 100644
--- a/x86_64-w64-mingw32/lib/libdssec.a
+++ b/x86_64-w64-mingw32/lib/libdssec.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdssenh.a b/x86_64-w64-mingw32/lib/libdssenh.a
index e53f8fe..a58bb25 100644
--- a/x86_64-w64-mingw32/lib/libdssenh.a
+++ b/x86_64-w64-mingw32/lib/libdssenh.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdsuiext.a b/x86_64-w64-mingw32/lib/libdsuiext.a
index adeb775..d2e0483 100644
--- a/x86_64-w64-mingw32/lib/libdsuiext.a
+++ b/x86_64-w64-mingw32/lib/libdsuiext.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libduser.a b/x86_64-w64-mingw32/lib/libduser.a
index 45bb3eb..d636a94 100644
--- a/x86_64-w64-mingw32/lib/libduser.a
+++ b/x86_64-w64-mingw32/lib/libduser.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdwmapi.a b/x86_64-w64-mingw32/lib/libdwmapi.a
index 6cb8d93..76e80ed 100644
--- a/x86_64-w64-mingw32/lib/libdwmapi.a
+++ b/x86_64-w64-mingw32/lib/libdwmapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdwrite.a b/x86_64-w64-mingw32/lib/libdwrite.a
index e77511b..ba87f2e 100644
--- a/x86_64-w64-mingw32/lib/libdwrite.a
+++ b/x86_64-w64-mingw32/lib/libdwrite.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdxdiagn.a b/x86_64-w64-mingw32/lib/libdxdiagn.a
index df0ace2..34246d6 100644
--- a/x86_64-w64-mingw32/lib/libdxdiagn.a
+++ b/x86_64-w64-mingw32/lib/libdxdiagn.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdxerr8.a b/x86_64-w64-mingw32/lib/libdxerr8.a
index 3f16023..c32e5e2 100644
--- a/x86_64-w64-mingw32/lib/libdxerr8.a
+++ b/x86_64-w64-mingw32/lib/libdxerr8.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdxerr9.a b/x86_64-w64-mingw32/lib/libdxerr9.a
index c160f85..69136c8 100644
--- a/x86_64-w64-mingw32/lib/libdxerr9.a
+++ b/x86_64-w64-mingw32/lib/libdxerr9.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdxgi.a b/x86_64-w64-mingw32/lib/libdxgi.a
index b35afb1..296f132 100644
--- a/x86_64-w64-mingw32/lib/libdxgi.a
+++ b/x86_64-w64-mingw32/lib/libdxgi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdxguid.a b/x86_64-w64-mingw32/lib/libdxguid.a
index 9149a5d..14d5d6c 100644
--- a/x86_64-w64-mingw32/lib/libdxguid.a
+++ b/x86_64-w64-mingw32/lib/libdxguid.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdxtmsft.a b/x86_64-w64-mingw32/lib/libdxtmsft.a
index 23a57d2..4369260 100644
--- a/x86_64-w64-mingw32/lib/libdxtmsft.a
+++ b/x86_64-w64-mingw32/lib/libdxtmsft.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdxtrans.a b/x86_64-w64-mingw32/lib/libdxtrans.a
index 69929ea..27bb7a1 100644
--- a/x86_64-w64-mingw32/lib/libdxtrans.a
+++ b/x86_64-w64-mingw32/lib/libdxtrans.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libdxva2.a b/x86_64-w64-mingw32/lib/libdxva2.a
index fd889f5..1688d52 100644
--- a/x86_64-w64-mingw32/lib/libdxva2.a
+++ b/x86_64-w64-mingw32/lib/libdxva2.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libeappcfg.a b/x86_64-w64-mingw32/lib/libeappcfg.a
index 13c5cae..616b745 100644
--- a/x86_64-w64-mingw32/lib/libeappcfg.a
+++ b/x86_64-w64-mingw32/lib/libeappcfg.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libeappgnui.a b/x86_64-w64-mingw32/lib/libeappgnui.a
index 6b20ff3..c0fb8c6 100644
--- a/x86_64-w64-mingw32/lib/libeappgnui.a
+++ b/x86_64-w64-mingw32/lib/libeappgnui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libeapphost.a b/x86_64-w64-mingw32/lib/libeapphost.a
index bfa6f09..563cbf1 100644
--- a/x86_64-w64-mingw32/lib/libeapphost.a
+++ b/x86_64-w64-mingw32/lib/libeapphost.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libeappprxy.a b/x86_64-w64-mingw32/lib/libeappprxy.a
index 9f12d03..08cbe77 100644
--- a/x86_64-w64-mingw32/lib/libeappprxy.a
+++ b/x86_64-w64-mingw32/lib/libeappprxy.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libefsadu.a b/x86_64-w64-mingw32/lib/libefsadu.a
index b7d73b4..38e46b5 100644
--- a/x86_64-w64-mingw32/lib/libefsadu.a
+++ b/x86_64-w64-mingw32/lib/libefsadu.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libels.a b/x86_64-w64-mingw32/lib/libels.a
index b8e9d60..2a59da0 100644
--- a/x86_64-w64-mingw32/lib/libels.a
+++ b/x86_64-w64-mingw32/lib/libels.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libencapi.a b/x86_64-w64-mingw32/lib/libencapi.a
index 609e36b..f1b810a 100644
--- a/x86_64-w64-mingw32/lib/libencapi.a
+++ b/x86_64-w64-mingw32/lib/libencapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libersvc.a b/x86_64-w64-mingw32/lib/libersvc.a
index 343641e..18795a2 100644
--- a/x86_64-w64-mingw32/lib/libersvc.a
+++ b/x86_64-w64-mingw32/lib/libersvc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libes.a b/x86_64-w64-mingw32/lib/libes.a
index cf7ab0c..61f7bc7 100644
--- a/x86_64-w64-mingw32/lib/libes.a
+++ b/x86_64-w64-mingw32/lib/libes.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libesent.a b/x86_64-w64-mingw32/lib/libesent.a
index 2196bff..c97fc54 100644
--- a/x86_64-w64-mingw32/lib/libesent.a
+++ b/x86_64-w64-mingw32/lib/libesent.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libesentprf.a b/x86_64-w64-mingw32/lib/libesentprf.a
index b167b92..dbacfdb 100644
--- a/x86_64-w64-mingw32/lib/libesentprf.a
+++ b/x86_64-w64-mingw32/lib/libesentprf.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libesscli.a b/x86_64-w64-mingw32/lib/libesscli.a
index ea660a0..482216d 100644
--- a/x86_64-w64-mingw32/lib/libesscli.a
+++ b/x86_64-w64-mingw32/lib/libesscli.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libeventcls.a b/x86_64-w64-mingw32/lib/libeventcls.a
index 6a8fde9..1e90692 100644
--- a/x86_64-w64-mingw32/lib/libeventcls.a
+++ b/x86_64-w64-mingw32/lib/libeventcls.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libeventlog.a b/x86_64-w64-mingw32/lib/libeventlog.a
index 7bba41a..4d6d5ee 100644
--- a/x86_64-w64-mingw32/lib/libeventlog.a
+++ b/x86_64-w64-mingw32/lib/libeventlog.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libevntagnt.a b/x86_64-w64-mingw32/lib/libevntagnt.a
index d9ef380..d69b1eb 100644
--- a/x86_64-w64-mingw32/lib/libevntagnt.a
+++ b/x86_64-w64-mingw32/lib/libevntagnt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libevntrprv.a b/x86_64-w64-mingw32/lib/libevntrprv.a
index b214f50..a37f083 100644
--- a/x86_64-w64-mingw32/lib/libevntrprv.a
+++ b/x86_64-w64-mingw32/lib/libevntrprv.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libevr.a b/x86_64-w64-mingw32/lib/libevr.a
index ab51437..e943084 100644
--- a/x86_64-w64-mingw32/lib/libevr.a
+++ b/x86_64-w64-mingw32/lib/libevr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libevtgprov.a b/x86_64-w64-mingw32/lib/libevtgprov.a
index f5366c6..848bda8 100644
--- a/x86_64-w64-mingw32/lib/libevtgprov.a
+++ b/x86_64-w64-mingw32/lib/libevtgprov.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libexstrace.a b/x86_64-w64-mingw32/lib/libexstrace.a
index f09eef1..c76dd4f 100644
--- a/x86_64-w64-mingw32/lib/libexstrace.a
+++ b/x86_64-w64-mingw32/lib/libexstrace.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libextmgr.a b/x86_64-w64-mingw32/lib/libextmgr.a
index 4423e41..f7207c5 100644
--- a/x86_64-w64-mingw32/lib/libextmgr.a
+++ b/x86_64-w64-mingw32/lib/libextmgr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libf3ahvoas.a b/x86_64-w64-mingw32/lib/libf3ahvoas.a
index 0cde92e..8886906 100644
--- a/x86_64-w64-mingw32/lib/libf3ahvoas.a
+++ b/x86_64-w64-mingw32/lib/libf3ahvoas.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfastprox.a b/x86_64-w64-mingw32/lib/libfastprox.a
index 908ff74..ac0e758 100644
--- a/x86_64-w64-mingw32/lib/libfastprox.a
+++ b/x86_64-w64-mingw32/lib/libfastprox.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfaultrep.a b/x86_64-w64-mingw32/lib/libfaultrep.a
index 7f679f3..cfe6315 100644
--- a/x86_64-w64-mingw32/lib/libfaultrep.a
+++ b/x86_64-w64-mingw32/lib/libfaultrep.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfcachdll.a b/x86_64-w64-mingw32/lib/libfcachdll.a
index 3a543ae..8220d4e 100644
--- a/x86_64-w64-mingw32/lib/libfcachdll.a
+++ b/x86_64-w64-mingw32/lib/libfcachdll.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfde.a b/x86_64-w64-mingw32/lib/libfde.a
index cc3e452..21894a6 100644
--- a/x86_64-w64-mingw32/lib/libfde.a
+++ b/x86_64-w64-mingw32/lib/libfde.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfdeploy.a b/x86_64-w64-mingw32/lib/libfdeploy.a
index 656688d..89b4c2f 100644
--- a/x86_64-w64-mingw32/lib/libfdeploy.a
+++ b/x86_64-w64-mingw32/lib/libfdeploy.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfeclient.a b/x86_64-w64-mingw32/lib/libfeclient.a
index e890e49..f95861c 100644
--- a/x86_64-w64-mingw32/lib/libfeclient.a
+++ b/x86_64-w64-mingw32/lib/libfeclient.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfilemgmt.a b/x86_64-w64-mingw32/lib/libfilemgmt.a
index e9a9362..68650a3 100644
--- a/x86_64-w64-mingw32/lib/libfilemgmt.a
+++ b/x86_64-w64-mingw32/lib/libfilemgmt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfldrclnr.a b/x86_64-w64-mingw32/lib/libfldrclnr.a
index c2a6000..f6e9bf3 100644
--- a/x86_64-w64-mingw32/lib/libfldrclnr.a
+++ b/x86_64-w64-mingw32/lib/libfldrclnr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfltlib.a b/x86_64-w64-mingw32/lib/libfltlib.a
index ed73731..1d5c011 100644
--- a/x86_64-w64-mingw32/lib/libfltlib.a
+++ b/x86_64-w64-mingw32/lib/libfltlib.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfmifs.a b/x86_64-w64-mingw32/lib/libfmifs.a
index bda07bc..a4b7431 100644
--- a/x86_64-w64-mingw32/lib/libfmifs.a
+++ b/x86_64-w64-mingw32/lib/libfmifs.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfontext.a b/x86_64-w64-mingw32/lib/libfontext.a
index e34902b..cbb9a2b 100644
--- a/x86_64-w64-mingw32/lib/libfontext.a
+++ b/x86_64-w64-mingw32/lib/libfontext.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfontsub.a b/x86_64-w64-mingw32/lib/libfontsub.a
index 10b194b..bf88af3 100644
--- a/x86_64-w64-mingw32/lib/libfontsub.a
+++ b/x86_64-w64-mingw32/lib/libfontsub.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libframedyn.a b/x86_64-w64-mingw32/lib/libframedyn.a
index 52a72c4..c9c29fb 100644
--- a/x86_64-w64-mingw32/lib/libframedyn.a
+++ b/x86_64-w64-mingw32/lib/libframedyn.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfsusd.a b/x86_64-w64-mingw32/lib/libfsusd.a
index 5ed8721..60008eb 100644
--- a/x86_64-w64-mingw32/lib/libfsusd.a
+++ b/x86_64-w64-mingw32/lib/libfsusd.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libftpctrs2.a b/x86_64-w64-mingw32/lib/libftpctrs2.a
index b1c9a78..d87faaa 100644
--- a/x86_64-w64-mingw32/lib/libftpctrs2.a
+++ b/x86_64-w64-mingw32/lib/libftpctrs2.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libftpmib.a b/x86_64-w64-mingw32/lib/libftpmib.a
index a680b43..3eb7e21 100644
--- a/x86_64-w64-mingw32/lib/libftpmib.a
+++ b/x86_64-w64-mingw32/lib/libftpmib.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libftpsvc2.a b/x86_64-w64-mingw32/lib/libftpsvc2.a
index 307b65f..18e4e11 100644
--- a/x86_64-w64-mingw32/lib/libftpsvc2.a
+++ b/x86_64-w64-mingw32/lib/libftpsvc2.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfwcfg.a b/x86_64-w64-mingw32/lib/libfwcfg.a
index 819b647..e7d15a4 100644
--- a/x86_64-w64-mingw32/lib/libfwcfg.a
+++ b/x86_64-w64-mingw32/lib/libfwcfg.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfwpuclnt.a b/x86_64-w64-mingw32/lib/libfwpuclnt.a
index fa343f6..1a880f4 100644
--- a/x86_64-w64-mingw32/lib/libfwpuclnt.a
+++ b/x86_64-w64-mingw32/lib/libfwpuclnt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfxsapi.a b/x86_64-w64-mingw32/lib/libfxsapi.a
index a3d3860..a293157 100644
--- a/x86_64-w64-mingw32/lib/libfxsapi.a
+++ b/x86_64-w64-mingw32/lib/libfxsapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfxscfgwz.a b/x86_64-w64-mingw32/lib/libfxscfgwz.a
index 4d686b6..8db2ff9 100644
--- a/x86_64-w64-mingw32/lib/libfxscfgwz.a
+++ b/x86_64-w64-mingw32/lib/libfxscfgwz.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfxscom.a b/x86_64-w64-mingw32/lib/libfxscom.a
index 7e9bf81..eaf80ee 100644
--- a/x86_64-w64-mingw32/lib/libfxscom.a
+++ b/x86_64-w64-mingw32/lib/libfxscom.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfxscomex.a b/x86_64-w64-mingw32/lib/libfxscomex.a
index a91d23f..980848f 100644
--- a/x86_64-w64-mingw32/lib/libfxscomex.a
+++ b/x86_64-w64-mingw32/lib/libfxscomex.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfxsdrv.a b/x86_64-w64-mingw32/lib/libfxsdrv.a
index ce68d12..d7adaac 100644
--- a/x86_64-w64-mingw32/lib/libfxsdrv.a
+++ b/x86_64-w64-mingw32/lib/libfxsdrv.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfxsmon.a b/x86_64-w64-mingw32/lib/libfxsmon.a
index ce77875..73c79fc 100644
--- a/x86_64-w64-mingw32/lib/libfxsmon.a
+++ b/x86_64-w64-mingw32/lib/libfxsmon.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfxsocm.a b/x86_64-w64-mingw32/lib/libfxsocm.a
index bc18226..9fd9634 100644
--- a/x86_64-w64-mingw32/lib/libfxsocm.a
+++ b/x86_64-w64-mingw32/lib/libfxsocm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfxsperf.a b/x86_64-w64-mingw32/lib/libfxsperf.a
index f45e810..ea5386c 100644
--- a/x86_64-w64-mingw32/lib/libfxsperf.a
+++ b/x86_64-w64-mingw32/lib/libfxsperf.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfxsroute.a b/x86_64-w64-mingw32/lib/libfxsroute.a
index 0fb169a..c236921 100644
--- a/x86_64-w64-mingw32/lib/libfxsroute.a
+++ b/x86_64-w64-mingw32/lib/libfxsroute.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfxsst.a b/x86_64-w64-mingw32/lib/libfxsst.a
index 39f8074..5cf4bd3 100644
--- a/x86_64-w64-mingw32/lib/libfxsst.a
+++ b/x86_64-w64-mingw32/lib/libfxsst.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfxst30.a b/x86_64-w64-mingw32/lib/libfxst30.a
index 1bba34d..0b1d6f4 100644
--- a/x86_64-w64-mingw32/lib/libfxst30.a
+++ b/x86_64-w64-mingw32/lib/libfxst30.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfxstiff.a b/x86_64-w64-mingw32/lib/libfxstiff.a
index 3c4be91..377b4fa 100644
--- a/x86_64-w64-mingw32/lib/libfxstiff.a
+++ b/x86_64-w64-mingw32/lib/libfxstiff.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfxsui.a b/x86_64-w64-mingw32/lib/libfxsui.a
index 06d3ff1..d3b877f 100644
--- a/x86_64-w64-mingw32/lib/libfxsui.a
+++ b/x86_64-w64-mingw32/lib/libfxsui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libfxswzrd.a b/x86_64-w64-mingw32/lib/libfxswzrd.a
index 052c4a0..6febb18 100644
--- a/x86_64-w64-mingw32/lib/libfxswzrd.a
+++ b/x86_64-w64-mingw32/lib/libfxswzrd.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libgcdef.a b/x86_64-w64-mingw32/lib/libgcdef.a
index 227a872..5edf620 100644
--- a/x86_64-w64-mingw32/lib/libgcdef.a
+++ b/x86_64-w64-mingw32/lib/libgcdef.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libgdi32.a b/x86_64-w64-mingw32/lib/libgdi32.a
index 0fb3761..07b1801 100644
--- a/x86_64-w64-mingw32/lib/libgdi32.a
+++ b/x86_64-w64-mingw32/lib/libgdi32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libgdiplus.a b/x86_64-w64-mingw32/lib/libgdiplus.a
index a625348..13ba5e6 100644
--- a/x86_64-w64-mingw32/lib/libgdiplus.a
+++ b/x86_64-w64-mingw32/lib/libgdiplus.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libgetuname.a b/x86_64-w64-mingw32/lib/libgetuname.a
index 8586f03..68d2392 100644
--- a/x86_64-w64-mingw32/lib/libgetuname.a
+++ b/x86_64-w64-mingw32/lib/libgetuname.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libglmf32.a b/x86_64-w64-mingw32/lib/libglmf32.a
index 8d09447..40927ad 100644
--- a/x86_64-w64-mingw32/lib/libglmf32.a
+++ b/x86_64-w64-mingw32/lib/libglmf32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libglu32.a b/x86_64-w64-mingw32/lib/libglu32.a
index 9ac6a8b..d275a2e 100644
--- a/x86_64-w64-mingw32/lib/libglu32.a
+++ b/x86_64-w64-mingw32/lib/libglu32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libgmon.a b/x86_64-w64-mingw32/lib/libgmon.a
index ec44d73..aa964f4 100644
--- a/x86_64-w64-mingw32/lib/libgmon.a
+++ b/x86_64-w64-mingw32/lib/libgmon.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libgpedit.a b/x86_64-w64-mingw32/lib/libgpedit.a
index fcb755e..ca23d4d 100644
--- a/x86_64-w64-mingw32/lib/libgpedit.a
+++ b/x86_64-w64-mingw32/lib/libgpedit.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libgpkcsp.a b/x86_64-w64-mingw32/lib/libgpkcsp.a
index 7d9bda7..5f28fd0 100644
--- a/x86_64-w64-mingw32/lib/libgpkcsp.a
+++ b/x86_64-w64-mingw32/lib/libgpkcsp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libgptext.a b/x86_64-w64-mingw32/lib/libgptext.a
index a5f1fd6..8251075 100644
--- a/x86_64-w64-mingw32/lib/libgptext.a
+++ b/x86_64-w64-mingw32/lib/libgptext.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libguitrn.a b/x86_64-w64-mingw32/lib/libguitrn.a
index e3a3ceb..a3fec84 100644
--- a/x86_64-w64-mingw32/lib/libguitrn.a
+++ b/x86_64-w64-mingw32/lib/libguitrn.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libgzip.a b/x86_64-w64-mingw32/lib/libgzip.a
index 7a155af..87d0e22 100644
--- a/x86_64-w64-mingw32/lib/libgzip.a
+++ b/x86_64-w64-mingw32/lib/libgzip.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libh323msp.a b/x86_64-w64-mingw32/lib/libh323msp.a
index 447e0c2..11091ad 100644
--- a/x86_64-w64-mingw32/lib/libh323msp.a
+++ b/x86_64-w64-mingw32/lib/libh323msp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libhal.a b/x86_64-w64-mingw32/lib/libhal.a
index dcc2845..43fd3bd 100644
--- a/x86_64-w64-mingw32/lib/libhal.a
+++ b/x86_64-w64-mingw32/lib/libhal.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libhbaapi.a b/x86_64-w64-mingw32/lib/libhbaapi.a
index 68b7b7f..7849519 100644
--- a/x86_64-w64-mingw32/lib/libhbaapi.a
+++ b/x86_64-w64-mingw32/lib/libhbaapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libhgfs.a b/x86_64-w64-mingw32/lib/libhgfs.a
index af16103..1fc6cbd 100644
--- a/x86_64-w64-mingw32/lib/libhgfs.a
+++ b/x86_64-w64-mingw32/lib/libhgfs.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libhhsetup.a b/x86_64-w64-mingw32/lib/libhhsetup.a
index c77d909..bd51e00 100644
--- a/x86_64-w64-mingw32/lib/libhhsetup.a
+++ b/x86_64-w64-mingw32/lib/libhhsetup.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libhid.a b/x86_64-w64-mingw32/lib/libhid.a
index 713f4fd..e925b36 100644
--- a/x86_64-w64-mingw32/lib/libhid.a
+++ b/x86_64-w64-mingw32/lib/libhid.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libhidclass.a b/x86_64-w64-mingw32/lib/libhidclass.a
index 1920a49..c99065c 100644
--- a/x86_64-w64-mingw32/lib/libhidclass.a
+++ b/x86_64-w64-mingw32/lib/libhidclass.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libhidparse.a b/x86_64-w64-mingw32/lib/libhidparse.a
index 996c960..4ab039d 100644
--- a/x86_64-w64-mingw32/lib/libhidparse.a
+++ b/x86_64-w64-mingw32/lib/libhidparse.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libhlink.a b/x86_64-w64-mingw32/lib/libhlink.a
index 4f649e8..4c62df7 100644
--- a/x86_64-w64-mingw32/lib/libhlink.a
+++ b/x86_64-w64-mingw32/lib/libhlink.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libhmmapi.a b/x86_64-w64-mingw32/lib/libhmmapi.a
index ef5546f..17abcf2 100644
--- a/x86_64-w64-mingw32/lib/libhmmapi.a
+++ b/x86_64-w64-mingw32/lib/libhmmapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libhnetcfg.a b/x86_64-w64-mingw32/lib/libhnetcfg.a
index a076bfa..c2f5e86 100644
--- a/x86_64-w64-mingw32/lib/libhnetcfg.a
+++ b/x86_64-w64-mingw32/lib/libhnetcfg.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libhnetmon.a b/x86_64-w64-mingw32/lib/libhnetmon.a
index 6e3644a..7d84f7c 100644
--- a/x86_64-w64-mingw32/lib/libhnetmon.a
+++ b/x86_64-w64-mingw32/lib/libhnetmon.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libhnetwiz.a b/x86_64-w64-mingw32/lib/libhnetwiz.a
index e5ff411..3683eaf 100644
--- a/x86_64-w64-mingw32/lib/libhnetwiz.a
+++ b/x86_64-w64-mingw32/lib/libhnetwiz.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libhostmib.a b/x86_64-w64-mingw32/lib/libhostmib.a
index c7f2f24..b350487 100644
--- a/x86_64-w64-mingw32/lib/libhostmib.a
+++ b/x86_64-w64-mingw32/lib/libhostmib.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libhotplug.a b/x86_64-w64-mingw32/lib/libhotplug.a
index 5958d56..44a04c2 100644
--- a/x86_64-w64-mingw32/lib/libhotplug.a
+++ b/x86_64-w64-mingw32/lib/libhotplug.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libhticons.a b/x86_64-w64-mingw32/lib/libhticons.a
index 9218433..f8d9504 100644
--- a/x86_64-w64-mingw32/lib/libhticons.a
+++ b/x86_64-w64-mingw32/lib/libhticons.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libhtrn_jis.a b/x86_64-w64-mingw32/lib/libhtrn_jis.a
index 8e824cd..1f99ad2 100644
--- a/x86_64-w64-mingw32/lib/libhtrn_jis.a
+++ b/x86_64-w64-mingw32/lib/libhtrn_jis.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libhttpapi.a b/x86_64-w64-mingw32/lib/libhttpapi.a
index 5438b19..fabee58 100644
--- a/x86_64-w64-mingw32/lib/libhttpapi.a
+++ b/x86_64-w64-mingw32/lib/libhttpapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libhttpext.a b/x86_64-w64-mingw32/lib/libhttpext.a
index c495898..1b49c02 100644
--- a/x86_64-w64-mingw32/lib/libhttpext.a
+++ b/x86_64-w64-mingw32/lib/libhttpext.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libhttpmib.a b/x86_64-w64-mingw32/lib/libhttpmib.a
index 1365e97..460cd86 100644
--- a/x86_64-w64-mingw32/lib/libhttpmib.a
+++ b/x86_64-w64-mingw32/lib/libhttpmib.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libhttpodbc.a b/x86_64-w64-mingw32/lib/libhttpodbc.a
index 3a486d2..3bb2caa 100644
--- a/x86_64-w64-mingw32/lib/libhttpodbc.a
+++ b/x86_64-w64-mingw32/lib/libhttpodbc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libhtui.a b/x86_64-w64-mingw32/lib/libhtui.a
index f721e07..55156e8 100644
--- a/x86_64-w64-mingw32/lib/libhtui.a
+++ b/x86_64-w64-mingw32/lib/libhtui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libhypertrm.a b/x86_64-w64-mingw32/lib/libhypertrm.a
index 1030fe3..2e14cd9 100644
--- a/x86_64-w64-mingw32/lib/libhypertrm.a
+++ b/x86_64-w64-mingw32/lib/libhypertrm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiasacct.a b/x86_64-w64-mingw32/lib/libiasacct.a
index 35f2f06..e4c9b7a 100644
--- a/x86_64-w64-mingw32/lib/libiasacct.a
+++ b/x86_64-w64-mingw32/lib/libiasacct.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiasads.a b/x86_64-w64-mingw32/lib/libiasads.a
index 082f621..f5bf27c 100644
--- a/x86_64-w64-mingw32/lib/libiasads.a
+++ b/x86_64-w64-mingw32/lib/libiasads.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiashlpr.a b/x86_64-w64-mingw32/lib/libiashlpr.a
index 0772311..c679f2d 100644
--- a/x86_64-w64-mingw32/lib/libiashlpr.a
+++ b/x86_64-w64-mingw32/lib/libiashlpr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiasnap.a b/x86_64-w64-mingw32/lib/libiasnap.a
index f5a81e0..cc23eac 100644
--- a/x86_64-w64-mingw32/lib/libiasnap.a
+++ b/x86_64-w64-mingw32/lib/libiasnap.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiaspolcy.a b/x86_64-w64-mingw32/lib/libiaspolcy.a
index 3ce4e1b..97c40b9 100644
--- a/x86_64-w64-mingw32/lib/libiaspolcy.a
+++ b/x86_64-w64-mingw32/lib/libiaspolcy.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiasrad.a b/x86_64-w64-mingw32/lib/libiasrad.a
index 440dc29..c8420b4 100644
--- a/x86_64-w64-mingw32/lib/libiasrad.a
+++ b/x86_64-w64-mingw32/lib/libiasrad.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiassam.a b/x86_64-w64-mingw32/lib/libiassam.a
index 1fad0a3..8767057 100644
--- a/x86_64-w64-mingw32/lib/libiassam.a
+++ b/x86_64-w64-mingw32/lib/libiassam.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiassdo.a b/x86_64-w64-mingw32/lib/libiassdo.a
index b3f89c4..4a2cc68 100644
--- a/x86_64-w64-mingw32/lib/libiassdo.a
+++ b/x86_64-w64-mingw32/lib/libiassdo.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiassvcs.a b/x86_64-w64-mingw32/lib/libiassvcs.a
index c2c1121..c6b347f 100644
--- a/x86_64-w64-mingw32/lib/libiassvcs.a
+++ b/x86_64-w64-mingw32/lib/libiassvcs.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libicaapi.a b/x86_64-w64-mingw32/lib/libicaapi.a
index 3b87fb7..333b7fc 100644
--- a/x86_64-w64-mingw32/lib/libicaapi.a
+++ b/x86_64-w64-mingw32/lib/libicaapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libicfgnt5.a b/x86_64-w64-mingw32/lib/libicfgnt5.a
index 48f0013..4570320 100644
--- a/x86_64-w64-mingw32/lib/libicfgnt5.a
+++ b/x86_64-w64-mingw32/lib/libicfgnt5.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libicm32.a b/x86_64-w64-mingw32/lib/libicm32.a
index 0ba6926..dc32a4f 100644
--- a/x86_64-w64-mingw32/lib/libicm32.a
+++ b/x86_64-w64-mingw32/lib/libicm32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libicmp.a b/x86_64-w64-mingw32/lib/libicmp.a
index da7a68d..9abb609 100644
--- a/x86_64-w64-mingw32/lib/libicmp.a
+++ b/x86_64-w64-mingw32/lib/libicmp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libicmui.a b/x86_64-w64-mingw32/lib/libicmui.a
index 4d7a7fe..c7acd6c 100644
--- a/x86_64-w64-mingw32/lib/libicmui.a
+++ b/x86_64-w64-mingw32/lib/libicmui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libicwconn.a b/x86_64-w64-mingw32/lib/libicwconn.a
index 5a96da8..c1c7630 100644
--- a/x86_64-w64-mingw32/lib/libicwconn.a
+++ b/x86_64-w64-mingw32/lib/libicwconn.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libicwdial.a b/x86_64-w64-mingw32/lib/libicwdial.a
index b02bded..f87672b 100644
--- a/x86_64-w64-mingw32/lib/libicwdial.a
+++ b/x86_64-w64-mingw32/lib/libicwdial.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libicwdl.a b/x86_64-w64-mingw32/lib/libicwdl.a
index bec9473..2fa7cdf 100644
--- a/x86_64-w64-mingw32/lib/libicwdl.a
+++ b/x86_64-w64-mingw32/lib/libicwdl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libicwhelp.a b/x86_64-w64-mingw32/lib/libicwhelp.a
index 69e1b83..d629deb 100644
--- a/x86_64-w64-mingw32/lib/libicwhelp.a
+++ b/x86_64-w64-mingw32/lib/libicwhelp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libicwphbk.a b/x86_64-w64-mingw32/lib/libicwphbk.a
index 592c5b0..6d57009 100644
--- a/x86_64-w64-mingw32/lib/libicwphbk.a
+++ b/x86_64-w64-mingw32/lib/libicwphbk.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libicwutil.a b/x86_64-w64-mingw32/lib/libicwutil.a
index 1628c32..2af4729 100644
--- a/x86_64-w64-mingw32/lib/libicwutil.a
+++ b/x86_64-w64-mingw32/lib/libicwutil.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libidq.a b/x86_64-w64-mingw32/lib/libidq.a
index b8b4a77..161e67e 100644
--- a/x86_64-w64-mingw32/lib/libidq.a
+++ b/x86_64-w64-mingw32/lib/libidq.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libieakeng.a b/x86_64-w64-mingw32/lib/libieakeng.a
index f5d3a6a..22db2bc 100644
--- a/x86_64-w64-mingw32/lib/libieakeng.a
+++ b/x86_64-w64-mingw32/lib/libieakeng.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libieaksie.a b/x86_64-w64-mingw32/lib/libieaksie.a
index 07a86a9..8911d65 100644
--- a/x86_64-w64-mingw32/lib/libieaksie.a
+++ b/x86_64-w64-mingw32/lib/libieaksie.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiedkcs32.a b/x86_64-w64-mingw32/lib/libiedkcs32.a
index e111bf1..c634503 100644
--- a/x86_64-w64-mingw32/lib/libiedkcs32.a
+++ b/x86_64-w64-mingw32/lib/libiedkcs32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libieencode.a b/x86_64-w64-mingw32/lib/libieencode.a
index 7b9518b..3772212 100644
--- a/x86_64-w64-mingw32/lib/libieencode.a
+++ b/x86_64-w64-mingw32/lib/libieencode.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiepeers.a b/x86_64-w64-mingw32/lib/libiepeers.a
index d2e6fe0..3607279 100644
--- a/x86_64-w64-mingw32/lib/libiepeers.a
+++ b/x86_64-w64-mingw32/lib/libiepeers.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiernonce.a b/x86_64-w64-mingw32/lib/libiernonce.a
index 76dd583..e19cb08 100644
--- a/x86_64-w64-mingw32/lib/libiernonce.a
+++ b/x86_64-w64-mingw32/lib/libiernonce.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiesetup.a b/x86_64-w64-mingw32/lib/libiesetup.a
index aeab3b2..2d0a173 100644
--- a/x86_64-w64-mingw32/lib/libiesetup.a
+++ b/x86_64-w64-mingw32/lib/libiesetup.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libifmon.a b/x86_64-w64-mingw32/lib/libifmon.a
index 97bd66e..4bb3202 100644
--- a/x86_64-w64-mingw32/lib/libifmon.a
+++ b/x86_64-w64-mingw32/lib/libifmon.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libifsutil.a b/x86_64-w64-mingw32/lib/libifsutil.a
index fc5a8f9..60ab367 100644
--- a/x86_64-w64-mingw32/lib/libifsutil.a
+++ b/x86_64-w64-mingw32/lib/libifsutil.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libigmpagnt.a b/x86_64-w64-mingw32/lib/libigmpagnt.a
index 673d38d..e1a764f 100644
--- a/x86_64-w64-mingw32/lib/libigmpagnt.a
+++ b/x86_64-w64-mingw32/lib/libigmpagnt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiis.a b/x86_64-w64-mingw32/lib/libiis.a
index deb50bf..16244e0 100644
--- a/x86_64-w64-mingw32/lib/libiis.a
+++ b/x86_64-w64-mingw32/lib/libiis.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiisadmin.a b/x86_64-w64-mingw32/lib/libiisadmin.a
index 757cee7..95acb09 100644
--- a/x86_64-w64-mingw32/lib/libiisadmin.a
+++ b/x86_64-w64-mingw32/lib/libiisadmin.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiiscfg.a b/x86_64-w64-mingw32/lib/libiiscfg.a
index 1a6a6b4..cd632a9 100644
--- a/x86_64-w64-mingw32/lib/libiiscfg.a
+++ b/x86_64-w64-mingw32/lib/libiiscfg.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiisclex4.a b/x86_64-w64-mingw32/lib/libiisclex4.a
index 417c893..f4fe528 100644
--- a/x86_64-w64-mingw32/lib/libiisclex4.a
+++ b/x86_64-w64-mingw32/lib/libiisclex4.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiisext.a b/x86_64-w64-mingw32/lib/libiisext.a
index 18557c2..3f59334 100644
--- a/x86_64-w64-mingw32/lib/libiisext.a
+++ b/x86_64-w64-mingw32/lib/libiisext.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiislog.a b/x86_64-w64-mingw32/lib/libiislog.a
index b45a610..d87bd10 100644
--- a/x86_64-w64-mingw32/lib/libiislog.a
+++ b/x86_64-w64-mingw32/lib/libiislog.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiismap.a b/x86_64-w64-mingw32/lib/libiismap.a
index 21856ee..2c37385 100644
--- a/x86_64-w64-mingw32/lib/libiismap.a
+++ b/x86_64-w64-mingw32/lib/libiismap.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiisrstap.a b/x86_64-w64-mingw32/lib/libiisrstap.a
index 0211c4e..59a2f44 100644
--- a/x86_64-w64-mingw32/lib/libiisrstap.a
+++ b/x86_64-w64-mingw32/lib/libiisrstap.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiisrtl.a b/x86_64-w64-mingw32/lib/libiisrtl.a
index 5effc0a..335bddd 100644
--- a/x86_64-w64-mingw32/lib/libiisrtl.a
+++ b/x86_64-w64-mingw32/lib/libiisrtl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiissuba.a b/x86_64-w64-mingw32/lib/libiissuba.a
index 10f77d5..951cc37 100644
--- a/x86_64-w64-mingw32/lib/libiissuba.a
+++ b/x86_64-w64-mingw32/lib/libiissuba.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiisui.a b/x86_64-w64-mingw32/lib/libiisui.a
index aac5655..6354398 100644
--- a/x86_64-w64-mingw32/lib/libiisui.a
+++ b/x86_64-w64-mingw32/lib/libiisui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiisuiobj.a b/x86_64-w64-mingw32/lib/libiisuiobj.a
index 1a32308..80ba34f 100644
--- a/x86_64-w64-mingw32/lib/libiisuiobj.a
+++ b/x86_64-w64-mingw32/lib/libiisuiobj.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiisutil.a b/x86_64-w64-mingw32/lib/libiisutil.a
index 73c376e..97f1a98 100644
--- a/x86_64-w64-mingw32/lib/libiisutil.a
+++ b/x86_64-w64-mingw32/lib/libiisutil.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiisw3adm.a b/x86_64-w64-mingw32/lib/libiisw3adm.a
index 5990acc..4937936 100644
--- a/x86_64-w64-mingw32/lib/libiisw3adm.a
+++ b/x86_64-w64-mingw32/lib/libiisw3adm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiiswmi.a b/x86_64-w64-mingw32/lib/libiiswmi.a
index ae616fc..c47d8cc 100644
--- a/x86_64-w64-mingw32/lib/libiiswmi.a
+++ b/x86_64-w64-mingw32/lib/libiiswmi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libimagehlp.a b/x86_64-w64-mingw32/lib/libimagehlp.a
index 2af03cd..c5f8252 100644
--- a/x86_64-w64-mingw32/lib/libimagehlp.a
+++ b/x86_64-w64-mingw32/lib/libimagehlp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libimekrcic.a b/x86_64-w64-mingw32/lib/libimekrcic.a
index af27228..3db5aa1 100644
--- a/x86_64-w64-mingw32/lib/libimekrcic.a
+++ b/x86_64-w64-mingw32/lib/libimekrcic.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libimeshare.a b/x86_64-w64-mingw32/lib/libimeshare.a
index 37bfab7..174f579 100644
--- a/x86_64-w64-mingw32/lib/libimeshare.a
+++ b/x86_64-w64-mingw32/lib/libimeshare.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libimgutil.a b/x86_64-w64-mingw32/lib/libimgutil.a
index ae9a1d3..393146d 100644
--- a/x86_64-w64-mingw32/lib/libimgutil.a
+++ b/x86_64-w64-mingw32/lib/libimgutil.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libimjp81k.a b/x86_64-w64-mingw32/lib/libimjp81k.a
index 1bcde9a..6880703 100644
--- a/x86_64-w64-mingw32/lib/libimjp81k.a
+++ b/x86_64-w64-mingw32/lib/libimjp81k.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libimjpcic.a b/x86_64-w64-mingw32/lib/libimjpcic.a
index e58e630..ee467b5 100644
--- a/x86_64-w64-mingw32/lib/libimjpcic.a
+++ b/x86_64-w64-mingw32/lib/libimjpcic.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libimjpcus.a b/x86_64-w64-mingw32/lib/libimjpcus.a
index c4df12b..0d535fe 100644
--- a/x86_64-w64-mingw32/lib/libimjpcus.a
+++ b/x86_64-w64-mingw32/lib/libimjpcus.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libimjpdct.a b/x86_64-w64-mingw32/lib/libimjpdct.a
index e0eac36..c66a751 100644
--- a/x86_64-w64-mingw32/lib/libimjpdct.a
+++ b/x86_64-w64-mingw32/lib/libimjpdct.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libimjputyc.a b/x86_64-w64-mingw32/lib/libimjputyc.a
index 4e5c009..dc67e29 100644
--- a/x86_64-w64-mingw32/lib/libimjputyc.a
+++ b/x86_64-w64-mingw32/lib/libimjputyc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libimm32.a b/x86_64-w64-mingw32/lib/libimm32.a
index 7b19996..16195d3 100644
--- a/x86_64-w64-mingw32/lib/libimm32.a
+++ b/x86_64-w64-mingw32/lib/libimm32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libimsinsnt.a b/x86_64-w64-mingw32/lib/libimsinsnt.a
index 9fa2ba1..8ef4b61 100644
--- a/x86_64-w64-mingw32/lib/libimsinsnt.a
+++ b/x86_64-w64-mingw32/lib/libimsinsnt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libimskdic.a b/x86_64-w64-mingw32/lib/libimskdic.a
index 4328166..cbcfd6f 100644
--- a/x86_64-w64-mingw32/lib/libimskdic.a
+++ b/x86_64-w64-mingw32/lib/libimskdic.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libinetcfg.a b/x86_64-w64-mingw32/lib/libinetcfg.a
index f1a41b6..155aace 100644
--- a/x86_64-w64-mingw32/lib/libinetcfg.a
+++ b/x86_64-w64-mingw32/lib/libinetcfg.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libinetcomm.a b/x86_64-w64-mingw32/lib/libinetcomm.a
index c5a9530..c13774d 100644
--- a/x86_64-w64-mingw32/lib/libinetcomm.a
+++ b/x86_64-w64-mingw32/lib/libinetcomm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libinetmgr.a b/x86_64-w64-mingw32/lib/libinetmgr.a
index adc612d..417ea7a 100644
--- a/x86_64-w64-mingw32/lib/libinetmgr.a
+++ b/x86_64-w64-mingw32/lib/libinetmgr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libinetmib1.a b/x86_64-w64-mingw32/lib/libinetmib1.a
index 1a35a26..1b0d5cb 100644
--- a/x86_64-w64-mingw32/lib/libinetmib1.a
+++ b/x86_64-w64-mingw32/lib/libinetmib1.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libinetpp.a b/x86_64-w64-mingw32/lib/libinetpp.a
index 8f8afd0..26bfb43 100644
--- a/x86_64-w64-mingw32/lib/libinetpp.a
+++ b/x86_64-w64-mingw32/lib/libinetpp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libinetppui.a b/x86_64-w64-mingw32/lib/libinetppui.a
index 3855264..4b89b37 100644
--- a/x86_64-w64-mingw32/lib/libinetppui.a
+++ b/x86_64-w64-mingw32/lib/libinetppui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libinfoadmn.a b/x86_64-w64-mingw32/lib/libinfoadmn.a
index 8165b7b..0d0500e 100644
--- a/x86_64-w64-mingw32/lib/libinfoadmn.a
+++ b/x86_64-w64-mingw32/lib/libinfoadmn.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libinfocomm.a b/x86_64-w64-mingw32/lib/libinfocomm.a
index 42309fe..560fef5 100644
--- a/x86_64-w64-mingw32/lib/libinfocomm.a
+++ b/x86_64-w64-mingw32/lib/libinfocomm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libinfoctrs.a b/x86_64-w64-mingw32/lib/libinfoctrs.a
index 4ead831..c78fbc3 100644
--- a/x86_64-w64-mingw32/lib/libinfoctrs.a
+++ b/x86_64-w64-mingw32/lib/libinfoctrs.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libinfosoft.a b/x86_64-w64-mingw32/lib/libinfosoft.a
index 2f94d50..f996c25 100644
--- a/x86_64-w64-mingw32/lib/libinfosoft.a
+++ b/x86_64-w64-mingw32/lib/libinfosoft.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libinitpki.a b/x86_64-w64-mingw32/lib/libinitpki.a
index 841b124..9d818b8 100644
--- a/x86_64-w64-mingw32/lib/libinitpki.a
+++ b/x86_64-w64-mingw32/lib/libinitpki.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libinput.a b/x86_64-w64-mingw32/lib/libinput.a
index 7a1cadf..e5098bd 100644
--- a/x86_64-w64-mingw32/lib/libinput.a
+++ b/x86_64-w64-mingw32/lib/libinput.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libinseng.a b/x86_64-w64-mingw32/lib/libinseng.a
index 489f3bd..2567ad1 100644
--- a/x86_64-w64-mingw32/lib/libinseng.a
+++ b/x86_64-w64-mingw32/lib/libinseng.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiphlpapi.a b/x86_64-w64-mingw32/lib/libiphlpapi.a
index 4c12b21..e093619 100644
--- a/x86_64-w64-mingw32/lib/libiphlpapi.a
+++ b/x86_64-w64-mingw32/lib/libiphlpapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libipmontr.a b/x86_64-w64-mingw32/lib/libipmontr.a
index f41030a..774e087 100644
--- a/x86_64-w64-mingw32/lib/libipmontr.a
+++ b/x86_64-w64-mingw32/lib/libipmontr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libipnathlp.a b/x86_64-w64-mingw32/lib/libipnathlp.a
index d8fcc7a..9415da8 100644
--- a/x86_64-w64-mingw32/lib/libipnathlp.a
+++ b/x86_64-w64-mingw32/lib/libipnathlp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libippromon.a b/x86_64-w64-mingw32/lib/libippromon.a
index 5194261..5e39d2a 100644
--- a/x86_64-w64-mingw32/lib/libippromon.a
+++ b/x86_64-w64-mingw32/lib/libippromon.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiprip.a b/x86_64-w64-mingw32/lib/libiprip.a
index 77299f3..0687fd5 100644
--- a/x86_64-w64-mingw32/lib/libiprip.a
+++ b/x86_64-w64-mingw32/lib/libiprip.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiprop.a b/x86_64-w64-mingw32/lib/libiprop.a
index 6b8cba1..98ba330 100644
--- a/x86_64-w64-mingw32/lib/libiprop.a
+++ b/x86_64-w64-mingw32/lib/libiprop.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiprtprio.a b/x86_64-w64-mingw32/lib/libiprtprio.a
index 61f3efd..92ed6cd 100644
--- a/x86_64-w64-mingw32/lib/libiprtprio.a
+++ b/x86_64-w64-mingw32/lib/libiprtprio.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiprtrmgr.a b/x86_64-w64-mingw32/lib/libiprtrmgr.a
index 9ea1c81..ec65052 100644
--- a/x86_64-w64-mingw32/lib/libiprtrmgr.a
+++ b/x86_64-w64-mingw32/lib/libiprtrmgr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libipsecsnp.a b/x86_64-w64-mingw32/lib/libipsecsnp.a
index 7f32611..340428f 100644
--- a/x86_64-w64-mingw32/lib/libipsecsnp.a
+++ b/x86_64-w64-mingw32/lib/libipsecsnp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libipsecsvc.a b/x86_64-w64-mingw32/lib/libipsecsvc.a
index 7809389..e36e9b4 100644
--- a/x86_64-w64-mingw32/lib/libipsecsvc.a
+++ b/x86_64-w64-mingw32/lib/libipsecsvc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libipsmsnap.a b/x86_64-w64-mingw32/lib/libipsmsnap.a
index 7de4bb5..4f7ece8 100644
--- a/x86_64-w64-mingw32/lib/libipsmsnap.a
+++ b/x86_64-w64-mingw32/lib/libipsmsnap.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libipv6mon.a b/x86_64-w64-mingw32/lib/libipv6mon.a
index a06d64a..6618799 100644
--- a/x86_64-w64-mingw32/lib/libipv6mon.a
+++ b/x86_64-w64-mingw32/lib/libipv6mon.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libipxsap.a b/x86_64-w64-mingw32/lib/libipxsap.a
index e3b417a..1905e15 100644
--- a/x86_64-w64-mingw32/lib/libipxsap.a
+++ b/x86_64-w64-mingw32/lib/libipxsap.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libirclass.a b/x86_64-w64-mingw32/lib/libirclass.a
index 5b6da9f..2f71122 100644
--- a/x86_64-w64-mingw32/lib/libirclass.a
+++ b/x86_64-w64-mingw32/lib/libirclass.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libisapips.a b/x86_64-w64-mingw32/lib/libisapips.a
index 590752c..c511fbd 100644
--- a/x86_64-w64-mingw32/lib/libisapips.a
+++ b/x86_64-w64-mingw32/lib/libisapips.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libisatq.a b/x86_64-w64-mingw32/lib/libisatq.a
index aaba33a..3f23603 100644
--- a/x86_64-w64-mingw32/lib/libisatq.a
+++ b/x86_64-w64-mingw32/lib/libisatq.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiscomlog.a b/x86_64-w64-mingw32/lib/libiscomlog.a
index 69e46ad..402688f 100644
--- a/x86_64-w64-mingw32/lib/libiscomlog.a
+++ b/x86_64-w64-mingw32/lib/libiscomlog.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiscsidsc.a b/x86_64-w64-mingw32/lib/libiscsidsc.a
index ec34c5e..8b4b22b 100644
--- a/x86_64-w64-mingw32/lib/libiscsidsc.a
+++ b/x86_64-w64-mingw32/lib/libiscsidsc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libisign32.a b/x86_64-w64-mingw32/lib/libisign32.a
index 486fceb..bd8fe86 100644
--- a/x86_64-w64-mingw32/lib/libisign32.a
+++ b/x86_64-w64-mingw32/lib/libisign32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libitircl.a b/x86_64-w64-mingw32/lib/libitircl.a
index d0d55d8..03e5064 100644
--- a/x86_64-w64-mingw32/lib/libitircl.a
+++ b/x86_64-w64-mingw32/lib/libitircl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libitss.a b/x86_64-w64-mingw32/lib/libitss.a
index 319b9f4..f7c2ffc 100644
--- a/x86_64-w64-mingw32/lib/libitss.a
+++ b/x86_64-w64-mingw32/lib/libitss.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libixsso.a b/x86_64-w64-mingw32/lib/libixsso.a
index 435781e..cc963e4 100644
--- a/x86_64-w64-mingw32/lib/libixsso.a
+++ b/x86_64-w64-mingw32/lib/libixsso.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libiyuv_32.a b/x86_64-w64-mingw32/lib/libiyuv_32.a
index 07639f1..b3a48a8 100644
--- a/x86_64-w64-mingw32/lib/libiyuv_32.a
+++ b/x86_64-w64-mingw32/lib/libiyuv_32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libjet500.a b/x86_64-w64-mingw32/lib/libjet500.a
index 9a5affc..1ff1e51 100644
--- a/x86_64-w64-mingw32/lib/libjet500.a
+++ b/x86_64-w64-mingw32/lib/libjet500.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libjscript.a b/x86_64-w64-mingw32/lib/libjscript.a
index bbb4185..2848098 100644
--- a/x86_64-w64-mingw32/lib/libjscript.a
+++ b/x86_64-w64-mingw32/lib/libjscript.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libjsproxy.a b/x86_64-w64-mingw32/lib/libjsproxy.a
index 4578533..499e8fe 100644
--- a/x86_64-w64-mingw32/lib/libjsproxy.a
+++ b/x86_64-w64-mingw32/lib/libjsproxy.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbd101.a b/x86_64-w64-mingw32/lib/libkbd101.a
index 38d1ad5..a572e40 100644
--- a/x86_64-w64-mingw32/lib/libkbd101.a
+++ b/x86_64-w64-mingw32/lib/libkbd101.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbd101a.a b/x86_64-w64-mingw32/lib/libkbd101a.a
index 9c464fb..6cf6f78 100644
--- a/x86_64-w64-mingw32/lib/libkbd101a.a
+++ b/x86_64-w64-mingw32/lib/libkbd101a.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbd101b.a b/x86_64-w64-mingw32/lib/libkbd101b.a
index bf482a9..467875d 100644
--- a/x86_64-w64-mingw32/lib/libkbd101b.a
+++ b/x86_64-w64-mingw32/lib/libkbd101b.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbd101c.a b/x86_64-w64-mingw32/lib/libkbd101c.a
index a3c21a8..4254e41 100644
--- a/x86_64-w64-mingw32/lib/libkbd101c.a
+++ b/x86_64-w64-mingw32/lib/libkbd101c.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbd103.a b/x86_64-w64-mingw32/lib/libkbd103.a
index e658e6c..71f2d82 100644
--- a/x86_64-w64-mingw32/lib/libkbd103.a
+++ b/x86_64-w64-mingw32/lib/libkbd103.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbd106.a b/x86_64-w64-mingw32/lib/libkbd106.a
index 5da9aab..50decea 100644
--- a/x86_64-w64-mingw32/lib/libkbd106.a
+++ b/x86_64-w64-mingw32/lib/libkbd106.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbd106n.a b/x86_64-w64-mingw32/lib/libkbd106n.a
index ffc1db9..22e45a5 100644
--- a/x86_64-w64-mingw32/lib/libkbd106n.a
+++ b/x86_64-w64-mingw32/lib/libkbd106n.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbda1.a b/x86_64-w64-mingw32/lib/libkbda1.a
index b453f0f..411c9a1 100644
--- a/x86_64-w64-mingw32/lib/libkbda1.a
+++ b/x86_64-w64-mingw32/lib/libkbda1.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbda2.a b/x86_64-w64-mingw32/lib/libkbda2.a
index d9685ae..76317e9 100644
--- a/x86_64-w64-mingw32/lib/libkbda2.a
+++ b/x86_64-w64-mingw32/lib/libkbda2.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbda3.a b/x86_64-w64-mingw32/lib/libkbda3.a
index 7d53c92..cec3843 100644
--- a/x86_64-w64-mingw32/lib/libkbda3.a
+++ b/x86_64-w64-mingw32/lib/libkbda3.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdal.a b/x86_64-w64-mingw32/lib/libkbdal.a
index 60d4deb..351e369 100644
--- a/x86_64-w64-mingw32/lib/libkbdal.a
+++ b/x86_64-w64-mingw32/lib/libkbdal.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdarme.a b/x86_64-w64-mingw32/lib/libkbdarme.a
index e689142..b2d5dac 100644
--- a/x86_64-w64-mingw32/lib/libkbdarme.a
+++ b/x86_64-w64-mingw32/lib/libkbdarme.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdarmw.a b/x86_64-w64-mingw32/lib/libkbdarmw.a
index 6795562..a8b18a1 100644
--- a/x86_64-w64-mingw32/lib/libkbdarmw.a
+++ b/x86_64-w64-mingw32/lib/libkbdarmw.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdax2.a b/x86_64-w64-mingw32/lib/libkbdax2.a
index dcb907b..3379fbf 100644
--- a/x86_64-w64-mingw32/lib/libkbdax2.a
+++ b/x86_64-w64-mingw32/lib/libkbdax2.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdaze.a b/x86_64-w64-mingw32/lib/libkbdaze.a
index f09eb96..603df31 100644
--- a/x86_64-w64-mingw32/lib/libkbdaze.a
+++ b/x86_64-w64-mingw32/lib/libkbdaze.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdazel.a b/x86_64-w64-mingw32/lib/libkbdazel.a
index d783e92..65b78e5 100644
--- a/x86_64-w64-mingw32/lib/libkbdazel.a
+++ b/x86_64-w64-mingw32/lib/libkbdazel.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdbe.a b/x86_64-w64-mingw32/lib/libkbdbe.a
index ef2cde7..0464cad 100644
--- a/x86_64-w64-mingw32/lib/libkbdbe.a
+++ b/x86_64-w64-mingw32/lib/libkbdbe.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdbene.a b/x86_64-w64-mingw32/lib/libkbdbene.a
index 44b9d53..dea0604 100644
--- a/x86_64-w64-mingw32/lib/libkbdbene.a
+++ b/x86_64-w64-mingw32/lib/libkbdbene.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdblr.a b/x86_64-w64-mingw32/lib/libkbdblr.a
index d36dbe2..83e8966 100644
--- a/x86_64-w64-mingw32/lib/libkbdblr.a
+++ b/x86_64-w64-mingw32/lib/libkbdblr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdbr.a b/x86_64-w64-mingw32/lib/libkbdbr.a
index 4a033a9..c58dfe8 100644
--- a/x86_64-w64-mingw32/lib/libkbdbr.a
+++ b/x86_64-w64-mingw32/lib/libkbdbr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdbu.a b/x86_64-w64-mingw32/lib/libkbdbu.a
index 1a6ba41..502490b 100644
--- a/x86_64-w64-mingw32/lib/libkbdbu.a
+++ b/x86_64-w64-mingw32/lib/libkbdbu.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdca.a b/x86_64-w64-mingw32/lib/libkbdca.a
index 019e473..1333af5 100644
--- a/x86_64-w64-mingw32/lib/libkbdca.a
+++ b/x86_64-w64-mingw32/lib/libkbdca.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdcan.a b/x86_64-w64-mingw32/lib/libkbdcan.a
index 05b971c..fd4724c 100644
--- a/x86_64-w64-mingw32/lib/libkbdcan.a
+++ b/x86_64-w64-mingw32/lib/libkbdcan.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdcr.a b/x86_64-w64-mingw32/lib/libkbdcr.a
index 6ea4be5..cd1b471 100644
--- a/x86_64-w64-mingw32/lib/libkbdcr.a
+++ b/x86_64-w64-mingw32/lib/libkbdcr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdcz.a b/x86_64-w64-mingw32/lib/libkbdcz.a
index 16c531c..462147d 100644
--- a/x86_64-w64-mingw32/lib/libkbdcz.a
+++ b/x86_64-w64-mingw32/lib/libkbdcz.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdcz1.a b/x86_64-w64-mingw32/lib/libkbdcz1.a
index 34eb918..300cdc7 100644
--- a/x86_64-w64-mingw32/lib/libkbdcz1.a
+++ b/x86_64-w64-mingw32/lib/libkbdcz1.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdcz2.a b/x86_64-w64-mingw32/lib/libkbdcz2.a
index f3925d2..f2b61b0 100644
--- a/x86_64-w64-mingw32/lib/libkbdcz2.a
+++ b/x86_64-w64-mingw32/lib/libkbdcz2.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdda.a b/x86_64-w64-mingw32/lib/libkbdda.a
index 1f95b48..8b53846 100644
--- a/x86_64-w64-mingw32/lib/libkbdda.a
+++ b/x86_64-w64-mingw32/lib/libkbdda.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbddiv1.a b/x86_64-w64-mingw32/lib/libkbddiv1.a
index aacfa75..1902dcc 100644
--- a/x86_64-w64-mingw32/lib/libkbddiv1.a
+++ b/x86_64-w64-mingw32/lib/libkbddiv1.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbddiv2.a b/x86_64-w64-mingw32/lib/libkbddiv2.a
index 563a6d8..7612058 100644
--- a/x86_64-w64-mingw32/lib/libkbddiv2.a
+++ b/x86_64-w64-mingw32/lib/libkbddiv2.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbddv.a b/x86_64-w64-mingw32/lib/libkbddv.a
index f2e1728..49b716f 100644
--- a/x86_64-w64-mingw32/lib/libkbddv.a
+++ b/x86_64-w64-mingw32/lib/libkbddv.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdes.a b/x86_64-w64-mingw32/lib/libkbdes.a
index 0238d7b..167bf1f 100644
--- a/x86_64-w64-mingw32/lib/libkbdes.a
+++ b/x86_64-w64-mingw32/lib/libkbdes.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdest.a b/x86_64-w64-mingw32/lib/libkbdest.a
index 8c41fc5..78a471c 100644
--- a/x86_64-w64-mingw32/lib/libkbdest.a
+++ b/x86_64-w64-mingw32/lib/libkbdest.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdfa.a b/x86_64-w64-mingw32/lib/libkbdfa.a
index 756020e..2354038 100644
--- a/x86_64-w64-mingw32/lib/libkbdfa.a
+++ b/x86_64-w64-mingw32/lib/libkbdfa.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdfc.a b/x86_64-w64-mingw32/lib/libkbdfc.a
index 91aefa3..a4e208a 100644
--- a/x86_64-w64-mingw32/lib/libkbdfc.a
+++ b/x86_64-w64-mingw32/lib/libkbdfc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdfi.a b/x86_64-w64-mingw32/lib/libkbdfi.a
index 1befe9a..8f3617e 100644
--- a/x86_64-w64-mingw32/lib/libkbdfi.a
+++ b/x86_64-w64-mingw32/lib/libkbdfi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdfo.a b/x86_64-w64-mingw32/lib/libkbdfo.a
index 3c9a06d..38d8fa1 100644
--- a/x86_64-w64-mingw32/lib/libkbdfo.a
+++ b/x86_64-w64-mingw32/lib/libkbdfo.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdfr.a b/x86_64-w64-mingw32/lib/libkbdfr.a
index 017fde3..5606718 100644
--- a/x86_64-w64-mingw32/lib/libkbdfr.a
+++ b/x86_64-w64-mingw32/lib/libkbdfr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdgae.a b/x86_64-w64-mingw32/lib/libkbdgae.a
index e3e6065..a5d526f 100644
--- a/x86_64-w64-mingw32/lib/libkbdgae.a
+++ b/x86_64-w64-mingw32/lib/libkbdgae.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdgeo.a b/x86_64-w64-mingw32/lib/libkbdgeo.a
index 88864a1..80ee23f 100644
--- a/x86_64-w64-mingw32/lib/libkbdgeo.a
+++ b/x86_64-w64-mingw32/lib/libkbdgeo.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdgkl.a b/x86_64-w64-mingw32/lib/libkbdgkl.a
index 77ab82d..62700e1 100644
--- a/x86_64-w64-mingw32/lib/libkbdgkl.a
+++ b/x86_64-w64-mingw32/lib/libkbdgkl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdgr.a b/x86_64-w64-mingw32/lib/libkbdgr.a
index 417f674..2f7187d 100644
--- a/x86_64-w64-mingw32/lib/libkbdgr.a
+++ b/x86_64-w64-mingw32/lib/libkbdgr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdgr1.a b/x86_64-w64-mingw32/lib/libkbdgr1.a
index c795752..64ac571 100644
--- a/x86_64-w64-mingw32/lib/libkbdgr1.a
+++ b/x86_64-w64-mingw32/lib/libkbdgr1.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdhe.a b/x86_64-w64-mingw32/lib/libkbdhe.a
index 39e40f4..812dd3a 100644
--- a/x86_64-w64-mingw32/lib/libkbdhe.a
+++ b/x86_64-w64-mingw32/lib/libkbdhe.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdhe220.a b/x86_64-w64-mingw32/lib/libkbdhe220.a
index 82d1381..5c6b5fb 100644
--- a/x86_64-w64-mingw32/lib/libkbdhe220.a
+++ b/x86_64-w64-mingw32/lib/libkbdhe220.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdhe319.a b/x86_64-w64-mingw32/lib/libkbdhe319.a
index dc9ee84..01d8496 100644
--- a/x86_64-w64-mingw32/lib/libkbdhe319.a
+++ b/x86_64-w64-mingw32/lib/libkbdhe319.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdheb.a b/x86_64-w64-mingw32/lib/libkbdheb.a
index 6b07970..89dbb9c 100644
--- a/x86_64-w64-mingw32/lib/libkbdheb.a
+++ b/x86_64-w64-mingw32/lib/libkbdheb.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdhela2.a b/x86_64-w64-mingw32/lib/libkbdhela2.a
index e1f0303..d006f93 100644
--- a/x86_64-w64-mingw32/lib/libkbdhela2.a
+++ b/x86_64-w64-mingw32/lib/libkbdhela2.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdhela3.a b/x86_64-w64-mingw32/lib/libkbdhela3.a
index 3e158ac..338aa6e 100644
--- a/x86_64-w64-mingw32/lib/libkbdhela3.a
+++ b/x86_64-w64-mingw32/lib/libkbdhela3.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdhept.a b/x86_64-w64-mingw32/lib/libkbdhept.a
index 3cf7452..f781185 100644
--- a/x86_64-w64-mingw32/lib/libkbdhept.a
+++ b/x86_64-w64-mingw32/lib/libkbdhept.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdhu.a b/x86_64-w64-mingw32/lib/libkbdhu.a
index ea2dab2..45c1c1e 100644
--- a/x86_64-w64-mingw32/lib/libkbdhu.a
+++ b/x86_64-w64-mingw32/lib/libkbdhu.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdhu1.a b/x86_64-w64-mingw32/lib/libkbdhu1.a
index 232d38c..5da719e 100644
--- a/x86_64-w64-mingw32/lib/libkbdhu1.a
+++ b/x86_64-w64-mingw32/lib/libkbdhu1.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdibm02.a b/x86_64-w64-mingw32/lib/libkbdibm02.a
index 2250d6e..7857c9f 100644
--- a/x86_64-w64-mingw32/lib/libkbdibm02.a
+++ b/x86_64-w64-mingw32/lib/libkbdibm02.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdic.a b/x86_64-w64-mingw32/lib/libkbdic.a
index 1771dc1..cea28ba 100644
--- a/x86_64-w64-mingw32/lib/libkbdic.a
+++ b/x86_64-w64-mingw32/lib/libkbdic.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdindev.a b/x86_64-w64-mingw32/lib/libkbdindev.a
index 81a6b9b..a780456 100644
--- a/x86_64-w64-mingw32/lib/libkbdindev.a
+++ b/x86_64-w64-mingw32/lib/libkbdindev.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdinguj.a b/x86_64-w64-mingw32/lib/libkbdinguj.a
index 2d35e20..ad4694f 100644
--- a/x86_64-w64-mingw32/lib/libkbdinguj.a
+++ b/x86_64-w64-mingw32/lib/libkbdinguj.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdinhin.a b/x86_64-w64-mingw32/lib/libkbdinhin.a
index 03fafd2..2f6ea41 100644
--- a/x86_64-w64-mingw32/lib/libkbdinhin.a
+++ b/x86_64-w64-mingw32/lib/libkbdinhin.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdinkan.a b/x86_64-w64-mingw32/lib/libkbdinkan.a
index 4101c3c..646da0a 100644
--- a/x86_64-w64-mingw32/lib/libkbdinkan.a
+++ b/x86_64-w64-mingw32/lib/libkbdinkan.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdinmar.a b/x86_64-w64-mingw32/lib/libkbdinmar.a
index 530da3c..340004e 100644
--- a/x86_64-w64-mingw32/lib/libkbdinmar.a
+++ b/x86_64-w64-mingw32/lib/libkbdinmar.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdinpun.a b/x86_64-w64-mingw32/lib/libkbdinpun.a
index 31e51f6..6b3ea79 100644
--- a/x86_64-w64-mingw32/lib/libkbdinpun.a
+++ b/x86_64-w64-mingw32/lib/libkbdinpun.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdintam.a b/x86_64-w64-mingw32/lib/libkbdintam.a
index 9fddc25..a64c649 100644
--- a/x86_64-w64-mingw32/lib/libkbdintam.a
+++ b/x86_64-w64-mingw32/lib/libkbdintam.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdintel.a b/x86_64-w64-mingw32/lib/libkbdintel.a
index 81b6f93..66361ed 100644
--- a/x86_64-w64-mingw32/lib/libkbdintel.a
+++ b/x86_64-w64-mingw32/lib/libkbdintel.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdir.a b/x86_64-w64-mingw32/lib/libkbdir.a
index 9d7a302..dc76ace 100644
--- a/x86_64-w64-mingw32/lib/libkbdir.a
+++ b/x86_64-w64-mingw32/lib/libkbdir.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdit.a b/x86_64-w64-mingw32/lib/libkbdit.a
index 894cc19..2a225ed 100644
--- a/x86_64-w64-mingw32/lib/libkbdit.a
+++ b/x86_64-w64-mingw32/lib/libkbdit.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdit142.a b/x86_64-w64-mingw32/lib/libkbdit142.a
index f87cb05..700a0da 100644
--- a/x86_64-w64-mingw32/lib/libkbdit142.a
+++ b/x86_64-w64-mingw32/lib/libkbdit142.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdjpn.a b/x86_64-w64-mingw32/lib/libkbdjpn.a
index b475a00..6f6d5e1 100644
--- a/x86_64-w64-mingw32/lib/libkbdjpn.a
+++ b/x86_64-w64-mingw32/lib/libkbdjpn.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdkaz.a b/x86_64-w64-mingw32/lib/libkbdkaz.a
index 1dc0d9a..c317adb 100644
--- a/x86_64-w64-mingw32/lib/libkbdkaz.a
+++ b/x86_64-w64-mingw32/lib/libkbdkaz.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdkor.a b/x86_64-w64-mingw32/lib/libkbdkor.a
index dc9d987..4c4ee3d 100644
--- a/x86_64-w64-mingw32/lib/libkbdkor.a
+++ b/x86_64-w64-mingw32/lib/libkbdkor.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdkyr.a b/x86_64-w64-mingw32/lib/libkbdkyr.a
index b86d56b..2149fae 100644
--- a/x86_64-w64-mingw32/lib/libkbdkyr.a
+++ b/x86_64-w64-mingw32/lib/libkbdkyr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdla.a b/x86_64-w64-mingw32/lib/libkbdla.a
index c2d2a44..84a3465 100644
--- a/x86_64-w64-mingw32/lib/libkbdla.a
+++ b/x86_64-w64-mingw32/lib/libkbdla.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdlk41a.a b/x86_64-w64-mingw32/lib/libkbdlk41a.a
index af59b14..3edebdb 100644
--- a/x86_64-w64-mingw32/lib/libkbdlk41a.a
+++ b/x86_64-w64-mingw32/lib/libkbdlk41a.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdlk41j.a b/x86_64-w64-mingw32/lib/libkbdlk41j.a
index 74d4cb7..1605d35 100644
--- a/x86_64-w64-mingw32/lib/libkbdlk41j.a
+++ b/x86_64-w64-mingw32/lib/libkbdlk41j.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdlt.a b/x86_64-w64-mingw32/lib/libkbdlt.a
index a548fbb..9546aa6 100644
--- a/x86_64-w64-mingw32/lib/libkbdlt.a
+++ b/x86_64-w64-mingw32/lib/libkbdlt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdlt1.a b/x86_64-w64-mingw32/lib/libkbdlt1.a
index 4d7a248..cf7ce6a 100644
--- a/x86_64-w64-mingw32/lib/libkbdlt1.a
+++ b/x86_64-w64-mingw32/lib/libkbdlt1.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdlv.a b/x86_64-w64-mingw32/lib/libkbdlv.a
index 4ce855d..e6a8312 100644
--- a/x86_64-w64-mingw32/lib/libkbdlv.a
+++ b/x86_64-w64-mingw32/lib/libkbdlv.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdlv1.a b/x86_64-w64-mingw32/lib/libkbdlv1.a
index 31132de..fd660c2 100644
--- a/x86_64-w64-mingw32/lib/libkbdlv1.a
+++ b/x86_64-w64-mingw32/lib/libkbdlv1.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdmac.a b/x86_64-w64-mingw32/lib/libkbdmac.a
index 2e1c918..6b4d66e 100644
--- a/x86_64-w64-mingw32/lib/libkbdmac.a
+++ b/x86_64-w64-mingw32/lib/libkbdmac.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdmon.a b/x86_64-w64-mingw32/lib/libkbdmon.a
index 665f886..75627ca 100644
--- a/x86_64-w64-mingw32/lib/libkbdmon.a
+++ b/x86_64-w64-mingw32/lib/libkbdmon.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdne.a b/x86_64-w64-mingw32/lib/libkbdne.a
index fabebfd..52cedce 100644
--- a/x86_64-w64-mingw32/lib/libkbdne.a
+++ b/x86_64-w64-mingw32/lib/libkbdne.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdnec.a b/x86_64-w64-mingw32/lib/libkbdnec.a
index 89c9f9c..551fdbc 100644
--- a/x86_64-w64-mingw32/lib/libkbdnec.a
+++ b/x86_64-w64-mingw32/lib/libkbdnec.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdnec95.a b/x86_64-w64-mingw32/lib/libkbdnec95.a
index ffbbb14..1bcf9f5 100644
--- a/x86_64-w64-mingw32/lib/libkbdnec95.a
+++ b/x86_64-w64-mingw32/lib/libkbdnec95.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdnecat.a b/x86_64-w64-mingw32/lib/libkbdnecat.a
index 21cf133..7806433 100644
--- a/x86_64-w64-mingw32/lib/libkbdnecat.a
+++ b/x86_64-w64-mingw32/lib/libkbdnecat.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdnecnt.a b/x86_64-w64-mingw32/lib/libkbdnecnt.a
index 51d3478..33d6cd0 100644
--- a/x86_64-w64-mingw32/lib/libkbdnecnt.a
+++ b/x86_64-w64-mingw32/lib/libkbdnecnt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdno.a b/x86_64-w64-mingw32/lib/libkbdno.a
index 749279c..9519faa 100644
--- a/x86_64-w64-mingw32/lib/libkbdno.a
+++ b/x86_64-w64-mingw32/lib/libkbdno.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdpl.a b/x86_64-w64-mingw32/lib/libkbdpl.a
index 6431f9e..660d2b6 100644
--- a/x86_64-w64-mingw32/lib/libkbdpl.a
+++ b/x86_64-w64-mingw32/lib/libkbdpl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdpl1.a b/x86_64-w64-mingw32/lib/libkbdpl1.a
index 6a45c20..fc9d8f9 100644
--- a/x86_64-w64-mingw32/lib/libkbdpl1.a
+++ b/x86_64-w64-mingw32/lib/libkbdpl1.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdpo.a b/x86_64-w64-mingw32/lib/libkbdpo.a
index 26e3183..e3e4e63 100644
--- a/x86_64-w64-mingw32/lib/libkbdpo.a
+++ b/x86_64-w64-mingw32/lib/libkbdpo.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdro.a b/x86_64-w64-mingw32/lib/libkbdro.a
index 8100bba..92d141e 100644
--- a/x86_64-w64-mingw32/lib/libkbdro.a
+++ b/x86_64-w64-mingw32/lib/libkbdro.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdru.a b/x86_64-w64-mingw32/lib/libkbdru.a
index 9060716..566a982 100644
--- a/x86_64-w64-mingw32/lib/libkbdru.a
+++ b/x86_64-w64-mingw32/lib/libkbdru.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdru1.a b/x86_64-w64-mingw32/lib/libkbdru1.a
index dead597..8aa2a0b 100644
--- a/x86_64-w64-mingw32/lib/libkbdru1.a
+++ b/x86_64-w64-mingw32/lib/libkbdru1.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdsf.a b/x86_64-w64-mingw32/lib/libkbdsf.a
index 87a221f..d5ef3b8 100644
--- a/x86_64-w64-mingw32/lib/libkbdsf.a
+++ b/x86_64-w64-mingw32/lib/libkbdsf.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdsg.a b/x86_64-w64-mingw32/lib/libkbdsg.a
index a5d703b..a7ecd80 100644
--- a/x86_64-w64-mingw32/lib/libkbdsg.a
+++ b/x86_64-w64-mingw32/lib/libkbdsg.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdsl.a b/x86_64-w64-mingw32/lib/libkbdsl.a
index c2006f3..a1c22bd 100644
--- a/x86_64-w64-mingw32/lib/libkbdsl.a
+++ b/x86_64-w64-mingw32/lib/libkbdsl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdsl1.a b/x86_64-w64-mingw32/lib/libkbdsl1.a
index 4f6c757..d4a4e45 100644
--- a/x86_64-w64-mingw32/lib/libkbdsl1.a
+++ b/x86_64-w64-mingw32/lib/libkbdsl1.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdsp.a b/x86_64-w64-mingw32/lib/libkbdsp.a
index 3cf0a6d..a606317 100644
--- a/x86_64-w64-mingw32/lib/libkbdsp.a
+++ b/x86_64-w64-mingw32/lib/libkbdsp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdsw.a b/x86_64-w64-mingw32/lib/libkbdsw.a
index e93544e..31481ec 100644
--- a/x86_64-w64-mingw32/lib/libkbdsw.a
+++ b/x86_64-w64-mingw32/lib/libkbdsw.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdsyr1.a b/x86_64-w64-mingw32/lib/libkbdsyr1.a
index 6e60ad0..495bbb5 100644
--- a/x86_64-w64-mingw32/lib/libkbdsyr1.a
+++ b/x86_64-w64-mingw32/lib/libkbdsyr1.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdsyr2.a b/x86_64-w64-mingw32/lib/libkbdsyr2.a
index bd18f88..2411a32 100644
--- a/x86_64-w64-mingw32/lib/libkbdsyr2.a
+++ b/x86_64-w64-mingw32/lib/libkbdsyr2.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdtat.a b/x86_64-w64-mingw32/lib/libkbdtat.a
index 70853f3..32c5099 100644
--- a/x86_64-w64-mingw32/lib/libkbdtat.a
+++ b/x86_64-w64-mingw32/lib/libkbdtat.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdth0.a b/x86_64-w64-mingw32/lib/libkbdth0.a
index 5f1f939..80d10bf 100644
--- a/x86_64-w64-mingw32/lib/libkbdth0.a
+++ b/x86_64-w64-mingw32/lib/libkbdth0.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdth1.a b/x86_64-w64-mingw32/lib/libkbdth1.a
index 7c173fc..a102079 100644
--- a/x86_64-w64-mingw32/lib/libkbdth1.a
+++ b/x86_64-w64-mingw32/lib/libkbdth1.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdth2.a b/x86_64-w64-mingw32/lib/libkbdth2.a
index 5fa0988..385ae32 100644
--- a/x86_64-w64-mingw32/lib/libkbdth2.a
+++ b/x86_64-w64-mingw32/lib/libkbdth2.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdth3.a b/x86_64-w64-mingw32/lib/libkbdth3.a
index c3ae76e..aed5fc8 100644
--- a/x86_64-w64-mingw32/lib/libkbdth3.a
+++ b/x86_64-w64-mingw32/lib/libkbdth3.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdtuf.a b/x86_64-w64-mingw32/lib/libkbdtuf.a
index eed6be6..ff3a33c 100644
--- a/x86_64-w64-mingw32/lib/libkbdtuf.a
+++ b/x86_64-w64-mingw32/lib/libkbdtuf.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdtuq.a b/x86_64-w64-mingw32/lib/libkbdtuq.a
index 956b11f..8851508 100644
--- a/x86_64-w64-mingw32/lib/libkbdtuq.a
+++ b/x86_64-w64-mingw32/lib/libkbdtuq.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbduk.a b/x86_64-w64-mingw32/lib/libkbduk.a
index b001b9b..e963b2c 100644
--- a/x86_64-w64-mingw32/lib/libkbduk.a
+++ b/x86_64-w64-mingw32/lib/libkbduk.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdur.a b/x86_64-w64-mingw32/lib/libkbdur.a
index 849a4e5..02afebf 100644
--- a/x86_64-w64-mingw32/lib/libkbdur.a
+++ b/x86_64-w64-mingw32/lib/libkbdur.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdurdu.a b/x86_64-w64-mingw32/lib/libkbdurdu.a
index 8f7222e..3b8ce74 100644
--- a/x86_64-w64-mingw32/lib/libkbdurdu.a
+++ b/x86_64-w64-mingw32/lib/libkbdurdu.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdus.a b/x86_64-w64-mingw32/lib/libkbdus.a
index 847d727..5670075 100644
--- a/x86_64-w64-mingw32/lib/libkbdus.a
+++ b/x86_64-w64-mingw32/lib/libkbdus.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdusa.a b/x86_64-w64-mingw32/lib/libkbdusa.a
index 33ae8e5..577a481 100644
--- a/x86_64-w64-mingw32/lib/libkbdusa.a
+++ b/x86_64-w64-mingw32/lib/libkbdusa.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdusl.a b/x86_64-w64-mingw32/lib/libkbdusl.a
index 5d21f47..9234a9c 100644
--- a/x86_64-w64-mingw32/lib/libkbdusl.a
+++ b/x86_64-w64-mingw32/lib/libkbdusl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdusr.a b/x86_64-w64-mingw32/lib/libkbdusr.a
index f53d7fc..031b9f8 100644
--- a/x86_64-w64-mingw32/lib/libkbdusr.a
+++ b/x86_64-w64-mingw32/lib/libkbdusr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdusx.a b/x86_64-w64-mingw32/lib/libkbdusx.a
index aa770ef..5e87e1f 100644
--- a/x86_64-w64-mingw32/lib/libkbdusx.a
+++ b/x86_64-w64-mingw32/lib/libkbdusx.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbduzb.a b/x86_64-w64-mingw32/lib/libkbduzb.a
index 9d2ca60..5c69446 100644
--- a/x86_64-w64-mingw32/lib/libkbduzb.a
+++ b/x86_64-w64-mingw32/lib/libkbduzb.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdvntc.a b/x86_64-w64-mingw32/lib/libkbdvntc.a
index ce985a8..ae82ce4 100644
--- a/x86_64-w64-mingw32/lib/libkbdvntc.a
+++ b/x86_64-w64-mingw32/lib/libkbdvntc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdycc.a b/x86_64-w64-mingw32/lib/libkbdycc.a
index 83462c4..8d1998e 100644
--- a/x86_64-w64-mingw32/lib/libkbdycc.a
+++ b/x86_64-w64-mingw32/lib/libkbdycc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkbdycl.a b/x86_64-w64-mingw32/lib/libkbdycl.a
index 3f1b337..623fe5e 100644
--- a/x86_64-w64-mingw32/lib/libkbdycl.a
+++ b/x86_64-w64-mingw32/lib/libkbdycl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkd1394.a b/x86_64-w64-mingw32/lib/libkd1394.a
index ea962e5..134d4d9 100644
--- a/x86_64-w64-mingw32/lib/libkd1394.a
+++ b/x86_64-w64-mingw32/lib/libkd1394.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkdcom.a b/x86_64-w64-mingw32/lib/libkdcom.a
index 53c3267..7caed0c 100644
--- a/x86_64-w64-mingw32/lib/libkdcom.a
+++ b/x86_64-w64-mingw32/lib/libkdcom.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkerberos.a b/x86_64-w64-mingw32/lib/libkerberos.a
index 15b23ec..5ac09ab 100644
--- a/x86_64-w64-mingw32/lib/libkerberos.a
+++ b/x86_64-w64-mingw32/lib/libkerberos.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkernel32.a b/x86_64-w64-mingw32/lib/libkernel32.a
index d680a8a..0ee6180 100644
--- a/x86_64-w64-mingw32/lib/libkernel32.a
+++ b/x86_64-w64-mingw32/lib/libkernel32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkeymgr.a b/x86_64-w64-mingw32/lib/libkeymgr.a
index 0804c0b..b9a5292 100644
--- a/x86_64-w64-mingw32/lib/libkeymgr.a
+++ b/x86_64-w64-mingw32/lib/libkeymgr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkorwbrkr.a b/x86_64-w64-mingw32/lib/libkorwbrkr.a
index 112981c..5d8defc 100644
--- a/x86_64-w64-mingw32/lib/libkorwbrkr.a
+++ b/x86_64-w64-mingw32/lib/libkorwbrkr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libkrnlprov.a b/x86_64-w64-mingw32/lib/libkrnlprov.a
index de22809..74dc4c5 100644
--- a/x86_64-w64-mingw32/lib/libkrnlprov.a
+++ b/x86_64-w64-mingw32/lib/libkrnlprov.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libks.a b/x86_64-w64-mingw32/lib/libks.a
index 8aa9ac0..6b98d3a 100644
--- a/x86_64-w64-mingw32/lib/libks.a
+++ b/x86_64-w64-mingw32/lib/libks.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libksguid.a b/x86_64-w64-mingw32/lib/libksguid.a
index c907794..8fb144d 100644
--- a/x86_64-w64-mingw32/lib/libksguid.a
+++ b/x86_64-w64-mingw32/lib/libksguid.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libksuser.a b/x86_64-w64-mingw32/lib/libksuser.a
index 20d7de3..a9c3416 100644
--- a/x86_64-w64-mingw32/lib/libksuser.a
+++ b/x86_64-w64-mingw32/lib/libksuser.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libktmw32.a b/x86_64-w64-mingw32/lib/libktmw32.a
index 61185d5..20850a4 100644
--- a/x86_64-w64-mingw32/lib/libktmw32.a
+++ b/x86_64-w64-mingw32/lib/libktmw32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liblangwrbk.a b/x86_64-w64-mingw32/lib/liblangwrbk.a
index bdd0973..7883f82 100644
--- a/x86_64-w64-mingw32/lib/liblangwrbk.a
+++ b/x86_64-w64-mingw32/lib/liblangwrbk.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liblargeint.a b/x86_64-w64-mingw32/lib/liblargeint.a
index 09fe5e8..ff97b80 100644
--- a/x86_64-w64-mingw32/lib/liblargeint.a
+++ b/x86_64-w64-mingw32/lib/liblargeint.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liblicdll.a b/x86_64-w64-mingw32/lib/liblicdll.a
index df500a6..c6f6338 100644
--- a/x86_64-w64-mingw32/lib/liblicdll.a
+++ b/x86_64-w64-mingw32/lib/liblicdll.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liblicmgr10.a b/x86_64-w64-mingw32/lib/liblicmgr10.a
index 9c6d094..73e84b7 100644
--- a/x86_64-w64-mingw32/lib/liblicmgr10.a
+++ b/x86_64-w64-mingw32/lib/liblicmgr10.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liblicwmi.a b/x86_64-w64-mingw32/lib/liblicwmi.a
index e122c30..749c78e 100644
--- a/x86_64-w64-mingw32/lib/liblicwmi.a
+++ b/x86_64-w64-mingw32/lib/liblicwmi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liblinkinfo.a b/x86_64-w64-mingw32/lib/liblinkinfo.a
index a4c6812..affadf0 100644
--- a/x86_64-w64-mingw32/lib/liblinkinfo.a
+++ b/x86_64-w64-mingw32/lib/liblinkinfo.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liblmhsvc.a b/x86_64-w64-mingw32/lib/liblmhsvc.a
index 895f9b4..1209560 100644
--- a/x86_64-w64-mingw32/lib/liblmhsvc.a
+++ b/x86_64-w64-mingw32/lib/liblmhsvc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liblmmib2.a b/x86_64-w64-mingw32/lib/liblmmib2.a
index b16336e..dc6d444 100644
--- a/x86_64-w64-mingw32/lib/liblmmib2.a
+++ b/x86_64-w64-mingw32/lib/liblmmib2.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liblmrt.a b/x86_64-w64-mingw32/lib/liblmrt.a
index a6b2735..ccc611c 100644
--- a/x86_64-w64-mingw32/lib/liblmrt.a
+++ b/x86_64-w64-mingw32/lib/liblmrt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libloadperf.a b/x86_64-w64-mingw32/lib/libloadperf.a
index 0945c4e..33ec544 100644
--- a/x86_64-w64-mingw32/lib/libloadperf.a
+++ b/x86_64-w64-mingw32/lib/libloadperf.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liblocalsec.a b/x86_64-w64-mingw32/lib/liblocalsec.a
index 21dc610..00ce195 100644
--- a/x86_64-w64-mingw32/lib/liblocalsec.a
+++ b/x86_64-w64-mingw32/lib/liblocalsec.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liblocalspl.a b/x86_64-w64-mingw32/lib/liblocalspl.a
index 34dc24e..c1a97a1 100644
--- a/x86_64-w64-mingw32/lib/liblocalspl.a
+++ b/x86_64-w64-mingw32/lib/liblocalspl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liblocalui.a b/x86_64-w64-mingw32/lib/liblocalui.a
index 8b9821a..3201af6 100644
--- a/x86_64-w64-mingw32/lib/liblocalui.a
+++ b/x86_64-w64-mingw32/lib/liblocalui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liblocationapi.a b/x86_64-w64-mingw32/lib/liblocationapi.a
new file mode 100644
index 0000000..1914364
--- /dev/null
+++ b/x86_64-w64-mingw32/lib/liblocationapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liblog.a b/x86_64-w64-mingw32/lib/liblog.a
index 163299e..2c34858 100644
--- a/x86_64-w64-mingw32/lib/liblog.a
+++ b/x86_64-w64-mingw32/lib/liblog.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libloghours.a b/x86_64-w64-mingw32/lib/libloghours.a
index f81bdc4..de2014f 100644
--- a/x86_64-w64-mingw32/lib/libloghours.a
+++ b/x86_64-w64-mingw32/lib/libloghours.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liblogscrpt.a b/x86_64-w64-mingw32/lib/liblogscrpt.a
index 6d86a79..3cf32f2 100644
--- a/x86_64-w64-mingw32/lib/liblogscrpt.a
+++ b/x86_64-w64-mingw32/lib/liblogscrpt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liblonsint.a b/x86_64-w64-mingw32/lib/liblonsint.a
index 2ce8825..b74b410 100644
--- a/x86_64-w64-mingw32/lib/liblonsint.a
+++ b/x86_64-w64-mingw32/lib/liblonsint.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liblpdsvc.a b/x86_64-w64-mingw32/lib/liblpdsvc.a
index d63400e..bb85266 100644
--- a/x86_64-w64-mingw32/lib/liblpdsvc.a
+++ b/x86_64-w64-mingw32/lib/liblpdsvc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liblpk.a b/x86_64-w64-mingw32/lib/liblpk.a
index 06f806f..3130729 100644
--- a/x86_64-w64-mingw32/lib/liblpk.a
+++ b/x86_64-w64-mingw32/lib/liblpk.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liblprhelp.a b/x86_64-w64-mingw32/lib/liblprhelp.a
index 0a6bcee..78653d0 100644
--- a/x86_64-w64-mingw32/lib/liblprhelp.a
+++ b/x86_64-w64-mingw32/lib/liblprhelp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liblprmon.a b/x86_64-w64-mingw32/lib/liblprmon.a
index e4556ef..6cee67b 100644
--- a/x86_64-w64-mingw32/lib/liblprmon.a
+++ b/x86_64-w64-mingw32/lib/liblprmon.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liblprmonui.a b/x86_64-w64-mingw32/lib/liblprmonui.a
index 254108c..8f8d051 100644
--- a/x86_64-w64-mingw32/lib/liblprmonui.a
+++ b/x86_64-w64-mingw32/lib/liblprmonui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liblsasrv.a b/x86_64-w64-mingw32/lib/liblsasrv.a
index 79abcb1..5bcc4c5 100644
--- a/x86_64-w64-mingw32/lib/liblsasrv.a
+++ b/x86_64-w64-mingw32/lib/liblsasrv.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liblz32.a b/x86_64-w64-mingw32/lib/liblz32.a
index df4a388..69997ee 100644
--- a/x86_64-w64-mingw32/lib/liblz32.a
+++ b/x86_64-w64-mingw32/lib/liblz32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libm.a b/x86_64-w64-mingw32/lib/libm.a
index 2201a10..c843427 100644
--- a/x86_64-w64-mingw32/lib/libm.a
+++ b/x86_64-w64-mingw32/lib/libm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmag_hook.a b/x86_64-w64-mingw32/lib/libmag_hook.a
index c905f75..3807eb2 100644
--- a/x86_64-w64-mingw32/lib/libmag_hook.a
+++ b/x86_64-w64-mingw32/lib/libmag_hook.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmailmsg.a b/x86_64-w64-mingw32/lib/libmailmsg.a
index 0ef05cb..30cd8ec 100644
--- a/x86_64-w64-mingw32/lib/libmailmsg.a
+++ b/x86_64-w64-mingw32/lib/libmailmsg.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmapi32.a b/x86_64-w64-mingw32/lib/libmapi32.a
index 284b539..e8abe51 100644
--- a/x86_64-w64-mingw32/lib/libmapi32.a
+++ b/x86_64-w64-mingw32/lib/libmapi32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmapistub.a b/x86_64-w64-mingw32/lib/libmapistub.a
index 2483118..a0a3a30 100644
--- a/x86_64-w64-mingw32/lib/libmapistub.a
+++ b/x86_64-w64-mingw32/lib/libmapistub.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmcastmib.a b/x86_64-w64-mingw32/lib/libmcastmib.a
index 13c9ec0..79792ed 100644
--- a/x86_64-w64-mingw32/lib/libmcastmib.a
+++ b/x86_64-w64-mingw32/lib/libmcastmib.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmcd32.a b/x86_64-w64-mingw32/lib/libmcd32.a
index d25bf6d..3f3b9be 100644
--- a/x86_64-w64-mingw32/lib/libmcd32.a
+++ b/x86_64-w64-mingw32/lib/libmcd32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmcdsrv32.a b/x86_64-w64-mingw32/lib/libmcdsrv32.a
index 5af16c3..700c915 100644
--- a/x86_64-w64-mingw32/lib/libmcdsrv32.a
+++ b/x86_64-w64-mingw32/lib/libmcdsrv32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmchgrcoi.a b/x86_64-w64-mingw32/lib/libmchgrcoi.a
index 5c4e5e8..91aaca0 100644
--- a/x86_64-w64-mingw32/lib/libmchgrcoi.a
+++ b/x86_64-w64-mingw32/lib/libmchgrcoi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmciavi32.a b/x86_64-w64-mingw32/lib/libmciavi32.a
index 782c845..4e83789 100644
--- a/x86_64-w64-mingw32/lib/libmciavi32.a
+++ b/x86_64-w64-mingw32/lib/libmciavi32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmcicda.a b/x86_64-w64-mingw32/lib/libmcicda.a
index fdc915f..cec09b2 100644
--- a/x86_64-w64-mingw32/lib/libmcicda.a
+++ b/x86_64-w64-mingw32/lib/libmcicda.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmciole32.a b/x86_64-w64-mingw32/lib/libmciole32.a
index 8bb1bb4..ba4e1c0 100644
--- a/x86_64-w64-mingw32/lib/libmciole32.a
+++ b/x86_64-w64-mingw32/lib/libmciole32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmciqtz32.a b/x86_64-w64-mingw32/lib/libmciqtz32.a
index 7eb99de..b6b3be1 100644
--- a/x86_64-w64-mingw32/lib/libmciqtz32.a
+++ b/x86_64-w64-mingw32/lib/libmciqtz32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmciseq.a b/x86_64-w64-mingw32/lib/libmciseq.a
index c58e22b..e6f374d 100644
--- a/x86_64-w64-mingw32/lib/libmciseq.a
+++ b/x86_64-w64-mingw32/lib/libmciseq.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmciwave.a b/x86_64-w64-mingw32/lib/libmciwave.a
index b015fbc..d1c8a2d 100644
--- a/x86_64-w64-mingw32/lib/libmciwave.a
+++ b/x86_64-w64-mingw32/lib/libmciwave.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmdhcp.a b/x86_64-w64-mingw32/lib/libmdhcp.a
index 3057f5b..b455116 100644
--- a/x86_64-w64-mingw32/lib/libmdhcp.a
+++ b/x86_64-w64-mingw32/lib/libmdhcp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmdminst.a b/x86_64-w64-mingw32/lib/libmdminst.a
index 1893189..8dd7fd3 100644
--- a/x86_64-w64-mingw32/lib/libmdminst.a
+++ b/x86_64-w64-mingw32/lib/libmdminst.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmetadata.a b/x86_64-w64-mingw32/lib/libmetadata.a
index a385310..6cccfef 100644
--- a/x86_64-w64-mingw32/lib/libmetadata.a
+++ b/x86_64-w64-mingw32/lib/libmetadata.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmf.a b/x86_64-w64-mingw32/lib/libmf.a
index fb26ef2..54eb797 100644
--- a/x86_64-w64-mingw32/lib/libmf.a
+++ b/x86_64-w64-mingw32/lib/libmf.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmf3216.a b/x86_64-w64-mingw32/lib/libmf3216.a
index 74038e4..d3dcf7a 100644
--- a/x86_64-w64-mingw32/lib/libmf3216.a
+++ b/x86_64-w64-mingw32/lib/libmf3216.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmfc42.a b/x86_64-w64-mingw32/lib/libmfc42.a
index 85c04fd..cda70d8 100644
--- a/x86_64-w64-mingw32/lib/libmfc42.a
+++ b/x86_64-w64-mingw32/lib/libmfc42.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmfc42u.a b/x86_64-w64-mingw32/lib/libmfc42u.a
index fc4cea2..5bd9451 100644
--- a/x86_64-w64-mingw32/lib/libmfc42u.a
+++ b/x86_64-w64-mingw32/lib/libmfc42u.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmfcsubs.a b/x86_64-w64-mingw32/lib/libmfcsubs.a
index 2b424dd..8cc5b7f 100644
--- a/x86_64-w64-mingw32/lib/libmfcsubs.a
+++ b/x86_64-w64-mingw32/lib/libmfcsubs.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmfplat.a b/x86_64-w64-mingw32/lib/libmfplat.a
index b6f1aa8..a2d005f 100644
--- a/x86_64-w64-mingw32/lib/libmfplat.a
+++ b/x86_64-w64-mingw32/lib/libmfplat.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmfuuid.a b/x86_64-w64-mingw32/lib/libmfuuid.a
index d030dee..220c183 100644
--- a/x86_64-w64-mingw32/lib/libmfuuid.a
+++ b/x86_64-w64-mingw32/lib/libmfuuid.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmgmtapi.a b/x86_64-w64-mingw32/lib/libmgmtapi.a
index 7426070..bd1289d 100644
--- a/x86_64-w64-mingw32/lib/libmgmtapi.a
+++ b/x86_64-w64-mingw32/lib/libmgmtapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmidimap.a b/x86_64-w64-mingw32/lib/libmidimap.a
index f6919bc..b376bd1 100644
--- a/x86_64-w64-mingw32/lib/libmidimap.a
+++ b/x86_64-w64-mingw32/lib/libmidimap.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmigism.a b/x86_64-w64-mingw32/lib/libmigism.a
index 27a4ed9..a0ef70f 100644
--- a/x86_64-w64-mingw32/lib/libmigism.a
+++ b/x86_64-w64-mingw32/lib/libmigism.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmiglibnt.a b/x86_64-w64-mingw32/lib/libmiglibnt.a
index d2773c8..d5f04f5 100644
--- a/x86_64-w64-mingw32/lib/libmiglibnt.a
+++ b/x86_64-w64-mingw32/lib/libmiglibnt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmimefilt.a b/x86_64-w64-mingw32/lib/libmimefilt.a
index 3854d91..d472eba 100644
--- a/x86_64-w64-mingw32/lib/libmimefilt.a
+++ b/x86_64-w64-mingw32/lib/libmimefilt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmingw32.a b/x86_64-w64-mingw32/lib/libmingw32.a
index a648605..6423eed 100644
--- a/x86_64-w64-mingw32/lib/libmingw32.a
+++ b/x86_64-w64-mingw32/lib/libmingw32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmingwex.a b/x86_64-w64-mingw32/lib/libmingwex.a
index a6e4bfc..7cb5c9e 100644
--- a/x86_64-w64-mingw32/lib/libmingwex.a
+++ b/x86_64-w64-mingw32/lib/libmingwex.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmingwthrd.a b/x86_64-w64-mingw32/lib/libmingwthrd.a
index 87bc144..a6883b1 100644
--- a/x86_64-w64-mingw32/lib/libmingwthrd.a
+++ b/x86_64-w64-mingw32/lib/libmingwthrd.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmlang.a b/x86_64-w64-mingw32/lib/libmlang.a
index 3cbb8ca..b02b5b5 100644
--- a/x86_64-w64-mingw32/lib/libmlang.a
+++ b/x86_64-w64-mingw32/lib/libmlang.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmll_hp.a b/x86_64-w64-mingw32/lib/libmll_hp.a
index e3271d2..82ce026 100644
--- a/x86_64-w64-mingw32/lib/libmll_hp.a
+++ b/x86_64-w64-mingw32/lib/libmll_hp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmll_mtf.a b/x86_64-w64-mingw32/lib/libmll_mtf.a
index 79190f7..f169baa 100644
--- a/x86_64-w64-mingw32/lib/libmll_mtf.a
+++ b/x86_64-w64-mingw32/lib/libmll_mtf.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmll_qic.a b/x86_64-w64-mingw32/lib/libmll_qic.a
index 4d974b7..1d53eb6 100644
--- a/x86_64-w64-mingw32/lib/libmll_qic.a
+++ b/x86_64-w64-mingw32/lib/libmll_qic.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmmcbase.a b/x86_64-w64-mingw32/lib/libmmcbase.a
index 899d44f..382c0d1 100644
--- a/x86_64-w64-mingw32/lib/libmmcbase.a
+++ b/x86_64-w64-mingw32/lib/libmmcbase.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmmcndmgr.a b/x86_64-w64-mingw32/lib/libmmcndmgr.a
index 6c84787..5f804c6 100644
--- a/x86_64-w64-mingw32/lib/libmmcndmgr.a
+++ b/x86_64-w64-mingw32/lib/libmmcndmgr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmmcshext.a b/x86_64-w64-mingw32/lib/libmmcshext.a
index 1f88485..b94d7b5 100644
--- a/x86_64-w64-mingw32/lib/libmmcshext.a
+++ b/x86_64-w64-mingw32/lib/libmmcshext.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmmfutil.a b/x86_64-w64-mingw32/lib/libmmfutil.a
index 1653d96..1e63804 100644
--- a/x86_64-w64-mingw32/lib/libmmfutil.a
+++ b/x86_64-w64-mingw32/lib/libmmfutil.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmmutilse.a b/x86_64-w64-mingw32/lib/libmmutilse.a
index a934c95..fd9f0c2 100644
--- a/x86_64-w64-mingw32/lib/libmmutilse.a
+++ b/x86_64-w64-mingw32/lib/libmmutilse.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmobsync.a b/x86_64-w64-mingw32/lib/libmobsync.a
index d31bd73..2fe6e43 100644
--- a/x86_64-w64-mingw32/lib/libmobsync.a
+++ b/x86_64-w64-mingw32/lib/libmobsync.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmodemui.a b/x86_64-w64-mingw32/lib/libmodemui.a
index 8500045..6711646 100644
--- a/x86_64-w64-mingw32/lib/libmodemui.a
+++ b/x86_64-w64-mingw32/lib/libmodemui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmofd.a b/x86_64-w64-mingw32/lib/libmofd.a
index c2b2d40..354f692 100644
--- a/x86_64-w64-mingw32/lib/libmofd.a
+++ b/x86_64-w64-mingw32/lib/libmofd.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmoldname.a b/x86_64-w64-mingw32/lib/libmoldname.a
index d36f99e..ff63a86 100644
--- a/x86_64-w64-mingw32/lib/libmoldname.a
+++ b/x86_64-w64-mingw32/lib/libmoldname.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmpr.a b/x86_64-w64-mingw32/lib/libmpr.a
index 8d23d2c..c8c712c 100644
--- a/x86_64-w64-mingw32/lib/libmpr.a
+++ b/x86_64-w64-mingw32/lib/libmpr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmprapi.a b/x86_64-w64-mingw32/lib/libmprapi.a
index 2695d0d..d813ca9 100644
--- a/x86_64-w64-mingw32/lib/libmprapi.a
+++ b/x86_64-w64-mingw32/lib/libmprapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmprddm.a b/x86_64-w64-mingw32/lib/libmprddm.a
index c98857c..42c4762 100644
--- a/x86_64-w64-mingw32/lib/libmprddm.a
+++ b/x86_64-w64-mingw32/lib/libmprddm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmprdim.a b/x86_64-w64-mingw32/lib/libmprdim.a
index 32ffe67..ac98b7c 100644
--- a/x86_64-w64-mingw32/lib/libmprdim.a
+++ b/x86_64-w64-mingw32/lib/libmprdim.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmprmsg.a b/x86_64-w64-mingw32/lib/libmprmsg.a
index 3957139..1d1f389 100644
--- a/x86_64-w64-mingw32/lib/libmprmsg.a
+++ b/x86_64-w64-mingw32/lib/libmprmsg.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmprui.a b/x86_64-w64-mingw32/lib/libmprui.a
index 1222f3a..c90eff0 100644
--- a/x86_64-w64-mingw32/lib/libmprui.a
+++ b/x86_64-w64-mingw32/lib/libmprui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmqad.a b/x86_64-w64-mingw32/lib/libmqad.a
index 1d9a091..51976af 100644
--- a/x86_64-w64-mingw32/lib/libmqad.a
+++ b/x86_64-w64-mingw32/lib/libmqad.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmqcertui.a b/x86_64-w64-mingw32/lib/libmqcertui.a
index d2fd066..9b2a690 100644
--- a/x86_64-w64-mingw32/lib/libmqcertui.a
+++ b/x86_64-w64-mingw32/lib/libmqcertui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmqdscli.a b/x86_64-w64-mingw32/lib/libmqdscli.a
index 68a1abb..930cd85 100644
--- a/x86_64-w64-mingw32/lib/libmqdscli.a
+++ b/x86_64-w64-mingw32/lib/libmqdscli.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmqgentr.a b/x86_64-w64-mingw32/lib/libmqgentr.a
index 658fdc9..616f647 100644
--- a/x86_64-w64-mingw32/lib/libmqgentr.a
+++ b/x86_64-w64-mingw32/lib/libmqgentr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmqise.a b/x86_64-w64-mingw32/lib/libmqise.a
index cebd618..1889bbd 100644
--- a/x86_64-w64-mingw32/lib/libmqise.a
+++ b/x86_64-w64-mingw32/lib/libmqise.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmqlogmgr.a b/x86_64-w64-mingw32/lib/libmqlogmgr.a
index 304c174..2569862 100644
--- a/x86_64-w64-mingw32/lib/libmqlogmgr.a
+++ b/x86_64-w64-mingw32/lib/libmqlogmgr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmqoa.a b/x86_64-w64-mingw32/lib/libmqoa.a
index 2d03460..e4812c5 100644
--- a/x86_64-w64-mingw32/lib/libmqoa.a
+++ b/x86_64-w64-mingw32/lib/libmqoa.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmqperf.a b/x86_64-w64-mingw32/lib/libmqperf.a
index 77b08ef..40378fe 100644
--- a/x86_64-w64-mingw32/lib/libmqperf.a
+++ b/x86_64-w64-mingw32/lib/libmqperf.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmqqm.a b/x86_64-w64-mingw32/lib/libmqqm.a
index dcfc5c4..7fe2a3c 100644
--- a/x86_64-w64-mingw32/lib/libmqqm.a
+++ b/x86_64-w64-mingw32/lib/libmqqm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmqrt.a b/x86_64-w64-mingw32/lib/libmqrt.a
index e24d957..40d3e3a 100644
--- a/x86_64-w64-mingw32/lib/libmqrt.a
+++ b/x86_64-w64-mingw32/lib/libmqrt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmqrtdep.a b/x86_64-w64-mingw32/lib/libmqrtdep.a
index 24595f7..de317d8 100644
--- a/x86_64-w64-mingw32/lib/libmqrtdep.a
+++ b/x86_64-w64-mingw32/lib/libmqrtdep.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmqsec.a b/x86_64-w64-mingw32/lib/libmqsec.a
index 8d1b5c4..4426155 100644
--- a/x86_64-w64-mingw32/lib/libmqsec.a
+++ b/x86_64-w64-mingw32/lib/libmqsec.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmqsnap.a b/x86_64-w64-mingw32/lib/libmqsnap.a
index d240f88..300b937 100644
--- a/x86_64-w64-mingw32/lib/libmqsnap.a
+++ b/x86_64-w64-mingw32/lib/libmqsnap.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmqtrig.a b/x86_64-w64-mingw32/lib/libmqtrig.a
index d918eeb..ec3eac7 100644
--- a/x86_64-w64-mingw32/lib/libmqtrig.a
+++ b/x86_64-w64-mingw32/lib/libmqtrig.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmqupgrd.a b/x86_64-w64-mingw32/lib/libmqupgrd.a
index bf4dd73..c7c6486 100644
--- a/x86_64-w64-mingw32/lib/libmqupgrd.a
+++ b/x86_64-w64-mingw32/lib/libmqupgrd.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmqutil.a b/x86_64-w64-mingw32/lib/libmqutil.a
index d7e6a17..680a004 100644
--- a/x86_64-w64-mingw32/lib/libmqutil.a
+++ b/x86_64-w64-mingw32/lib/libmqutil.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsaatext.a b/x86_64-w64-mingw32/lib/libmsaatext.a
index 1b64149..acef538 100644
--- a/x86_64-w64-mingw32/lib/libmsaatext.a
+++ b/x86_64-w64-mingw32/lib/libmsaatext.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsacm32.a b/x86_64-w64-mingw32/lib/libmsacm32.a
index 3ba9ff6..d85e164 100644
--- a/x86_64-w64-mingw32/lib/libmsacm32.a
+++ b/x86_64-w64-mingw32/lib/libmsacm32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsadce.a b/x86_64-w64-mingw32/lib/libmsadce.a
index fc9ebf2..7a4fdfd 100644
--- a/x86_64-w64-mingw32/lib/libmsadce.a
+++ b/x86_64-w64-mingw32/lib/libmsadce.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsadcf.a b/x86_64-w64-mingw32/lib/libmsadcf.a
index efeb937..f9b4370 100644
--- a/x86_64-w64-mingw32/lib/libmsadcf.a
+++ b/x86_64-w64-mingw32/lib/libmsadcf.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsadco.a b/x86_64-w64-mingw32/lib/libmsadco.a
index 19c6c3c..4c05b64 100644
--- a/x86_64-w64-mingw32/lib/libmsadco.a
+++ b/x86_64-w64-mingw32/lib/libmsadco.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsadcs.a b/x86_64-w64-mingw32/lib/libmsadcs.a
index acffa1b..670d55c 100644
--- a/x86_64-w64-mingw32/lib/libmsadcs.a
+++ b/x86_64-w64-mingw32/lib/libmsadcs.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsadds.a b/x86_64-w64-mingw32/lib/libmsadds.a
index 253d912..1e15b94 100644
--- a/x86_64-w64-mingw32/lib/libmsadds.a
+++ b/x86_64-w64-mingw32/lib/libmsadds.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsado15.a b/x86_64-w64-mingw32/lib/libmsado15.a
index f39d315..1a6a274 100644
--- a/x86_64-w64-mingw32/lib/libmsado15.a
+++ b/x86_64-w64-mingw32/lib/libmsado15.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsadomd.a b/x86_64-w64-mingw32/lib/libmsadomd.a
index 0707bc3..fe9eff0 100644
--- a/x86_64-w64-mingw32/lib/libmsadomd.a
+++ b/x86_64-w64-mingw32/lib/libmsadomd.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsador15.a b/x86_64-w64-mingw32/lib/libmsador15.a
index d307bc8..9d93f5a 100644
--- a/x86_64-w64-mingw32/lib/libmsador15.a
+++ b/x86_64-w64-mingw32/lib/libmsador15.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsadox.a b/x86_64-w64-mingw32/lib/libmsadox.a
index 536d9f9..755e6a5 100644
--- a/x86_64-w64-mingw32/lib/libmsadox.a
+++ b/x86_64-w64-mingw32/lib/libmsadox.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsadrh15.a b/x86_64-w64-mingw32/lib/libmsadrh15.a
index 4a052dd..df411ae 100644
--- a/x86_64-w64-mingw32/lib/libmsadrh15.a
+++ b/x86_64-w64-mingw32/lib/libmsadrh15.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsafd.a b/x86_64-w64-mingw32/lib/libmsafd.a
index 98a3a3a..755b6c8 100644
--- a/x86_64-w64-mingw32/lib/libmsafd.a
+++ b/x86_64-w64-mingw32/lib/libmsafd.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsasn1.a b/x86_64-w64-mingw32/lib/libmsasn1.a
index 8c96441..d3dff92 100644
--- a/x86_64-w64-mingw32/lib/libmsasn1.a
+++ b/x86_64-w64-mingw32/lib/libmsasn1.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmscandui.a b/x86_64-w64-mingw32/lib/libmscandui.a
index 5aa27fa..0b3daba 100644
--- a/x86_64-w64-mingw32/lib/libmscandui.a
+++ b/x86_64-w64-mingw32/lib/libmscandui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmscat32.a b/x86_64-w64-mingw32/lib/libmscat32.a
index 4bc707e..91e7296 100644
--- a/x86_64-w64-mingw32/lib/libmscat32.a
+++ b/x86_64-w64-mingw32/lib/libmscat32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmscms.a b/x86_64-w64-mingw32/lib/libmscms.a
index d91a868..86fde2e 100644
--- a/x86_64-w64-mingw32/lib/libmscms.a
+++ b/x86_64-w64-mingw32/lib/libmscms.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsctfmonitor.a b/x86_64-w64-mingw32/lib/libmsctfmonitor.a
index a54da28..699e26d 100644
--- a/x86_64-w64-mingw32/lib/libmsctfmonitor.a
+++ b/x86_64-w64-mingw32/lib/libmsctfmonitor.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsctfp.a b/x86_64-w64-mingw32/lib/libmsctfp.a
index a814f89..d1df872 100644
--- a/x86_64-w64-mingw32/lib/libmsctfp.a
+++ b/x86_64-w64-mingw32/lib/libmsctfp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsdadiag.a b/x86_64-w64-mingw32/lib/libmsdadiag.a
index e6a0451..1500a31 100644
--- a/x86_64-w64-mingw32/lib/libmsdadiag.a
+++ b/x86_64-w64-mingw32/lib/libmsdadiag.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsdaosp.a b/x86_64-w64-mingw32/lib/libmsdaosp.a
index f7345e2..f68d146 100644
--- a/x86_64-w64-mingw32/lib/libmsdaosp.a
+++ b/x86_64-w64-mingw32/lib/libmsdaosp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsdaprst.a b/x86_64-w64-mingw32/lib/libmsdaprst.a
index 9808a0a..7282ad8 100644
--- a/x86_64-w64-mingw32/lib/libmsdaprst.a
+++ b/x86_64-w64-mingw32/lib/libmsdaprst.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsdaps.a b/x86_64-w64-mingw32/lib/libmsdaps.a
index 084a41e..468c497 100644
--- a/x86_64-w64-mingw32/lib/libmsdaps.a
+++ b/x86_64-w64-mingw32/lib/libmsdaps.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsdarem.a b/x86_64-w64-mingw32/lib/libmsdarem.a
index e9864d4..77124e4 100644
--- a/x86_64-w64-mingw32/lib/libmsdarem.a
+++ b/x86_64-w64-mingw32/lib/libmsdarem.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsdart.a b/x86_64-w64-mingw32/lib/libmsdart.a
index 8bad604..3b30771 100644
--- a/x86_64-w64-mingw32/lib/libmsdart.a
+++ b/x86_64-w64-mingw32/lib/libmsdart.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsdatl3.a b/x86_64-w64-mingw32/lib/libmsdatl3.a
index 99a0cea..f96bf46 100644
--- a/x86_64-w64-mingw32/lib/libmsdatl3.a
+++ b/x86_64-w64-mingw32/lib/libmsdatl3.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsdfmap.a b/x86_64-w64-mingw32/lib/libmsdfmap.a
index 6325ebb..643c95c 100644
--- a/x86_64-w64-mingw32/lib/libmsdfmap.a
+++ b/x86_64-w64-mingw32/lib/libmsdfmap.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsdmo.a b/x86_64-w64-mingw32/lib/libmsdmo.a
index e6daf05..6879220 100644
--- a/x86_64-w64-mingw32/lib/libmsdmo.a
+++ b/x86_64-w64-mingw32/lib/libmsdmo.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsdrm.a b/x86_64-w64-mingw32/lib/libmsdrm.a
index 2ee4e44..bbff124 100644
--- a/x86_64-w64-mingw32/lib/libmsdrm.a
+++ b/x86_64-w64-mingw32/lib/libmsdrm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsdtclog.a b/x86_64-w64-mingw32/lib/libmsdtclog.a
index 58630fb..f9585e7 100644
--- a/x86_64-w64-mingw32/lib/libmsdtclog.a
+++ b/x86_64-w64-mingw32/lib/libmsdtclog.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsdtcprx.a b/x86_64-w64-mingw32/lib/libmsdtcprx.a
index ba53201..7cd4124 100644
--- a/x86_64-w64-mingw32/lib/libmsdtcprx.a
+++ b/x86_64-w64-mingw32/lib/libmsdtcprx.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsdtcstp.a b/x86_64-w64-mingw32/lib/libmsdtcstp.a
index 805b487..930450f 100644
--- a/x86_64-w64-mingw32/lib/libmsdtcstp.a
+++ b/x86_64-w64-mingw32/lib/libmsdtcstp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsdtctm.a b/x86_64-w64-mingw32/lib/libmsdtctm.a
index 7d41730..1ed6412 100644
--- a/x86_64-w64-mingw32/lib/libmsdtctm.a
+++ b/x86_64-w64-mingw32/lib/libmsdtctm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsdtcuiu.a b/x86_64-w64-mingw32/lib/libmsdtcuiu.a
index ddb0e31..ff7e4ad 100644
--- a/x86_64-w64-mingw32/lib/libmsdtcuiu.a
+++ b/x86_64-w64-mingw32/lib/libmsdtcuiu.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsftedit.a b/x86_64-w64-mingw32/lib/libmsftedit.a
index 459d036..48d2436 100644
--- a/x86_64-w64-mingw32/lib/libmsftedit.a
+++ b/x86_64-w64-mingw32/lib/libmsftedit.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsgina.a b/x86_64-w64-mingw32/lib/libmsgina.a
index 6c60b49..2042e33 100644
--- a/x86_64-w64-mingw32/lib/libmsgina.a
+++ b/x86_64-w64-mingw32/lib/libmsgina.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsgr3en.a b/x86_64-w64-mingw32/lib/libmsgr3en.a
index 7252025..e343917 100644
--- a/x86_64-w64-mingw32/lib/libmsgr3en.a
+++ b/x86_64-w64-mingw32/lib/libmsgr3en.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsgrocm.a b/x86_64-w64-mingw32/lib/libmsgrocm.a
index 7fe690b..a8a56fd 100644
--- a/x86_64-w64-mingw32/lib/libmsgrocm.a
+++ b/x86_64-w64-mingw32/lib/libmsgrocm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsgsvc.a b/x86_64-w64-mingw32/lib/libmsgsvc.a
index f8e3c3e..6649bdd 100644
--- a/x86_64-w64-mingw32/lib/libmsgsvc.a
+++ b/x86_64-w64-mingw32/lib/libmsgsvc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmshtml.a b/x86_64-w64-mingw32/lib/libmshtml.a
index 7579fe9..0826e4c 100644
--- a/x86_64-w64-mingw32/lib/libmshtml.a
+++ b/x86_64-w64-mingw32/lib/libmshtml.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmshtmled.a b/x86_64-w64-mingw32/lib/libmshtmled.a
index 45ba48a..5d4e4c5 100644
--- a/x86_64-w64-mingw32/lib/libmshtmled.a
+++ b/x86_64-w64-mingw32/lib/libmshtmled.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsi.a b/x86_64-w64-mingw32/lib/libmsi.a
index 0e8d9fc..7e4e16c 100644
--- a/x86_64-w64-mingw32/lib/libmsi.a
+++ b/x86_64-w64-mingw32/lib/libmsi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsident.a b/x86_64-w64-mingw32/lib/libmsident.a
index e284348..4cb776c 100644
--- a/x86_64-w64-mingw32/lib/libmsident.a
+++ b/x86_64-w64-mingw32/lib/libmsident.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsieftp.a b/x86_64-w64-mingw32/lib/libmsieftp.a
index b68a784..98bb6ca 100644
--- a/x86_64-w64-mingw32/lib/libmsieftp.a
+++ b/x86_64-w64-mingw32/lib/libmsieftp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsihnd.a b/x86_64-w64-mingw32/lib/libmsihnd.a
index 4d0880f..d79231e 100644
--- a/x86_64-w64-mingw32/lib/libmsihnd.a
+++ b/x86_64-w64-mingw32/lib/libmsihnd.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsimg32.a b/x86_64-w64-mingw32/lib/libmsimg32.a
index 3b1d82a..3544206 100644
--- a/x86_64-w64-mingw32/lib/libmsimg32.a
+++ b/x86_64-w64-mingw32/lib/libmsimg32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsimtf.a b/x86_64-w64-mingw32/lib/libmsimtf.a
index 41d08fd..9bf9c5f 100644
--- a/x86_64-w64-mingw32/lib/libmsimtf.a
+++ b/x86_64-w64-mingw32/lib/libmsimtf.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsinfo.a b/x86_64-w64-mingw32/lib/libmsinfo.a
index 8243cb4..31b4a8a 100644
--- a/x86_64-w64-mingw32/lib/libmsinfo.a
+++ b/x86_64-w64-mingw32/lib/libmsinfo.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsiprov.a b/x86_64-w64-mingw32/lib/libmsiprov.a
index b9d2afc..de4daf2 100644
--- a/x86_64-w64-mingw32/lib/libmsiprov.a
+++ b/x86_64-w64-mingw32/lib/libmsiprov.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsir3jp.a b/x86_64-w64-mingw32/lib/libmsir3jp.a
index 7c7f7ae..64fbeb1 100644
--- a/x86_64-w64-mingw32/lib/libmsir3jp.a
+++ b/x86_64-w64-mingw32/lib/libmsir3jp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsisip.a b/x86_64-w64-mingw32/lib/libmsisip.a
index 6161f2b..39d69f9 100644
--- a/x86_64-w64-mingw32/lib/libmsisip.a
+++ b/x86_64-w64-mingw32/lib/libmsisip.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmslbui.a b/x86_64-w64-mingw32/lib/libmslbui.a
index 4c2eef5..3baee59 100644
--- a/x86_64-w64-mingw32/lib/libmslbui.a
+++ b/x86_64-w64-mingw32/lib/libmslbui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsls31.a b/x86_64-w64-mingw32/lib/libmsls31.a
index 9112c7d..ee19f03 100644
--- a/x86_64-w64-mingw32/lib/libmsls31.a
+++ b/x86_64-w64-mingw32/lib/libmsls31.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmslwvtts.a b/x86_64-w64-mingw32/lib/libmslwvtts.a
index e4a6030..50f7c16 100644
--- a/x86_64-w64-mingw32/lib/libmslwvtts.a
+++ b/x86_64-w64-mingw32/lib/libmslwvtts.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsmqocm.a b/x86_64-w64-mingw32/lib/libmsmqocm.a
index 93e4a35..087eef1 100644
--- a/x86_64-w64-mingw32/lib/libmsmqocm.a
+++ b/x86_64-w64-mingw32/lib/libmsmqocm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsobcomm.a b/x86_64-w64-mingw32/lib/libmsobcomm.a
index 6c469d0..18ef3b0 100644
--- a/x86_64-w64-mingw32/lib/libmsobcomm.a
+++ b/x86_64-w64-mingw32/lib/libmsobcomm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsobdl.a b/x86_64-w64-mingw32/lib/libmsobdl.a
index e6f009e..e23c890 100644
--- a/x86_64-w64-mingw32/lib/libmsobdl.a
+++ b/x86_64-w64-mingw32/lib/libmsobdl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsobmain.a b/x86_64-w64-mingw32/lib/libmsobmain.a
index d1361f1..95d41b2 100644
--- a/x86_64-w64-mingw32/lib/libmsobmain.a
+++ b/x86_64-w64-mingw32/lib/libmsobmain.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsobshel.a b/x86_64-w64-mingw32/lib/libmsobshel.a
index 12fa0eb..471ff0d 100644
--- a/x86_64-w64-mingw32/lib/libmsobshel.a
+++ b/x86_64-w64-mingw32/lib/libmsobshel.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsobweb.a b/x86_64-w64-mingw32/lib/libmsobweb.a
index 7feaadf..db9d27a 100644
--- a/x86_64-w64-mingw32/lib/libmsobweb.a
+++ b/x86_64-w64-mingw32/lib/libmsobweb.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsoe.a b/x86_64-w64-mingw32/lib/libmsoe.a
index 729e95a..db06597 100644
--- a/x86_64-w64-mingw32/lib/libmsoe.a
+++ b/x86_64-w64-mingw32/lib/libmsoe.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsoeacct.a b/x86_64-w64-mingw32/lib/libmsoeacct.a
index 53f9fea..a12ca1b 100644
--- a/x86_64-w64-mingw32/lib/libmsoeacct.a
+++ b/x86_64-w64-mingw32/lib/libmsoeacct.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsoert2.a b/x86_64-w64-mingw32/lib/libmsoert2.a
index 15a950f..79f6e7b 100644
--- a/x86_64-w64-mingw32/lib/libmsoert2.a
+++ b/x86_64-w64-mingw32/lib/libmsoert2.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmspatcha.a b/x86_64-w64-mingw32/lib/libmspatcha.a
index 1244bda..216b9fa 100644
--- a/x86_64-w64-mingw32/lib/libmspatcha.a
+++ b/x86_64-w64-mingw32/lib/libmspatcha.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmspmsnsv.a b/x86_64-w64-mingw32/lib/libmspmsnsv.a
index 0a64a99..f76609b 100644
--- a/x86_64-w64-mingw32/lib/libmspmsnsv.a
+++ b/x86_64-w64-mingw32/lib/libmspmsnsv.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsports.a b/x86_64-w64-mingw32/lib/libmsports.a
index d026f86..f1cf4cf 100644
--- a/x86_64-w64-mingw32/lib/libmsports.a
+++ b/x86_64-w64-mingw32/lib/libmsports.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsrating.a b/x86_64-w64-mingw32/lib/libmsrating.a
index 4efd0a1..5c10495 100644
--- a/x86_64-w64-mingw32/lib/libmsrating.a
+++ b/x86_64-w64-mingw32/lib/libmsrating.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsrle32.a b/x86_64-w64-mingw32/lib/libmsrle32.a
index 11101c4..b48f868 100644
--- a/x86_64-w64-mingw32/lib/libmsrle32.a
+++ b/x86_64-w64-mingw32/lib/libmsrle32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmssign32.a b/x86_64-w64-mingw32/lib/libmssign32.a
index bc37c3c..a6cb623 100644
--- a/x86_64-w64-mingw32/lib/libmssign32.a
+++ b/x86_64-w64-mingw32/lib/libmssign32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmssip32.a b/x86_64-w64-mingw32/lib/libmssip32.a
index d70986e..cc2736d 100644
--- a/x86_64-w64-mingw32/lib/libmssip32.a
+++ b/x86_64-w64-mingw32/lib/libmssip32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmstask.a b/x86_64-w64-mingw32/lib/libmstask.a
index 17982c2..bd45faf 100644
--- a/x86_64-w64-mingw32/lib/libmstask.a
+++ b/x86_64-w64-mingw32/lib/libmstask.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmstime.a b/x86_64-w64-mingw32/lib/libmstime.a
index 3c94b8b..4cff9e9 100644
--- a/x86_64-w64-mingw32/lib/libmstime.a
+++ b/x86_64-w64-mingw32/lib/libmstime.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmstlsapi.a b/x86_64-w64-mingw32/lib/libmstlsapi.a
index b5428c4..5933d46 100644
--- a/x86_64-w64-mingw32/lib/libmstlsapi.a
+++ b/x86_64-w64-mingw32/lib/libmstlsapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmstscax.a b/x86_64-w64-mingw32/lib/libmstscax.a
index be66bb2..636050c 100644
--- a/x86_64-w64-mingw32/lib/libmstscax.a
+++ b/x86_64-w64-mingw32/lib/libmstscax.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsutb.a b/x86_64-w64-mingw32/lib/libmsutb.a
index 1983ff4..868fb8d 100644
--- a/x86_64-w64-mingw32/lib/libmsutb.a
+++ b/x86_64-w64-mingw32/lib/libmsutb.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsv1_0.a b/x86_64-w64-mingw32/lib/libmsv1_0.a
index b3b0611..51e21e8 100644
--- a/x86_64-w64-mingw32/lib/libmsv1_0.a
+++ b/x86_64-w64-mingw32/lib/libmsv1_0.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsvcirt.a b/x86_64-w64-mingw32/lib/libmsvcirt.a
index ef74162..d6facb5 100644
--- a/x86_64-w64-mingw32/lib/libmsvcirt.a
+++ b/x86_64-w64-mingw32/lib/libmsvcirt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsvcp60.a b/x86_64-w64-mingw32/lib/libmsvcp60.a
index 964aad2..bc53924 100644
--- a/x86_64-w64-mingw32/lib/libmsvcp60.a
+++ b/x86_64-w64-mingw32/lib/libmsvcp60.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsvcr100.a b/x86_64-w64-mingw32/lib/libmsvcr100.a
index 024b191..a446820 100644
--- a/x86_64-w64-mingw32/lib/libmsvcr100.a
+++ b/x86_64-w64-mingw32/lib/libmsvcr100.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsvcr110.a b/x86_64-w64-mingw32/lib/libmsvcr110.a
index 1a21ecc..384fdcd 100644
--- a/x86_64-w64-mingw32/lib/libmsvcr110.a
+++ b/x86_64-w64-mingw32/lib/libmsvcr110.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsvcr120.a b/x86_64-w64-mingw32/lib/libmsvcr120.a
new file mode 100644
index 0000000..0fee78e
--- /dev/null
+++ b/x86_64-w64-mingw32/lib/libmsvcr120.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsvcr120d.a b/x86_64-w64-mingw32/lib/libmsvcr120d.a
new file mode 100644
index 0000000..dc69d5c
--- /dev/null
+++ b/x86_64-w64-mingw32/lib/libmsvcr120d.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsvcr80.a b/x86_64-w64-mingw32/lib/libmsvcr80.a
index 5ebe870..1de33cf 100644
--- a/x86_64-w64-mingw32/lib/libmsvcr80.a
+++ b/x86_64-w64-mingw32/lib/libmsvcr80.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsvcr90.a b/x86_64-w64-mingw32/lib/libmsvcr90.a
index 8ba0821..6b72a78 100644
--- a/x86_64-w64-mingw32/lib/libmsvcr90.a
+++ b/x86_64-w64-mingw32/lib/libmsvcr90.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsvcr90d.a b/x86_64-w64-mingw32/lib/libmsvcr90d.a
index 99ecd55..575367f 100644
--- a/x86_64-w64-mingw32/lib/libmsvcr90d.a
+++ b/x86_64-w64-mingw32/lib/libmsvcr90d.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsvcrt.a b/x86_64-w64-mingw32/lib/libmsvcrt.a
index bebeb49..38c0659 100644
--- a/x86_64-w64-mingw32/lib/libmsvcrt.a
+++ b/x86_64-w64-mingw32/lib/libmsvcrt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsvfw32.a b/x86_64-w64-mingw32/lib/libmsvfw32.a
index 2b9fdc5..e0b4b3c 100644
--- a/x86_64-w64-mingw32/lib/libmsvfw32.a
+++ b/x86_64-w64-mingw32/lib/libmsvfw32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsvidc32.a b/x86_64-w64-mingw32/lib/libmsvidc32.a
index b4a080e..9092703 100644
--- a/x86_64-w64-mingw32/lib/libmsvidc32.a
+++ b/x86_64-w64-mingw32/lib/libmsvidc32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsvidctl.a b/x86_64-w64-mingw32/lib/libmsvidctl.a
index f86438f..33a58f9 100644
--- a/x86_64-w64-mingw32/lib/libmsvidctl.a
+++ b/x86_64-w64-mingw32/lib/libmsvidctl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsw3prt.a b/x86_64-w64-mingw32/lib/libmsw3prt.a
index 27ea7a3..79c4003 100644
--- a/x86_64-w64-mingw32/lib/libmsw3prt.a
+++ b/x86_64-w64-mingw32/lib/libmsw3prt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmswsock.a b/x86_64-w64-mingw32/lib/libmswsock.a
index e384db3..b9f89fb 100644
--- a/x86_64-w64-mingw32/lib/libmswsock.a
+++ b/x86_64-w64-mingw32/lib/libmswsock.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsxactps.a b/x86_64-w64-mingw32/lib/libmsxactps.a
index b1766d7..85d3c30 100644
--- a/x86_64-w64-mingw32/lib/libmsxactps.a
+++ b/x86_64-w64-mingw32/lib/libmsxactps.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsxml3.a b/x86_64-w64-mingw32/lib/libmsxml3.a
index f51a5b8..272b465 100644
--- a/x86_64-w64-mingw32/lib/libmsxml3.a
+++ b/x86_64-w64-mingw32/lib/libmsxml3.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsxs64.a b/x86_64-w64-mingw32/lib/libmsxs64.a
index c654b30..9ede4b7 100644
--- a/x86_64-w64-mingw32/lib/libmsxs64.a
+++ b/x86_64-w64-mingw32/lib/libmsxs64.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmsyuv.a b/x86_64-w64-mingw32/lib/libmsyuv.a
index 9f53cbb..48dfdaf 100644
--- a/x86_64-w64-mingw32/lib/libmsyuv.a
+++ b/x86_64-w64-mingw32/lib/libmsyuv.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmtxclu.a b/x86_64-w64-mingw32/lib/libmtxclu.a
index 9db45d7..167cf2b 100644
--- a/x86_64-w64-mingw32/lib/libmtxclu.a
+++ b/x86_64-w64-mingw32/lib/libmtxclu.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmtxdm.a b/x86_64-w64-mingw32/lib/libmtxdm.a
index 434bce0..b07f9f2 100644
--- a/x86_64-w64-mingw32/lib/libmtxdm.a
+++ b/x86_64-w64-mingw32/lib/libmtxdm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmtxex.a b/x86_64-w64-mingw32/lib/libmtxex.a
index 5ba42d1..e8aa30c 100644
--- a/x86_64-w64-mingw32/lib/libmtxex.a
+++ b/x86_64-w64-mingw32/lib/libmtxex.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmtxoci.a b/x86_64-w64-mingw32/lib/libmtxoci.a
index a805743..cd760e3 100644
--- a/x86_64-w64-mingw32/lib/libmtxoci.a
+++ b/x86_64-w64-mingw32/lib/libmtxoci.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmycomput.a b/x86_64-w64-mingw32/lib/libmycomput.a
index 829e9de..1ca7ce6 100644
--- a/x86_64-w64-mingw32/lib/libmycomput.a
+++ b/x86_64-w64-mingw32/lib/libmycomput.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libmydocs.a b/x86_64-w64-mingw32/lib/libmydocs.a
index eefaffb..7de9900 100644
--- a/x86_64-w64-mingw32/lib/libmydocs.a
+++ b/x86_64-w64-mingw32/lib/libmydocs.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libnarrhook.a b/x86_64-w64-mingw32/lib/libnarrhook.a
index 3884a2c..2356051 100644
--- a/x86_64-w64-mingw32/lib/libnarrhook.a
+++ b/x86_64-w64-mingw32/lib/libnarrhook.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libncobjapi.a b/x86_64-w64-mingw32/lib/libncobjapi.a
index c27beb3..4a6e5b9 100644
--- a/x86_64-w64-mingw32/lib/libncobjapi.a
+++ b/x86_64-w64-mingw32/lib/libncobjapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libncprov.a b/x86_64-w64-mingw32/lib/libncprov.a
index 733991d..2f6481d 100644
--- a/x86_64-w64-mingw32/lib/libncprov.a
+++ b/x86_64-w64-mingw32/lib/libncprov.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libncrypt.a b/x86_64-w64-mingw32/lib/libncrypt.a
index 61c7bfa..c7ffb4a 100644
--- a/x86_64-w64-mingw32/lib/libncrypt.a
+++ b/x86_64-w64-mingw32/lib/libncrypt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libncxpnt.a b/x86_64-w64-mingw32/lib/libncxpnt.a
index 8b4b055..e09751b 100644
--- a/x86_64-w64-mingw32/lib/libncxpnt.a
+++ b/x86_64-w64-mingw32/lib/libncxpnt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libnddeapi.a b/x86_64-w64-mingw32/lib/libnddeapi.a
index 63abaee..68d8b03 100644
--- a/x86_64-w64-mingw32/lib/libnddeapi.a
+++ b/x86_64-w64-mingw32/lib/libnddeapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libnddenb32.a b/x86_64-w64-mingw32/lib/libnddenb32.a
index c48e839..319aa0b 100644
--- a/x86_64-w64-mingw32/lib/libnddenb32.a
+++ b/x86_64-w64-mingw32/lib/libnddenb32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libndfapi.a b/x86_64-w64-mingw32/lib/libndfapi.a
index 1d73a80..75c78d1 100644
--- a/x86_64-w64-mingw32/lib/libndfapi.a
+++ b/x86_64-w64-mingw32/lib/libndfapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libndis.a b/x86_64-w64-mingw32/lib/libndis.a
index 4df7131..7961987 100644
--- a/x86_64-w64-mingw32/lib/libndis.a
+++ b/x86_64-w64-mingw32/lib/libndis.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libndisnpp.a b/x86_64-w64-mingw32/lib/libndisnpp.a
index a65a157..b500262 100644
--- a/x86_64-w64-mingw32/lib/libndisnpp.a
+++ b/x86_64-w64-mingw32/lib/libndisnpp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libnetapi32.a b/x86_64-w64-mingw32/lib/libnetapi32.a
index 142a3d2..7876a33 100644
--- a/x86_64-w64-mingw32/lib/libnetapi32.a
+++ b/x86_64-w64-mingw32/lib/libnetapi32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libnetcfgx.a b/x86_64-w64-mingw32/lib/libnetcfgx.a
index 0d30e98..2c62356 100644
--- a/x86_64-w64-mingw32/lib/libnetcfgx.a
+++ b/x86_64-w64-mingw32/lib/libnetcfgx.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libnetid.a b/x86_64-w64-mingw32/lib/libnetid.a
index bfadd26..ce22e48 100644
--- a/x86_64-w64-mingw32/lib/libnetid.a
+++ b/x86_64-w64-mingw32/lib/libnetid.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libnetlogon.a b/x86_64-w64-mingw32/lib/libnetlogon.a
index 8550ce3..1b23144 100644
--- a/x86_64-w64-mingw32/lib/libnetlogon.a
+++ b/x86_64-w64-mingw32/lib/libnetlogon.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libnetman.a b/x86_64-w64-mingw32/lib/libnetman.a
index 9de2441..638874e 100644
--- a/x86_64-w64-mingw32/lib/libnetman.a
+++ b/x86_64-w64-mingw32/lib/libnetman.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libnetoc.a b/x86_64-w64-mingw32/lib/libnetoc.a
index 102a0e2..d52b832 100644
--- a/x86_64-w64-mingw32/lib/libnetoc.a
+++ b/x86_64-w64-mingw32/lib/libnetoc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libnetplwiz.a b/x86_64-w64-mingw32/lib/libnetplwiz.a
index ae6d8a6..9a8fb8d 100644
--- a/x86_64-w64-mingw32/lib/libnetplwiz.a
+++ b/x86_64-w64-mingw32/lib/libnetplwiz.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libnetrap.a b/x86_64-w64-mingw32/lib/libnetrap.a
index bc863ce..a8e2fc2 100644
--- a/x86_64-w64-mingw32/lib/libnetrap.a
+++ b/x86_64-w64-mingw32/lib/libnetrap.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libnetshell.a b/x86_64-w64-mingw32/lib/libnetshell.a
index 013264e..e16a62a 100644
--- a/x86_64-w64-mingw32/lib/libnetshell.a
+++ b/x86_64-w64-mingw32/lib/libnetshell.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libnetui0.a b/x86_64-w64-mingw32/lib/libnetui0.a
index c94c170..371bb83 100644
--- a/x86_64-w64-mingw32/lib/libnetui0.a
+++ b/x86_64-w64-mingw32/lib/libnetui0.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libnetui1.a b/x86_64-w64-mingw32/lib/libnetui1.a
index f0f6ac4..54b50e1 100644
--- a/x86_64-w64-mingw32/lib/libnetui1.a
+++ b/x86_64-w64-mingw32/lib/libnetui1.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libnetui2.a b/x86_64-w64-mingw32/lib/libnetui2.a
index 3560a7e..166a925 100644
--- a/x86_64-w64-mingw32/lib/libnetui2.a
+++ b/x86_64-w64-mingw32/lib/libnetui2.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libnewdev.a b/x86_64-w64-mingw32/lib/libnewdev.a
index e3c15bf..761f664 100644
--- a/x86_64-w64-mingw32/lib/libnewdev.a
+++ b/x86_64-w64-mingw32/lib/libnewdev.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libnextlink.a b/x86_64-w64-mingw32/lib/libnextlink.a
index 65b1431..003c088 100644
--- a/x86_64-w64-mingw32/lib/libnextlink.a
+++ b/x86_64-w64-mingw32/lib/libnextlink.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libnlhtml.a b/x86_64-w64-mingw32/lib/libnlhtml.a
index 234d905..bae7003 100644
--- a/x86_64-w64-mingw32/lib/libnlhtml.a
+++ b/x86_64-w64-mingw32/lib/libnlhtml.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libnntpadm.a b/x86_64-w64-mingw32/lib/libnntpadm.a
index 4066851..b0ab909 100644
--- a/x86_64-w64-mingw32/lib/libnntpadm.a
+++ b/x86_64-w64-mingw32/lib/libnntpadm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libnntpapi.a b/x86_64-w64-mingw32/lib/libnntpapi.a
index d20bf2d..58ec7d9 100644
--- a/x86_64-w64-mingw32/lib/libnntpapi.a
+++ b/x86_64-w64-mingw32/lib/libnntpapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libnntpsnap.a b/x86_64-w64-mingw32/lib/libnntpsnap.a
index d9ecf40..5888942 100644
--- a/x86_64-w64-mingw32/lib/libnntpsnap.a
+++ b/x86_64-w64-mingw32/lib/libnntpsnap.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libnormaliz.a b/x86_64-w64-mingw32/lib/libnormaliz.a
index 69bcb9e..6615352 100644
--- a/x86_64-w64-mingw32/lib/libnormaliz.a
+++ b/x86_64-w64-mingw32/lib/libnormaliz.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libnpptools.a b/x86_64-w64-mingw32/lib/libnpptools.a
index 464df14..79ad2a6 100644
--- a/x86_64-w64-mingw32/lib/libnpptools.a
+++ b/x86_64-w64-mingw32/lib/libnpptools.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libnshipsec.a b/x86_64-w64-mingw32/lib/libnshipsec.a
index 272cabf..bf16ecc 100644
--- a/x86_64-w64-mingw32/lib/libnshipsec.a
+++ b/x86_64-w64-mingw32/lib/libnshipsec.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libntdll.a b/x86_64-w64-mingw32/lib/libntdll.a
index 8e497ce..56de4bf 100644
--- a/x86_64-w64-mingw32/lib/libntdll.a
+++ b/x86_64-w64-mingw32/lib/libntdll.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libntdsapi.a b/x86_64-w64-mingw32/lib/libntdsapi.a
index b3d353a..a5c1ba1 100644
--- a/x86_64-w64-mingw32/lib/libntdsapi.a
+++ b/x86_64-w64-mingw32/lib/libntdsapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libntdsbcli.a b/x86_64-w64-mingw32/lib/libntdsbcli.a
index 8eb01df..c34cfca 100644
--- a/x86_64-w64-mingw32/lib/libntdsbcli.a
+++ b/x86_64-w64-mingw32/lib/libntdsbcli.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libntevt.a b/x86_64-w64-mingw32/lib/libntevt.a
index a09f9b1..8435792 100644
--- a/x86_64-w64-mingw32/lib/libntevt.a
+++ b/x86_64-w64-mingw32/lib/libntevt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libntfsdrv.a b/x86_64-w64-mingw32/lib/libntfsdrv.a
index 24b7fb1..cf1148d 100644
--- a/x86_64-w64-mingw32/lib/libntfsdrv.a
+++ b/x86_64-w64-mingw32/lib/libntfsdrv.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libntlanman.a b/x86_64-w64-mingw32/lib/libntlanman.a
index d0170ab..dc9b081 100644
--- a/x86_64-w64-mingw32/lib/libntlanman.a
+++ b/x86_64-w64-mingw32/lib/libntlanman.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libntlanui.a b/x86_64-w64-mingw32/lib/libntlanui.a
index c38649d..3325c6a 100644
--- a/x86_64-w64-mingw32/lib/libntlanui.a
+++ b/x86_64-w64-mingw32/lib/libntlanui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libntlanui2.a b/x86_64-w64-mingw32/lib/libntlanui2.a
index 90e882c..07d3288 100644
--- a/x86_64-w64-mingw32/lib/libntlanui2.a
+++ b/x86_64-w64-mingw32/lib/libntlanui2.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libntlsapi.a b/x86_64-w64-mingw32/lib/libntlsapi.a
index afa9eda..b5bec4b 100644
--- a/x86_64-w64-mingw32/lib/libntlsapi.a
+++ b/x86_64-w64-mingw32/lib/libntlsapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libntmarta.a b/x86_64-w64-mingw32/lib/libntmarta.a
index aa4eb6e..7cf1df2 100644
--- a/x86_64-w64-mingw32/lib/libntmarta.a
+++ b/x86_64-w64-mingw32/lib/libntmarta.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libntmsapi.a b/x86_64-w64-mingw32/lib/libntmsapi.a
index 9b3236f..12c1a1e 100644
--- a/x86_64-w64-mingw32/lib/libntmsapi.a
+++ b/x86_64-w64-mingw32/lib/libntmsapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libntmsdba.a b/x86_64-w64-mingw32/lib/libntmsdba.a
index cba5e1c..88fddd5 100644
--- a/x86_64-w64-mingw32/lib/libntmsdba.a
+++ b/x86_64-w64-mingw32/lib/libntmsdba.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libntmsevt.a b/x86_64-w64-mingw32/lib/libntmsevt.a
index 46ae637..a520f84 100644
--- a/x86_64-w64-mingw32/lib/libntmsevt.a
+++ b/x86_64-w64-mingw32/lib/libntmsevt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libntmsmgr.a b/x86_64-w64-mingw32/lib/libntmsmgr.a
index 0b0b452..ce06524 100644
--- a/x86_64-w64-mingw32/lib/libntmsmgr.a
+++ b/x86_64-w64-mingw32/lib/libntmsmgr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libntmssvc.a b/x86_64-w64-mingw32/lib/libntmssvc.a
index 1172183..ced7a56 100644
--- a/x86_64-w64-mingw32/lib/libntmssvc.a
+++ b/x86_64-w64-mingw32/lib/libntmssvc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libntoc.a b/x86_64-w64-mingw32/lib/libntoc.a
index 9bc5aad..721e570 100644
--- a/x86_64-w64-mingw32/lib/libntoc.a
+++ b/x86_64-w64-mingw32/lib/libntoc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libntoskrnl.a b/x86_64-w64-mingw32/lib/libntoskrnl.a
index 073c686..0294237 100644
--- a/x86_64-w64-mingw32/lib/libntoskrnl.a
+++ b/x86_64-w64-mingw32/lib/libntoskrnl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libntprint.a b/x86_64-w64-mingw32/lib/libntprint.a
index 831a1ad..e0c0dd0 100644
--- a/x86_64-w64-mingw32/lib/libntprint.a
+++ b/x86_64-w64-mingw32/lib/libntprint.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libntshrui.a b/x86_64-w64-mingw32/lib/libntshrui.a
index 65b6c2a..c7dc616 100644
--- a/x86_64-w64-mingw32/lib/libntshrui.a
+++ b/x86_64-w64-mingw32/lib/libntshrui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libntvdm64.a b/x86_64-w64-mingw32/lib/libntvdm64.a
index 73a20f1..0a10ad6 100644
--- a/x86_64-w64-mingw32/lib/libntvdm64.a
+++ b/x86_64-w64-mingw32/lib/libntvdm64.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libnwprovau.a b/x86_64-w64-mingw32/lib/libnwprovau.a
index eae7b19..ca5ef38 100644
--- a/x86_64-w64-mingw32/lib/libnwprovau.a
+++ b/x86_64-w64-mingw32/lib/libnwprovau.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liboakley.a b/x86_64-w64-mingw32/lib/liboakley.a
index 9599c09..f580670 100644
--- a/x86_64-w64-mingw32/lib/liboakley.a
+++ b/x86_64-w64-mingw32/lib/liboakley.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libobjsel.a b/x86_64-w64-mingw32/lib/libobjsel.a
index 33a135a..6e7c8e0 100644
--- a/x86_64-w64-mingw32/lib/libobjsel.a
+++ b/x86_64-w64-mingw32/lib/libobjsel.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liboccache.a b/x86_64-w64-mingw32/lib/liboccache.a
index 56700a4..f92f641 100644
--- a/x86_64-w64-mingw32/lib/liboccache.a
+++ b/x86_64-w64-mingw32/lib/liboccache.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libocgen.a b/x86_64-w64-mingw32/lib/libocgen.a
index bec33c5..a8a4859 100644
--- a/x86_64-w64-mingw32/lib/libocgen.a
+++ b/x86_64-w64-mingw32/lib/libocgen.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libocmanage.a b/x86_64-w64-mingw32/lib/libocmanage.a
index 55539f4..ba9ce76 100644
--- a/x86_64-w64-mingw32/lib/libocmanage.a
+++ b/x86_64-w64-mingw32/lib/libocmanage.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libocmsn.a b/x86_64-w64-mingw32/lib/libocmsn.a
index 5b2ffcf..0646efc 100644
--- a/x86_64-w64-mingw32/lib/libocmsn.a
+++ b/x86_64-w64-mingw32/lib/libocmsn.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libodbc32.a b/x86_64-w64-mingw32/lib/libodbc32.a
index cd0dfbe..04b75c0 100644
--- a/x86_64-w64-mingw32/lib/libodbc32.a
+++ b/x86_64-w64-mingw32/lib/libodbc32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libodbc32gt.a b/x86_64-w64-mingw32/lib/libodbc32gt.a
index cbd505c..3257ebf 100644
--- a/x86_64-w64-mingw32/lib/libodbc32gt.a
+++ b/x86_64-w64-mingw32/lib/libodbc32gt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libodbcbcp.a b/x86_64-w64-mingw32/lib/libodbcbcp.a
index 216f03a..e9822e7 100644
--- a/x86_64-w64-mingw32/lib/libodbcbcp.a
+++ b/x86_64-w64-mingw32/lib/libodbcbcp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libodbcconf.a b/x86_64-w64-mingw32/lib/libodbcconf.a
index 03e487e..d15ab7b 100644
--- a/x86_64-w64-mingw32/lib/libodbcconf.a
+++ b/x86_64-w64-mingw32/lib/libodbcconf.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libodbccp32.a b/x86_64-w64-mingw32/lib/libodbccp32.a
index f30353b..c492495 100644
--- a/x86_64-w64-mingw32/lib/libodbccp32.a
+++ b/x86_64-w64-mingw32/lib/libodbccp32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libodbccr32.a b/x86_64-w64-mingw32/lib/libodbccr32.a
index 4bd76c3..1573c6d 100644
--- a/x86_64-w64-mingw32/lib/libodbccr32.a
+++ b/x86_64-w64-mingw32/lib/libodbccr32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libodbccu32.a b/x86_64-w64-mingw32/lib/libodbccu32.a
index d2c6785..e1f197f 100644
--- a/x86_64-w64-mingw32/lib/libodbccu32.a
+++ b/x86_64-w64-mingw32/lib/libodbccu32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libodbctrac.a b/x86_64-w64-mingw32/lib/libodbctrac.a
index 7f19c72..5e9849b 100644
--- a/x86_64-w64-mingw32/lib/libodbctrac.a
+++ b/x86_64-w64-mingw32/lib/libodbctrac.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liboeimport.a b/x86_64-w64-mingw32/lib/liboeimport.a
index 7cc2acc..10e4f1c 100644
--- a/x86_64-w64-mingw32/lib/liboeimport.a
+++ b/x86_64-w64-mingw32/lib/liboeimport.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liboemiglib.a b/x86_64-w64-mingw32/lib/liboemiglib.a
index e4f3388..dacf20d 100644
--- a/x86_64-w64-mingw32/lib/liboemiglib.a
+++ b/x86_64-w64-mingw32/lib/liboemiglib.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libofffilt.a b/x86_64-w64-mingw32/lib/libofffilt.a
index cc6df18..c49cc00 100644
--- a/x86_64-w64-mingw32/lib/libofffilt.a
+++ b/x86_64-w64-mingw32/lib/libofffilt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libole32.a b/x86_64-w64-mingw32/lib/libole32.a
index 661fe27..3617ae2 100644
--- a/x86_64-w64-mingw32/lib/libole32.a
+++ b/x86_64-w64-mingw32/lib/libole32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liboleacc.a b/x86_64-w64-mingw32/lib/liboleacc.a
index 851328f..57152af 100644
--- a/x86_64-w64-mingw32/lib/liboleacc.a
+++ b/x86_64-w64-mingw32/lib/liboleacc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liboleaut32.a b/x86_64-w64-mingw32/lib/liboleaut32.a
index 81e81f6..805c97c 100644
--- a/x86_64-w64-mingw32/lib/liboleaut32.a
+++ b/x86_64-w64-mingw32/lib/liboleaut32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libolecli32.a b/x86_64-w64-mingw32/lib/libolecli32.a
index b24f0eb..e515ea5 100644
--- a/x86_64-w64-mingw32/lib/libolecli32.a
+++ b/x86_64-w64-mingw32/lib/libolecli32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libolecnv32.a b/x86_64-w64-mingw32/lib/libolecnv32.a
index 7321c80..b18ed57 100644
--- a/x86_64-w64-mingw32/lib/libolecnv32.a
+++ b/x86_64-w64-mingw32/lib/libolecnv32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liboledb32.a b/x86_64-w64-mingw32/lib/liboledb32.a
index ced53d5..f472877 100644
--- a/x86_64-w64-mingw32/lib/liboledb32.a
+++ b/x86_64-w64-mingw32/lib/liboledb32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liboledb32r.a b/x86_64-w64-mingw32/lib/liboledb32r.a
index a7e775a..3c7f9ab 100644
--- a/x86_64-w64-mingw32/lib/liboledb32r.a
+++ b/x86_64-w64-mingw32/lib/liboledb32r.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liboledlg.a b/x86_64-w64-mingw32/lib/liboledlg.a
index 012d279..6bcaae9 100644
--- a/x86_64-w64-mingw32/lib/liboledlg.a
+++ b/x86_64-w64-mingw32/lib/liboledlg.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liboleprn.a b/x86_64-w64-mingw32/lib/liboleprn.a
index 29e4522..8e584fd 100644
--- a/x86_64-w64-mingw32/lib/liboleprn.a
+++ b/x86_64-w64-mingw32/lib/liboleprn.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libolesvr32.a b/x86_64-w64-mingw32/lib/libolesvr32.a
index c5847d8..a48a8e1 100644
--- a/x86_64-w64-mingw32/lib/libolesvr32.a
+++ b/x86_64-w64-mingw32/lib/libolesvr32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libopengl32.a b/x86_64-w64-mingw32/lib/libopengl32.a
index 467d985..b8208a1 100644
--- a/x86_64-w64-mingw32/lib/libopengl32.a
+++ b/x86_64-w64-mingw32/lib/libopengl32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libosuninst.a b/x86_64-w64-mingw32/lib/libosuninst.a
index b794b6d..4f7affd 100644
--- a/x86_64-w64-mingw32/lib/libosuninst.a
+++ b/x86_64-w64-mingw32/lib/libosuninst.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libovprintmondll.a b/x86_64-w64-mingw32/lib/libovprintmondll.a
index 186b05d..c3cd279 100644
--- a/x86_64-w64-mingw32/lib/libovprintmondll.a
+++ b/x86_64-w64-mingw32/lib/libovprintmondll.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libp2p.a b/x86_64-w64-mingw32/lib/libp2p.a
index 206284d..a703405 100644
--- a/x86_64-w64-mingw32/lib/libp2p.a
+++ b/x86_64-w64-mingw32/lib/libp2p.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libp2pcollab.a b/x86_64-w64-mingw32/lib/libp2pcollab.a
index e76918a..5bd3f07 100644
--- a/x86_64-w64-mingw32/lib/libp2pcollab.a
+++ b/x86_64-w64-mingw32/lib/libp2pcollab.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libp2pgraph.a b/x86_64-w64-mingw32/lib/libp2pgraph.a
index 436cd4c..d7481b5 100644
--- a/x86_64-w64-mingw32/lib/libp2pgraph.a
+++ b/x86_64-w64-mingw32/lib/libp2pgraph.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libpanmap.a b/x86_64-w64-mingw32/lib/libpanmap.a
index 3294f9c..1419702 100644
--- a/x86_64-w64-mingw32/lib/libpanmap.a
+++ b/x86_64-w64-mingw32/lib/libpanmap.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libpautoenr.a b/x86_64-w64-mingw32/lib/libpautoenr.a
index cbfcea2..53de452 100644
--- a/x86_64-w64-mingw32/lib/libpautoenr.a
+++ b/x86_64-w64-mingw32/lib/libpautoenr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libpchshell.a b/x86_64-w64-mingw32/lib/libpchshell.a
index d5ea4bc..cfda216 100644
--- a/x86_64-w64-mingw32/lib/libpchshell.a
+++ b/x86_64-w64-mingw32/lib/libpchshell.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libpchsvc.a b/x86_64-w64-mingw32/lib/libpchsvc.a
index a1361cb..c0ecafb 100644
--- a/x86_64-w64-mingw32/lib/libpchsvc.a
+++ b/x86_64-w64-mingw32/lib/libpchsvc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libpcwum.a b/x86_64-w64-mingw32/lib/libpcwum.a
index f3102c1..2e82cc5 100644
--- a/x86_64-w64-mingw32/lib/libpcwum.a
+++ b/x86_64-w64-mingw32/lib/libpcwum.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libpdh.a b/x86_64-w64-mingw32/lib/libpdh.a
index f46a80b..ffa1d0a 100644
--- a/x86_64-w64-mingw32/lib/libpdh.a
+++ b/x86_64-w64-mingw32/lib/libpdh.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libperfctrs.a b/x86_64-w64-mingw32/lib/libperfctrs.a
index d2888f3..7c51ef9 100644
--- a/x86_64-w64-mingw32/lib/libperfctrs.a
+++ b/x86_64-w64-mingw32/lib/libperfctrs.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libperfdisk.a b/x86_64-w64-mingw32/lib/libperfdisk.a
index d964adc..b3eb2c0 100644
--- a/x86_64-w64-mingw32/lib/libperfdisk.a
+++ b/x86_64-w64-mingw32/lib/libperfdisk.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libperfnet.a b/x86_64-w64-mingw32/lib/libperfnet.a
index 6fd5e80..2d8b730 100644
--- a/x86_64-w64-mingw32/lib/libperfnet.a
+++ b/x86_64-w64-mingw32/lib/libperfnet.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libperfos.a b/x86_64-w64-mingw32/lib/libperfos.a
index f17c5da..5895f7f 100644
--- a/x86_64-w64-mingw32/lib/libperfos.a
+++ b/x86_64-w64-mingw32/lib/libperfos.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libperfproc.a b/x86_64-w64-mingw32/lib/libperfproc.a
index 1567135..06dd312 100644
--- a/x86_64-w64-mingw32/lib/libperfproc.a
+++ b/x86_64-w64-mingw32/lib/libperfproc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libperfts.a b/x86_64-w64-mingw32/lib/libperfts.a
index 217a0e2..86fca00 100644
--- a/x86_64-w64-mingw32/lib/libperfts.a
+++ b/x86_64-w64-mingw32/lib/libperfts.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libphotowiz.a b/x86_64-w64-mingw32/lib/libphotowiz.a
index efa3033..4748505 100644
--- a/x86_64-w64-mingw32/lib/libphotowiz.a
+++ b/x86_64-w64-mingw32/lib/libphotowiz.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libpid.a b/x86_64-w64-mingw32/lib/libpid.a
index 0199814..d5a2f37 100644
--- a/x86_64-w64-mingw32/lib/libpid.a
+++ b/x86_64-w64-mingw32/lib/libpid.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libpidgen.a b/x86_64-w64-mingw32/lib/libpidgen.a
index 47a413a..6306d32 100644
--- a/x86_64-w64-mingw32/lib/libpidgen.a
+++ b/x86_64-w64-mingw32/lib/libpidgen.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libpintlcsa.a b/x86_64-w64-mingw32/lib/libpintlcsa.a
index c7fbb31..891abca 100644
--- a/x86_64-w64-mingw32/lib/libpintlcsa.a
+++ b/x86_64-w64-mingw32/lib/libpintlcsa.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libpintlcsd.a b/x86_64-w64-mingw32/lib/libpintlcsd.a
index d6f0e71..2177de6 100644
--- a/x86_64-w64-mingw32/lib/libpintlcsd.a
+++ b/x86_64-w64-mingw32/lib/libpintlcsd.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libpjlmon.a b/x86_64-w64-mingw32/lib/libpjlmon.a
index 718ca38..9b0df03 100644
--- a/x86_64-w64-mingw32/lib/libpjlmon.a
+++ b/x86_64-w64-mingw32/lib/libpjlmon.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libpngfilt.a b/x86_64-w64-mingw32/lib/libpngfilt.a
index d07d249..31bbf77 100644
--- a/x86_64-w64-mingw32/lib/libpngfilt.a
+++ b/x86_64-w64-mingw32/lib/libpngfilt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libpolicman.a b/x86_64-w64-mingw32/lib/libpolicman.a
index 07be70c..9e7830f 100644
--- a/x86_64-w64-mingw32/lib/libpolicman.a
+++ b/x86_64-w64-mingw32/lib/libpolicman.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libpolstore.a b/x86_64-w64-mingw32/lib/libpolstore.a
index 5a28a45..9a253bd 100644
--- a/x86_64-w64-mingw32/lib/libpolstore.a
+++ b/x86_64-w64-mingw32/lib/libpolstore.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libportabledeviceguids.a b/x86_64-w64-mingw32/lib/libportabledeviceguids.a
index 1402438..859441e 100644
--- a/x86_64-w64-mingw32/lib/libportabledeviceguids.a
+++ b/x86_64-w64-mingw32/lib/libportabledeviceguids.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libpowrprof.a b/x86_64-w64-mingw32/lib/libpowrprof.a
index 72eb390..9a6514e 100644
--- a/x86_64-w64-mingw32/lib/libpowrprof.a
+++ b/x86_64-w64-mingw32/lib/libpowrprof.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libprintui.a b/x86_64-w64-mingw32/lib/libprintui.a
index da4aa4d..35cc084 100644
--- a/x86_64-w64-mingw32/lib/libprintui.a
+++ b/x86_64-w64-mingw32/lib/libprintui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libprofmap.a b/x86_64-w64-mingw32/lib/libprofmap.a
index b120107..d080f7c 100644
--- a/x86_64-w64-mingw32/lib/libprofmap.a
+++ b/x86_64-w64-mingw32/lib/libprofmap.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libprovthrd.a b/x86_64-w64-mingw32/lib/libprovthrd.a
index da0a035..3201c83 100644
--- a/x86_64-w64-mingw32/lib/libprovthrd.a
+++ b/x86_64-w64-mingw32/lib/libprovthrd.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libpsapi.a b/x86_64-w64-mingw32/lib/libpsapi.a
index b705fb1..3ebc90e 100644
--- a/x86_64-w64-mingw32/lib/libpsapi.a
+++ b/x86_64-w64-mingw32/lib/libpsapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libpsbase.a b/x86_64-w64-mingw32/lib/libpsbase.a
index b963693..28c9cf8 100644
--- a/x86_64-w64-mingw32/lib/libpsbase.a
+++ b/x86_64-w64-mingw32/lib/libpsbase.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libpschdprf.a b/x86_64-w64-mingw32/lib/libpschdprf.a
index 0902c61..3de2a00 100644
--- a/x86_64-w64-mingw32/lib/libpschdprf.a
+++ b/x86_64-w64-mingw32/lib/libpschdprf.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libpsnppagn.a b/x86_64-w64-mingw32/lib/libpsnppagn.a
index 5f1e8c4..4b5617c 100644
--- a/x86_64-w64-mingw32/lib/libpsnppagn.a
+++ b/x86_64-w64-mingw32/lib/libpsnppagn.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libpstorec.a b/x86_64-w64-mingw32/lib/libpstorec.a
index 97e4156..1b5c0c3 100644
--- a/x86_64-w64-mingw32/lib/libpstorec.a
+++ b/x86_64-w64-mingw32/lib/libpstorec.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libpstorsvc.a b/x86_64-w64-mingw32/lib/libpstorsvc.a
index d06aad7..1936b4d 100644
--- a/x86_64-w64-mingw32/lib/libpstorsvc.a
+++ b/x86_64-w64-mingw32/lib/libpstorsvc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libpthread.a b/x86_64-w64-mingw32/lib/libpthread.a
index 77d7159..0190720 100644
--- a/x86_64-w64-mingw32/lib/libpthread.a
+++ b/x86_64-w64-mingw32/lib/libpthread.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libpthread.dll.a b/x86_64-w64-mingw32/lib/libpthread.dll.a
index 6a78a72..ad7eeff 100644
--- a/x86_64-w64-mingw32/lib/libpthread.dll.a
+++ b/x86_64-w64-mingw32/lib/libpthread.dll.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libqasf.a b/x86_64-w64-mingw32/lib/libqasf.a
index 5ac1f72..96debaf 100644
--- a/x86_64-w64-mingw32/lib/libqasf.a
+++ b/x86_64-w64-mingw32/lib/libqasf.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libqcap.a b/x86_64-w64-mingw32/lib/libqcap.a
index 25f642b..c76f712 100644
--- a/x86_64-w64-mingw32/lib/libqcap.a
+++ b/x86_64-w64-mingw32/lib/libqcap.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libqdv.a b/x86_64-w64-mingw32/lib/libqdv.a
index c74207f..7f29915 100644
--- a/x86_64-w64-mingw32/lib/libqdv.a
+++ b/x86_64-w64-mingw32/lib/libqdv.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libqdvd.a b/x86_64-w64-mingw32/lib/libqdvd.a
index efdf37d..e7baea7 100644
--- a/x86_64-w64-mingw32/lib/libqdvd.a
+++ b/x86_64-w64-mingw32/lib/libqdvd.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libqedit.a b/x86_64-w64-mingw32/lib/libqedit.a
index 12200f7..3d2e66f 100644
--- a/x86_64-w64-mingw32/lib/libqedit.a
+++ b/x86_64-w64-mingw32/lib/libqedit.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libqmgr.a b/x86_64-w64-mingw32/lib/libqmgr.a
index ebe0687..e9abef8 100644
--- a/x86_64-w64-mingw32/lib/libqmgr.a
+++ b/x86_64-w64-mingw32/lib/libqmgr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libqmgrprxy.a b/x86_64-w64-mingw32/lib/libqmgrprxy.a
index 5724b04..be31da0 100644
--- a/x86_64-w64-mingw32/lib/libqmgrprxy.a
+++ b/x86_64-w64-mingw32/lib/libqmgrprxy.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libqosname.a b/x86_64-w64-mingw32/lib/libqosname.a
index 431ee29..283aeac 100644
--- a/x86_64-w64-mingw32/lib/libqosname.a
+++ b/x86_64-w64-mingw32/lib/libqosname.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libquadmath.a b/x86_64-w64-mingw32/lib/libquadmath.a
index 5e253b0..a126980 100644
--- a/x86_64-w64-mingw32/lib/libquadmath.a
+++ b/x86_64-w64-mingw32/lib/libquadmath.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libquartz.a b/x86_64-w64-mingw32/lib/libquartz.a
index f20ea2e..fe02351 100644
--- a/x86_64-w64-mingw32/lib/libquartz.a
+++ b/x86_64-w64-mingw32/lib/libquartz.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libquery.a b/x86_64-w64-mingw32/lib/libquery.a
index d28dc3b..0056388 100644
--- a/x86_64-w64-mingw32/lib/libquery.a
+++ b/x86_64-w64-mingw32/lib/libquery.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libqutil.a b/x86_64-w64-mingw32/lib/libqutil.a
index 8e6b89c..430d6d1 100644
--- a/x86_64-w64-mingw32/lib/libqutil.a
+++ b/x86_64-w64-mingw32/lib/libqutil.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libqwave.a b/x86_64-w64-mingw32/lib/libqwave.a
index 2ebffe1..4fb5af0 100644
--- a/x86_64-w64-mingw32/lib/libqwave.a
+++ b/x86_64-w64-mingw32/lib/libqwave.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libracpldlg.a b/x86_64-w64-mingw32/lib/libracpldlg.a
index edf2c52..f228ea6 100644
--- a/x86_64-w64-mingw32/lib/libracpldlg.a
+++ b/x86_64-w64-mingw32/lib/libracpldlg.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librasadhlp.a b/x86_64-w64-mingw32/lib/librasadhlp.a
index cec5648..1875c97 100644
--- a/x86_64-w64-mingw32/lib/librasadhlp.a
+++ b/x86_64-w64-mingw32/lib/librasadhlp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librasapi32.a b/x86_64-w64-mingw32/lib/librasapi32.a
index e3ceff2..067e707 100644
--- a/x86_64-w64-mingw32/lib/librasapi32.a
+++ b/x86_64-w64-mingw32/lib/librasapi32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librasauto.a b/x86_64-w64-mingw32/lib/librasauto.a
index 121fda0..629dc5c 100644
--- a/x86_64-w64-mingw32/lib/librasauto.a
+++ b/x86_64-w64-mingw32/lib/librasauto.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libraschap.a b/x86_64-w64-mingw32/lib/libraschap.a
index f0744dd..7bb9bb2 100644
--- a/x86_64-w64-mingw32/lib/libraschap.a
+++ b/x86_64-w64-mingw32/lib/libraschap.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librasctrs.a b/x86_64-w64-mingw32/lib/librasctrs.a
index d431f17..a3e4845 100644
--- a/x86_64-w64-mingw32/lib/librasctrs.a
+++ b/x86_64-w64-mingw32/lib/librasctrs.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librasdlg.a b/x86_64-w64-mingw32/lib/librasdlg.a
index e990c62..cf080e1 100644
--- a/x86_64-w64-mingw32/lib/librasdlg.a
+++ b/x86_64-w64-mingw32/lib/librasdlg.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librasman.a b/x86_64-w64-mingw32/lib/librasman.a
index e680f41..624dfe1 100644
--- a/x86_64-w64-mingw32/lib/librasman.a
+++ b/x86_64-w64-mingw32/lib/librasman.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librasmans.a b/x86_64-w64-mingw32/lib/librasmans.a
index c31829e..8b1505e 100644
--- a/x86_64-w64-mingw32/lib/librasmans.a
+++ b/x86_64-w64-mingw32/lib/librasmans.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librasmontr.a b/x86_64-w64-mingw32/lib/librasmontr.a
index f7e4533..05b2f42 100644
--- a/x86_64-w64-mingw32/lib/librasmontr.a
+++ b/x86_64-w64-mingw32/lib/librasmontr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librasmxs.a b/x86_64-w64-mingw32/lib/librasmxs.a
index d9ba48b..19aecf1 100644
--- a/x86_64-w64-mingw32/lib/librasmxs.a
+++ b/x86_64-w64-mingw32/lib/librasmxs.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librasppp.a b/x86_64-w64-mingw32/lib/librasppp.a
index 5596f46..2e36f3e 100644
--- a/x86_64-w64-mingw32/lib/librasppp.a
+++ b/x86_64-w64-mingw32/lib/librasppp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librasrad.a b/x86_64-w64-mingw32/lib/librasrad.a
index 41ee4be..7fec771 100644
--- a/x86_64-w64-mingw32/lib/librasrad.a
+++ b/x86_64-w64-mingw32/lib/librasrad.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librassapi.a b/x86_64-w64-mingw32/lib/librassapi.a
index f1ae132..a436219 100644
--- a/x86_64-w64-mingw32/lib/librassapi.a
+++ b/x86_64-w64-mingw32/lib/librassapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librasser.a b/x86_64-w64-mingw32/lib/librasser.a
index d240da9..4cdfe8f 100644
--- a/x86_64-w64-mingw32/lib/librasser.a
+++ b/x86_64-w64-mingw32/lib/librasser.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librastapi.a b/x86_64-w64-mingw32/lib/librastapi.a
index 0c71ee2..6dbf030 100644
--- a/x86_64-w64-mingw32/lib/librastapi.a
+++ b/x86_64-w64-mingw32/lib/librastapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librastls.a b/x86_64-w64-mingw32/lib/librastls.a
index 683672f..06a0f48 100644
--- a/x86_64-w64-mingw32/lib/librastls.a
+++ b/x86_64-w64-mingw32/lib/librastls.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librcbdyctl.a b/x86_64-w64-mingw32/lib/librcbdyctl.a
index ee19345..aab22b2 100644
--- a/x86_64-w64-mingw32/lib/librcbdyctl.a
+++ b/x86_64-w64-mingw32/lib/librcbdyctl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librdchost.a b/x86_64-w64-mingw32/lib/librdchost.a
index f166f9e..7f1cd19 100644
--- a/x86_64-w64-mingw32/lib/librdchost.a
+++ b/x86_64-w64-mingw32/lib/librdchost.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librdpcfgex.a b/x86_64-w64-mingw32/lib/librdpcfgex.a
index 31500ec..23805ae 100644
--- a/x86_64-w64-mingw32/lib/librdpcfgex.a
+++ b/x86_64-w64-mingw32/lib/librdpcfgex.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librdpsnd.a b/x86_64-w64-mingw32/lib/librdpsnd.a
index bb20330..a49c959 100644
--- a/x86_64-w64-mingw32/lib/librdpsnd.a
+++ b/x86_64-w64-mingw32/lib/librdpsnd.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librdpwsx.a b/x86_64-w64-mingw32/lib/librdpwsx.a
index 7d4578c..c13b3aa 100644
--- a/x86_64-w64-mingw32/lib/librdpwsx.a
+++ b/x86_64-w64-mingw32/lib/librdpwsx.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libregapi.a b/x86_64-w64-mingw32/lib/libregapi.a
index 8d169eb..ee18819 100644
--- a/x86_64-w64-mingw32/lib/libregapi.a
+++ b/x86_64-w64-mingw32/lib/libregapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libregsvc.a b/x86_64-w64-mingw32/lib/libregsvc.a
index 817d40c..219640f 100644
--- a/x86_64-w64-mingw32/lib/libregsvc.a
+++ b/x86_64-w64-mingw32/lib/libregsvc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libregwizc.a b/x86_64-w64-mingw32/lib/libregwizc.a
index aaf020c..1b6625e 100644
--- a/x86_64-w64-mingw32/lib/libregwizc.a
+++ b/x86_64-w64-mingw32/lib/libregwizc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libremotepg.a b/x86_64-w64-mingw32/lib/libremotepg.a
index 4255ce6..a29044c 100644
--- a/x86_64-w64-mingw32/lib/libremotepg.a
+++ b/x86_64-w64-mingw32/lib/libremotepg.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librend.a b/x86_64-w64-mingw32/lib/librend.a
index 1f37e99..d6343c9 100644
--- a/x86_64-w64-mingw32/lib/librend.a
+++ b/x86_64-w64-mingw32/lib/librend.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librepdrvfs.a b/x86_64-w64-mingw32/lib/librepdrvfs.a
index ea2d6b5..d058b8a 100644
--- a/x86_64-w64-mingw32/lib/librepdrvfs.a
+++ b/x86_64-w64-mingw32/lib/librepdrvfs.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libresutil.a b/x86_64-w64-mingw32/lib/libresutil.a
index 75c0bb5..9b8dbaa 100644
--- a/x86_64-w64-mingw32/lib/libresutil.a
+++ b/x86_64-w64-mingw32/lib/libresutil.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libresutils.a b/x86_64-w64-mingw32/lib/libresutils.a
index acfa189..c61261f 100644
--- a/x86_64-w64-mingw32/lib/libresutils.a
+++ b/x86_64-w64-mingw32/lib/libresutils.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libriched20.a b/x86_64-w64-mingw32/lib/libriched20.a
index cae40e6..db758f9 100644
--- a/x86_64-w64-mingw32/lib/libriched20.a
+++ b/x86_64-w64-mingw32/lib/libriched20.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librnr20.a b/x86_64-w64-mingw32/lib/librnr20.a
index 2e3ec12..8a99cfb 100644
--- a/x86_64-w64-mingw32/lib/librnr20.a
+++ b/x86_64-w64-mingw32/lib/librnr20.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libroutetab.a b/x86_64-w64-mingw32/lib/libroutetab.a
index 2699eaf..296df74 100644
--- a/x86_64-w64-mingw32/lib/libroutetab.a
+++ b/x86_64-w64-mingw32/lib/libroutetab.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librpcdiag.a b/x86_64-w64-mingw32/lib/librpcdiag.a
index 5a6344c..c058b74 100644
--- a/x86_64-w64-mingw32/lib/librpcdiag.a
+++ b/x86_64-w64-mingw32/lib/librpcdiag.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librpchttp.a b/x86_64-w64-mingw32/lib/librpchttp.a
index 9822380..595c403 100644
--- a/x86_64-w64-mingw32/lib/librpchttp.a
+++ b/x86_64-w64-mingw32/lib/librpchttp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librpcns4.a b/x86_64-w64-mingw32/lib/librpcns4.a
index 0fe8464..2535d9a 100644
--- a/x86_64-w64-mingw32/lib/librpcns4.a
+++ b/x86_64-w64-mingw32/lib/librpcns4.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librpcnsh.a b/x86_64-w64-mingw32/lib/librpcnsh.a
index d6a6a6c..b39461c 100644
--- a/x86_64-w64-mingw32/lib/librpcnsh.a
+++ b/x86_64-w64-mingw32/lib/librpcnsh.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librpcref.a b/x86_64-w64-mingw32/lib/librpcref.a
index ab25d88..4c5648d 100644
--- a/x86_64-w64-mingw32/lib/librpcref.a
+++ b/x86_64-w64-mingw32/lib/librpcref.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librpcrt4.a b/x86_64-w64-mingw32/lib/librpcrt4.a
index a344f92..dac6234 100644
--- a/x86_64-w64-mingw32/lib/librpcrt4.a
+++ b/x86_64-w64-mingw32/lib/librpcrt4.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librpcss.a b/x86_64-w64-mingw32/lib/librpcss.a
index 5c3b018..2480ed5 100644
--- a/x86_64-w64-mingw32/lib/librpcss.a
+++ b/x86_64-w64-mingw32/lib/librpcss.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librsaenh.a b/x86_64-w64-mingw32/lib/librsaenh.a
index 8941ef8..58c529c 100644
--- a/x86_64-w64-mingw32/lib/librsaenh.a
+++ b/x86_64-w64-mingw32/lib/librsaenh.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librsfsaps.a b/x86_64-w64-mingw32/lib/librsfsaps.a
index 7090f00..c7c08d0 100644
--- a/x86_64-w64-mingw32/lib/librsfsaps.a
+++ b/x86_64-w64-mingw32/lib/librsfsaps.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librshx32.a b/x86_64-w64-mingw32/lib/librshx32.a
index 21b7762..e9dd241 100644
--- a/x86_64-w64-mingw32/lib/librshx32.a
+++ b/x86_64-w64-mingw32/lib/librshx32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librsmps.a b/x86_64-w64-mingw32/lib/librsmps.a
index a73f2bf..2222c1f 100644
--- a/x86_64-w64-mingw32/lib/librsmps.a
+++ b/x86_64-w64-mingw32/lib/librsmps.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librstrmgr.a b/x86_64-w64-mingw32/lib/librstrmgr.a
index 2391f11..47347b5 100644
--- a/x86_64-w64-mingw32/lib/librstrmgr.a
+++ b/x86_64-w64-mingw32/lib/librstrmgr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librtm.a b/x86_64-w64-mingw32/lib/librtm.a
index 4b00c26..b42c7f3 100644
--- a/x86_64-w64-mingw32/lib/librtm.a
+++ b/x86_64-w64-mingw32/lib/librtm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librtutils.a b/x86_64-w64-mingw32/lib/librtutils.a
index 0339fbc..950a1bc 100644
--- a/x86_64-w64-mingw32/lib/librtutils.a
+++ b/x86_64-w64-mingw32/lib/librtutils.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libruntimeobject.a b/x86_64-w64-mingw32/lib/libruntimeobject.a
index bc33fdd..8922b6a 100644
--- a/x86_64-w64-mingw32/lib/libruntimeobject.a
+++ b/x86_64-w64-mingw32/lib/libruntimeobject.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/librwnh.a b/x86_64-w64-mingw32/lib/librwnh.a
index 5aba95c..e325fc6 100644
--- a/x86_64-w64-mingw32/lib/librwnh.a
+++ b/x86_64-w64-mingw32/lib/librwnh.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsafrcdlg.a b/x86_64-w64-mingw32/lib/libsafrcdlg.a
index bdab3c8..abaa74e 100644
--- a/x86_64-w64-mingw32/lib/libsafrcdlg.a
+++ b/x86_64-w64-mingw32/lib/libsafrcdlg.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsafrdm.a b/x86_64-w64-mingw32/lib/libsafrdm.a
index b5ee499..9fe7807 100644
--- a/x86_64-w64-mingw32/lib/libsafrdm.a
+++ b/x86_64-w64-mingw32/lib/libsafrdm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsafrslv.a b/x86_64-w64-mingw32/lib/libsafrslv.a
index 968b815..0db46e2 100644
--- a/x86_64-w64-mingw32/lib/libsafrslv.a
+++ b/x86_64-w64-mingw32/lib/libsafrslv.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsamlib.a b/x86_64-w64-mingw32/lib/libsamlib.a
index f24124a..70ab204 100644
--- a/x86_64-w64-mingw32/lib/libsamlib.a
+++ b/x86_64-w64-mingw32/lib/libsamlib.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsamsrv.a b/x86_64-w64-mingw32/lib/libsamsrv.a
index adcd33b..6b72c12 100644
--- a/x86_64-w64-mingw32/lib/libsamsrv.a
+++ b/x86_64-w64-mingw32/lib/libsamsrv.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsapi.a b/x86_64-w64-mingw32/lib/libsapi.a
index bb970c0..e24bf07 100644
--- a/x86_64-w64-mingw32/lib/libsapi.a
+++ b/x86_64-w64-mingw32/lib/libsapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libscarddlg.a b/x86_64-w64-mingw32/lib/libscarddlg.a
index 81103e5..ca34524 100644
--- a/x86_64-w64-mingw32/lib/libscarddlg.a
+++ b/x86_64-w64-mingw32/lib/libscarddlg.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsccbase.a b/x86_64-w64-mingw32/lib/libsccbase.a
index fb21d9e..964e6c6 100644
--- a/x86_64-w64-mingw32/lib/libsccbase.a
+++ b/x86_64-w64-mingw32/lib/libsccbase.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsccsccp.a b/x86_64-w64-mingw32/lib/libsccsccp.a
index 7df36e3..06b7cfa 100644
--- a/x86_64-w64-mingw32/lib/libsccsccp.a
+++ b/x86_64-w64-mingw32/lib/libsccsccp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libscecli.a b/x86_64-w64-mingw32/lib/libscecli.a
index 6c3daab..baacfad 100644
--- a/x86_64-w64-mingw32/lib/libscecli.a
+++ b/x86_64-w64-mingw32/lib/libscecli.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libscesrv.a b/x86_64-w64-mingw32/lib/libscesrv.a
index 13122a8..0d1194f 100644
--- a/x86_64-w64-mingw32/lib/libscesrv.a
+++ b/x86_64-w64-mingw32/lib/libscesrv.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libschannel.a b/x86_64-w64-mingw32/lib/libschannel.a
index 7b8abfc..ee21033 100644
--- a/x86_64-w64-mingw32/lib/libschannel.a
+++ b/x86_64-w64-mingw32/lib/libschannel.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libschedsvc.a b/x86_64-w64-mingw32/lib/libschedsvc.a
index fc9e30b..7354fd0 100644
--- a/x86_64-w64-mingw32/lib/libschedsvc.a
+++ b/x86_64-w64-mingw32/lib/libschedsvc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsclgntfy.a b/x86_64-w64-mingw32/lib/libsclgntfy.a
index afb00ca..ba57b80 100644
--- a/x86_64-w64-mingw32/lib/libsclgntfy.a
+++ b/x86_64-w64-mingw32/lib/libsclgntfy.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libscredir.a b/x86_64-w64-mingw32/lib/libscredir.a
index 584d7d1..48977d8 100644
--- a/x86_64-w64-mingw32/lib/libscredir.a
+++ b/x86_64-w64-mingw32/lib/libscredir.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libscript.a b/x86_64-w64-mingw32/lib/libscript.a
index 1d17249..b190ae1 100644
--- a/x86_64-w64-mingw32/lib/libscript.a
+++ b/x86_64-w64-mingw32/lib/libscript.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libscripto.a b/x86_64-w64-mingw32/lib/libscripto.a
index fd1739a..2ce4c50 100644
--- a/x86_64-w64-mingw32/lib/libscripto.a
+++ b/x86_64-w64-mingw32/lib/libscripto.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libscriptpw.a b/x86_64-w64-mingw32/lib/libscriptpw.a
index fc4887e..54f3b29 100644
--- a/x86_64-w64-mingw32/lib/libscriptpw.a
+++ b/x86_64-w64-mingw32/lib/libscriptpw.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libscrnsave.a b/x86_64-w64-mingw32/lib/libscrnsave.a
index 03d209d..9fe6ea6 100644
--- a/x86_64-w64-mingw32/lib/libscrnsave.a
+++ b/x86_64-w64-mingw32/lib/libscrnsave.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libscrnsavw.a b/x86_64-w64-mingw32/lib/libscrnsavw.a
index 5e92373..2fa5fab 100644
--- a/x86_64-w64-mingw32/lib/libscrnsavw.a
+++ b/x86_64-w64-mingw32/lib/libscrnsavw.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libscrobj.a b/x86_64-w64-mingw32/lib/libscrobj.a
index f2bd63a..61a4a0f 100644
--- a/x86_64-w64-mingw32/lib/libscrobj.a
+++ b/x86_64-w64-mingw32/lib/libscrobj.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libscrptutl.a b/x86_64-w64-mingw32/lib/libscrptutl.a
index 4369fba..0dcc2fd 100644
--- a/x86_64-w64-mingw32/lib/libscrptutl.a
+++ b/x86_64-w64-mingw32/lib/libscrptutl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libscrrun.a b/x86_64-w64-mingw32/lib/libscrrun.a
index c53acb7..b6b319b 100644
--- a/x86_64-w64-mingw32/lib/libscrrun.a
+++ b/x86_64-w64-mingw32/lib/libscrrun.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsdhcinst.a b/x86_64-w64-mingw32/lib/libsdhcinst.a
index b86c478..be2009d 100644
--- a/x86_64-w64-mingw32/lib/libsdhcinst.a
+++ b/x86_64-w64-mingw32/lib/libsdhcinst.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsdpblb.a b/x86_64-w64-mingw32/lib/libsdpblb.a
index 524b63e..a2bc896 100644
--- a/x86_64-w64-mingw32/lib/libsdpblb.a
+++ b/x86_64-w64-mingw32/lib/libsdpblb.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libseclogon.a b/x86_64-w64-mingw32/lib/libseclogon.a
index eb2c803..58238b8 100644
--- a/x86_64-w64-mingw32/lib/libseclogon.a
+++ b/x86_64-w64-mingw32/lib/libseclogon.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsecur32.a b/x86_64-w64-mingw32/lib/libsecur32.a
index e6165ad..6f24bcd 100644
--- a/x86_64-w64-mingw32/lib/libsecur32.a
+++ b/x86_64-w64-mingw32/lib/libsecur32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsecurity.a b/x86_64-w64-mingw32/lib/libsecurity.a
index b03ca2f..ca610a7 100644
--- a/x86_64-w64-mingw32/lib/libsecurity.a
+++ b/x86_64-w64-mingw32/lib/libsecurity.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsendcmsg.a b/x86_64-w64-mingw32/lib/libsendcmsg.a
index a966a61..88988cc 100644
--- a/x86_64-w64-mingw32/lib/libsendcmsg.a
+++ b/x86_64-w64-mingw32/lib/libsendcmsg.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsendmail.a b/x86_64-w64-mingw32/lib/libsendmail.a
index dfde64d..666076d 100644
--- a/x86_64-w64-mingw32/lib/libsendmail.a
+++ b/x86_64-w64-mingw32/lib/libsendmail.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsens.a b/x86_64-w64-mingw32/lib/libsens.a
index 48208f1..08800de 100644
--- a/x86_64-w64-mingw32/lib/libsens.a
+++ b/x86_64-w64-mingw32/lib/libsens.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsensapi.a b/x86_64-w64-mingw32/lib/libsensapi.a
index dba4a56..8086162 100644
--- a/x86_64-w64-mingw32/lib/libsensapi.a
+++ b/x86_64-w64-mingw32/lib/libsensapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsenscfg.a b/x86_64-w64-mingw32/lib/libsenscfg.a
index 8c67ac6..1af8231 100644
--- a/x86_64-w64-mingw32/lib/libsenscfg.a
+++ b/x86_64-w64-mingw32/lib/libsenscfg.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsensorsapi.a b/x86_64-w64-mingw32/lib/libsensorsapi.a
index ca62080..0fad960 100644
--- a/x86_64-w64-mingw32/lib/libsensorsapi.a
+++ b/x86_64-w64-mingw32/lib/libsensorsapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libseo.a b/x86_64-w64-mingw32/lib/libseo.a
index 47764ca..dbd7b61 100644
--- a/x86_64-w64-mingw32/lib/libseo.a
+++ b/x86_64-w64-mingw32/lib/libseo.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libseos.a b/x86_64-w64-mingw32/lib/libseos.a
index 0640d9c..30c28eb 100644
--- a/x86_64-w64-mingw32/lib/libseos.a
+++ b/x86_64-w64-mingw32/lib/libseos.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libserialui.a b/x86_64-w64-mingw32/lib/libserialui.a
index ba33fc1..27f0bcd 100644
--- a/x86_64-w64-mingw32/lib/libserialui.a
+++ b/x86_64-w64-mingw32/lib/libserialui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libservdeps.a b/x86_64-w64-mingw32/lib/libservdeps.a
index 323c76a..1857ec2 100644
--- a/x86_64-w64-mingw32/lib/libservdeps.a
+++ b/x86_64-w64-mingw32/lib/libservdeps.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libserwvdrv.a b/x86_64-w64-mingw32/lib/libserwvdrv.a
index d6d13d0..24caca5 100644
--- a/x86_64-w64-mingw32/lib/libserwvdrv.a
+++ b/x86_64-w64-mingw32/lib/libserwvdrv.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsetupapi.a b/x86_64-w64-mingw32/lib/libsetupapi.a
index d994ad4..f84b12e 100644
--- a/x86_64-w64-mingw32/lib/libsetupapi.a
+++ b/x86_64-w64-mingw32/lib/libsetupapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsetupqry.a b/x86_64-w64-mingw32/lib/libsetupqry.a
index 3a4423b..088cc99 100644
--- a/x86_64-w64-mingw32/lib/libsetupqry.a
+++ b/x86_64-w64-mingw32/lib/libsetupqry.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsfc.a b/x86_64-w64-mingw32/lib/libsfc.a
index be22353..4400e25 100644
--- a/x86_64-w64-mingw32/lib/libsfc.a
+++ b/x86_64-w64-mingw32/lib/libsfc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsfc_os.a b/x86_64-w64-mingw32/lib/libsfc_os.a
index c38d6aa..bf3d94e 100644
--- a/x86_64-w64-mingw32/lib/libsfc_os.a
+++ b/x86_64-w64-mingw32/lib/libsfc_os.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsfcfiles.a b/x86_64-w64-mingw32/lib/libsfcfiles.a
index 8fa2f14..46f9ab0 100644
--- a/x86_64-w64-mingw32/lib/libsfcfiles.a
+++ b/x86_64-w64-mingw32/lib/libsfcfiles.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsfmapi.a b/x86_64-w64-mingw32/lib/libsfmapi.a
index a44bae6..b675333 100644
--- a/x86_64-w64-mingw32/lib/libsfmapi.a
+++ b/x86_64-w64-mingw32/lib/libsfmapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libshdocvw.a b/x86_64-w64-mingw32/lib/libshdocvw.a
index e2320fd..4d85baf 100644
--- a/x86_64-w64-mingw32/lib/libshdocvw.a
+++ b/x86_64-w64-mingw32/lib/libshdocvw.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libshell32.a b/x86_64-w64-mingw32/lib/libshell32.a
index 971678b..7a45ac4 100644
--- a/x86_64-w64-mingw32/lib/libshell32.a
+++ b/x86_64-w64-mingw32/lib/libshell32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libshfolder.a b/x86_64-w64-mingw32/lib/libshfolder.a
index c41a27d..dad99b0 100644
--- a/x86_64-w64-mingw32/lib/libshfolder.a
+++ b/x86_64-w64-mingw32/lib/libshfolder.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libshgina.a b/x86_64-w64-mingw32/lib/libshgina.a
index 1ae1112..57b2446 100644
--- a/x86_64-w64-mingw32/lib/libshgina.a
+++ b/x86_64-w64-mingw32/lib/libshgina.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libshimeng.a b/x86_64-w64-mingw32/lib/libshimeng.a
index b0c4c4c..784f85c 100644
--- a/x86_64-w64-mingw32/lib/libshimeng.a
+++ b/x86_64-w64-mingw32/lib/libshimeng.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libshimgvw.a b/x86_64-w64-mingw32/lib/libshimgvw.a
index be5af0a..f766ccf 100644
--- a/x86_64-w64-mingw32/lib/libshimgvw.a
+++ b/x86_64-w64-mingw32/lib/libshimgvw.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libshlwapi.a b/x86_64-w64-mingw32/lib/libshlwapi.a
index cbb33ec..0887c4e 100644
--- a/x86_64-w64-mingw32/lib/libshlwapi.a
+++ b/x86_64-w64-mingw32/lib/libshlwapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libshmedia.a b/x86_64-w64-mingw32/lib/libshmedia.a
index 02a68a9..a3a4395 100644
--- a/x86_64-w64-mingw32/lib/libshmedia.a
+++ b/x86_64-w64-mingw32/lib/libshmedia.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libshscrap.a b/x86_64-w64-mingw32/lib/libshscrap.a
index 2bec93f..23a59d0 100644
--- a/x86_64-w64-mingw32/lib/libshscrap.a
+++ b/x86_64-w64-mingw32/lib/libshscrap.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libshsvcs.a b/x86_64-w64-mingw32/lib/libshsvcs.a
index 09f5b67..2446c2e 100644
--- a/x86_64-w64-mingw32/lib/libshsvcs.a
+++ b/x86_64-w64-mingw32/lib/libshsvcs.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsigtab.a b/x86_64-w64-mingw32/lib/libsigtab.a
index fd39671..258ba79 100644
--- a/x86_64-w64-mingw32/lib/libsigtab.a
+++ b/x86_64-w64-mingw32/lib/libsigtab.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsimptcp.a b/x86_64-w64-mingw32/lib/libsimptcp.a
index f1ba1b6..764be0d 100644
--- a/x86_64-w64-mingw32/lib/libsimptcp.a
+++ b/x86_64-w64-mingw32/lib/libsimptcp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsisbkup.a b/x86_64-w64-mingw32/lib/libsisbkup.a
index 7792117..e2c0a5e 100644
--- a/x86_64-w64-mingw32/lib/libsisbkup.a
+++ b/x86_64-w64-mingw32/lib/libsisbkup.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libskdll.a b/x86_64-w64-mingw32/lib/libskdll.a
index 13cd080..3e616a6 100644
--- a/x86_64-w64-mingw32/lib/libskdll.a
+++ b/x86_64-w64-mingw32/lib/libskdll.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libslayerxp.a b/x86_64-w64-mingw32/lib/libslayerxp.a
index da7a114..74525aa 100644
--- a/x86_64-w64-mingw32/lib/libslayerxp.a
+++ b/x86_64-w64-mingw32/lib/libslayerxp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libslbcsp.a b/x86_64-w64-mingw32/lib/libslbcsp.a
index a11d315..f861806 100644
--- a/x86_64-w64-mingw32/lib/libslbcsp.a
+++ b/x86_64-w64-mingw32/lib/libslbcsp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libslbiop.a b/x86_64-w64-mingw32/lib/libslbiop.a
index 9205730..05811f1 100644
--- a/x86_64-w64-mingw32/lib/libslbiop.a
+++ b/x86_64-w64-mingw32/lib/libslbiop.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libslc.a b/x86_64-w64-mingw32/lib/libslc.a
index a6efb6c..3ed4245 100644
--- a/x86_64-w64-mingw32/lib/libslc.a
+++ b/x86_64-w64-mingw32/lib/libslc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libslcext.a b/x86_64-w64-mingw32/lib/libslcext.a
index 9c17200..5529df9 100644
--- a/x86_64-w64-mingw32/lib/libslcext.a
+++ b/x86_64-w64-mingw32/lib/libslcext.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libslwga.a b/x86_64-w64-mingw32/lib/libslwga.a
index dd5fb2f..dde7e17 100644
--- a/x86_64-w64-mingw32/lib/libslwga.a
+++ b/x86_64-w64-mingw32/lib/libslwga.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsmlogcfg.a b/x86_64-w64-mingw32/lib/libsmlogcfg.a
index 8f2a479..23da18d 100644
--- a/x86_64-w64-mingw32/lib/libsmlogcfg.a
+++ b/x86_64-w64-mingw32/lib/libsmlogcfg.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsmtpadm.a b/x86_64-w64-mingw32/lib/libsmtpadm.a
index 48365cf..9d3f26d 100644
--- a/x86_64-w64-mingw32/lib/libsmtpadm.a
+++ b/x86_64-w64-mingw32/lib/libsmtpadm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsmtpapi.a b/x86_64-w64-mingw32/lib/libsmtpapi.a
index ffae585..9d5ca62 100644
--- a/x86_64-w64-mingw32/lib/libsmtpapi.a
+++ b/x86_64-w64-mingw32/lib/libsmtpapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsmtpcons.a b/x86_64-w64-mingw32/lib/libsmtpcons.a
index a183c9c..e1289b2 100644
--- a/x86_64-w64-mingw32/lib/libsmtpcons.a
+++ b/x86_64-w64-mingw32/lib/libsmtpcons.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsmtpctrs.a b/x86_64-w64-mingw32/lib/libsmtpctrs.a
index 16ee878..9c32390 100644
--- a/x86_64-w64-mingw32/lib/libsmtpctrs.a
+++ b/x86_64-w64-mingw32/lib/libsmtpctrs.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsmtpsnap.a b/x86_64-w64-mingw32/lib/libsmtpsnap.a
index fb818ee..c9e49b1 100644
--- a/x86_64-w64-mingw32/lib/libsmtpsnap.a
+++ b/x86_64-w64-mingw32/lib/libsmtpsnap.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsmtpsvc.a b/x86_64-w64-mingw32/lib/libsmtpsvc.a
index ffa828f..1f045d8 100644
--- a/x86_64-w64-mingw32/lib/libsmtpsvc.a
+++ b/x86_64-w64-mingw32/lib/libsmtpsvc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsniffpol.a b/x86_64-w64-mingw32/lib/libsniffpol.a
index d2c89d5..b1f83c0 100644
--- a/x86_64-w64-mingw32/lib/libsniffpol.a
+++ b/x86_64-w64-mingw32/lib/libsniffpol.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsnmpapi.a b/x86_64-w64-mingw32/lib/libsnmpapi.a
index f0778ad..4908f07 100644
--- a/x86_64-w64-mingw32/lib/libsnmpapi.a
+++ b/x86_64-w64-mingw32/lib/libsnmpapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsnmpcl.a b/x86_64-w64-mingw32/lib/libsnmpcl.a
index 6fcd0ce..710eeed 100644
--- a/x86_64-w64-mingw32/lib/libsnmpcl.a
+++ b/x86_64-w64-mingw32/lib/libsnmpcl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsnmpincl.a b/x86_64-w64-mingw32/lib/libsnmpincl.a
index f536892..4a50fa5 100644
--- a/x86_64-w64-mingw32/lib/libsnmpincl.a
+++ b/x86_64-w64-mingw32/lib/libsnmpincl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsnmpmib.a b/x86_64-w64-mingw32/lib/libsnmpmib.a
index f42b922..91e13e0 100644
--- a/x86_64-w64-mingw32/lib/libsnmpmib.a
+++ b/x86_64-w64-mingw32/lib/libsnmpmib.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsnmpsmir.a b/x86_64-w64-mingw32/lib/libsnmpsmir.a
index 3f97bb2..be34bce 100644
--- a/x86_64-w64-mingw32/lib/libsnmpsmir.a
+++ b/x86_64-w64-mingw32/lib/libsnmpsmir.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsnmpsnap.a b/x86_64-w64-mingw32/lib/libsnmpsnap.a
index 81a62b9..6e7c7c3 100644
--- a/x86_64-w64-mingw32/lib/libsnmpsnap.a
+++ b/x86_64-w64-mingw32/lib/libsnmpsnap.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsnmpstup.a b/x86_64-w64-mingw32/lib/libsnmpstup.a
index 20045fe..77d25ae 100644
--- a/x86_64-w64-mingw32/lib/libsnmpstup.a
+++ b/x86_64-w64-mingw32/lib/libsnmpstup.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsnmpthrd.a b/x86_64-w64-mingw32/lib/libsnmpthrd.a
index b5f7cb3..43a89bd 100644
--- a/x86_64-w64-mingw32/lib/libsnmpthrd.a
+++ b/x86_64-w64-mingw32/lib/libsnmpthrd.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsnprfdll.a b/x86_64-w64-mingw32/lib/libsnprfdll.a
index 097d05e..4e7e83e 100644
--- a/x86_64-w64-mingw32/lib/libsnprfdll.a
+++ b/x86_64-w64-mingw32/lib/libsnprfdll.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsoftkbd.a b/x86_64-w64-mingw32/lib/libsoftkbd.a
index a0811e9..e4e7ff0 100644
--- a/x86_64-w64-mingw32/lib/libsoftkbd.a
+++ b/x86_64-w64-mingw32/lib/libsoftkbd.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsoftpub.a b/x86_64-w64-mingw32/lib/libsoftpub.a
index e21b1e9..5cc0b3b 100644
--- a/x86_64-w64-mingw32/lib/libsoftpub.a
+++ b/x86_64-w64-mingw32/lib/libsoftpub.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libspcommon.a b/x86_64-w64-mingw32/lib/libspcommon.a
index e672558..2824f6e 100644
--- a/x86_64-w64-mingw32/lib/libspcommon.a
+++ b/x86_64-w64-mingw32/lib/libspcommon.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libspoolss.a b/x86_64-w64-mingw32/lib/libspoolss.a
index d22df2b..8497a8d 100644
--- a/x86_64-w64-mingw32/lib/libspoolss.a
+++ b/x86_64-w64-mingw32/lib/libspoolss.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsptip.a b/x86_64-w64-mingw32/lib/libsptip.a
index 7df3014..f16121c 100644
--- a/x86_64-w64-mingw32/lib/libsptip.a
+++ b/x86_64-w64-mingw32/lib/libsptip.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libspttseng.a b/x86_64-w64-mingw32/lib/libspttseng.a
index 4a8f152..2434f94 100644
--- a/x86_64-w64-mingw32/lib/libspttseng.a
+++ b/x86_64-w64-mingw32/lib/libspttseng.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsqlsrv32.a b/x86_64-w64-mingw32/lib/libsqlsrv32.a
index c45cffe..0dd494a 100644
--- a/x86_64-w64-mingw32/lib/libsqlsrv32.a
+++ b/x86_64-w64-mingw32/lib/libsqlsrv32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsqlxmlx.a b/x86_64-w64-mingw32/lib/libsqlxmlx.a
index b1871ed..379417d 100644
--- a/x86_64-w64-mingw32/lib/libsqlxmlx.a
+++ b/x86_64-w64-mingw32/lib/libsqlxmlx.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsrchctls.a b/x86_64-w64-mingw32/lib/libsrchctls.a
index 11849d0..dc306fb 100644
--- a/x86_64-w64-mingw32/lib/libsrchctls.a
+++ b/x86_64-w64-mingw32/lib/libsrchctls.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsrchui.a b/x86_64-w64-mingw32/lib/libsrchui.a
index a7eccee..2d49e2b 100644
--- a/x86_64-w64-mingw32/lib/libsrchui.a
+++ b/x86_64-w64-mingw32/lib/libsrchui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsrclient.a b/x86_64-w64-mingw32/lib/libsrclient.a
index c70fc8b..86ccb0f 100644
--- a/x86_64-w64-mingw32/lib/libsrclient.a
+++ b/x86_64-w64-mingw32/lib/libsrclient.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsrrstr.a b/x86_64-w64-mingw32/lib/libsrrstr.a
index 6ee0a82..9e95794 100644
--- a/x86_64-w64-mingw32/lib/libsrrstr.a
+++ b/x86_64-w64-mingw32/lib/libsrrstr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsrsvc.a b/x86_64-w64-mingw32/lib/libsrsvc.a
index f3b0a48..8dd2f40 100644
--- a/x86_64-w64-mingw32/lib/libsrsvc.a
+++ b/x86_64-w64-mingw32/lib/libsrsvc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsrvsvc.a b/x86_64-w64-mingw32/lib/libsrvsvc.a
index 8e548d2..5abebec 100644
--- a/x86_64-w64-mingw32/lib/libsrvsvc.a
+++ b/x86_64-w64-mingw32/lib/libsrvsvc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libssdpapi.a b/x86_64-w64-mingw32/lib/libssdpapi.a
index 029ca23..7bb6132 100644
--- a/x86_64-w64-mingw32/lib/libssdpapi.a
+++ b/x86_64-w64-mingw32/lib/libssdpapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libssdpsrv.a b/x86_64-w64-mingw32/lib/libssdpsrv.a
index 6f527d8..34b19f0 100644
--- a/x86_64-w64-mingw32/lib/libssdpsrv.a
+++ b/x86_64-w64-mingw32/lib/libssdpsrv.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libssinc.a b/x86_64-w64-mingw32/lib/libssinc.a
index f7d17de..42b441c 100644
--- a/x86_64-w64-mingw32/lib/libssinc.a
+++ b/x86_64-w64-mingw32/lib/libssinc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libssp.a b/x86_64-w64-mingw32/lib/libssp.a
index bc768fc..9195190 100644
--- a/x86_64-w64-mingw32/lib/libssp.a
+++ b/x86_64-w64-mingw32/lib/libssp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libssp_nonshared.a b/x86_64-w64-mingw32/lib/libssp_nonshared.a
index d3e6497..2b72960 100644
--- a/x86_64-w64-mingw32/lib/libssp_nonshared.a
+++ b/x86_64-w64-mingw32/lib/libssp_nonshared.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsspicli.a b/x86_64-w64-mingw32/lib/libsspicli.a
index 15428c3..1ef8d47 100644
--- a/x86_64-w64-mingw32/lib/libsspicli.a
+++ b/x86_64-w64-mingw32/lib/libsspicli.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsstub.a b/x86_64-w64-mingw32/lib/libsstub.a
index e32019b..7003092 100644
--- a/x86_64-w64-mingw32/lib/libsstub.a
+++ b/x86_64-w64-mingw32/lib/libsstub.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libstaxmem.a b/x86_64-w64-mingw32/lib/libstaxmem.a
index de67419..913e39e 100644
--- a/x86_64-w64-mingw32/lib/libstaxmem.a
+++ b/x86_64-w64-mingw32/lib/libstaxmem.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libstclient.a b/x86_64-w64-mingw32/lib/libstclient.a
index 63680ca..9f4e3fd 100644
--- a/x86_64-w64-mingw32/lib/libstclient.a
+++ b/x86_64-w64-mingw32/lib/libstclient.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libstdc++.a b/x86_64-w64-mingw32/lib/libstdc++.a
index 44a16c5..9cd0ee2 100644
--- a/x86_64-w64-mingw32/lib/libstdc++.a
+++ b/x86_64-w64-mingw32/lib/libstdc++.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libstdprov.a b/x86_64-w64-mingw32/lib/libstdprov.a
index cac32ce..ac2a271 100644
--- a/x86_64-w64-mingw32/lib/libstdprov.a
+++ b/x86_64-w64-mingw32/lib/libstdprov.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsti.a b/x86_64-w64-mingw32/lib/libsti.a
index 42b6843..3a517d5 100644
--- a/x86_64-w64-mingw32/lib/libsti.a
+++ b/x86_64-w64-mingw32/lib/libsti.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsti_ci.a b/x86_64-w64-mingw32/lib/libsti_ci.a
index a227400..4d8ae5f 100644
--- a/x86_64-w64-mingw32/lib/libsti_ci.a
+++ b/x86_64-w64-mingw32/lib/libsti_ci.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libstobject.a b/x86_64-w64-mingw32/lib/libstobject.a
index ff659a1..0927f0d 100644
--- a/x86_64-w64-mingw32/lib/libstobject.a
+++ b/x86_64-w64-mingw32/lib/libstobject.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libstorprop.a b/x86_64-w64-mingw32/lib/libstorprop.a
index 7c27f97..6c464c9 100644
--- a/x86_64-w64-mingw32/lib/libstorprop.a
+++ b/x86_64-w64-mingw32/lib/libstorprop.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libstreamci.a b/x86_64-w64-mingw32/lib/libstreamci.a
index 430e792..8bdadbf 100644
--- a/x86_64-w64-mingw32/lib/libstreamci.a
+++ b/x86_64-w64-mingw32/lib/libstreamci.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libstrmfilt.a b/x86_64-w64-mingw32/lib/libstrmfilt.a
index b123ca3..9d1c593 100644
--- a/x86_64-w64-mingw32/lib/libstrmfilt.a
+++ b/x86_64-w64-mingw32/lib/libstrmfilt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libstrmiids.a b/x86_64-w64-mingw32/lib/libstrmiids.a
index 1a75a24..2131bf3 100644
--- a/x86_64-w64-mingw32/lib/libstrmiids.a
+++ b/x86_64-w64-mingw32/lib/libstrmiids.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsupc++.a b/x86_64-w64-mingw32/lib/libsupc++.a
index 5ab59a9..d254d60 100644
--- a/x86_64-w64-mingw32/lib/libsupc++.a
+++ b/x86_64-w64-mingw32/lib/libsupc++.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsvcext.a b/x86_64-w64-mingw32/lib/libsvcext.a
index 5aa4376..1162370 100644
--- a/x86_64-w64-mingw32/lib/libsvcext.a
+++ b/x86_64-w64-mingw32/lib/libsvcext.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsvcpack.a b/x86_64-w64-mingw32/lib/libsvcpack.a
index 397cd7d..75227b5 100644
--- a/x86_64-w64-mingw32/lib/libsvcpack.a
+++ b/x86_64-w64-mingw32/lib/libsvcpack.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libswprv.a b/x86_64-w64-mingw32/lib/libswprv.a
index 14e5f85..08ec3bf 100644
--- a/x86_64-w64-mingw32/lib/libswprv.a
+++ b/x86_64-w64-mingw32/lib/libswprv.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsxs.a b/x86_64-w64-mingw32/lib/libsxs.a
index eca7121..c0106bf 100644
--- a/x86_64-w64-mingw32/lib/libsxs.a
+++ b/x86_64-w64-mingw32/lib/libsxs.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsynceng.a b/x86_64-w64-mingw32/lib/libsynceng.a
index 19ae0bd..29db325 100644
--- a/x86_64-w64-mingw32/lib/libsynceng.a
+++ b/x86_64-w64-mingw32/lib/libsynceng.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsyncui.a b/x86_64-w64-mingw32/lib/libsyncui.a
index 29cb7a3..6154583 100644
--- a/x86_64-w64-mingw32/lib/libsyncui.a
+++ b/x86_64-w64-mingw32/lib/libsyncui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsysinv.a b/x86_64-w64-mingw32/lib/libsysinv.a
index 52ee5d3..1efa7e3 100644
--- a/x86_64-w64-mingw32/lib/libsysinv.a
+++ b/x86_64-w64-mingw32/lib/libsysinv.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsysmod.a b/x86_64-w64-mingw32/lib/libsysmod.a
index adc9e37..0b051bd 100644
--- a/x86_64-w64-mingw32/lib/libsysmod.a
+++ b/x86_64-w64-mingw32/lib/libsysmod.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libsyssetup.a b/x86_64-w64-mingw32/lib/libsyssetup.a
index 14c0350..67b305c 100644
--- a/x86_64-w64-mingw32/lib/libsyssetup.a
+++ b/x86_64-w64-mingw32/lib/libsyssetup.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libt2embed.a b/x86_64-w64-mingw32/lib/libt2embed.a
index 3283500..be6f983 100644
--- a/x86_64-w64-mingw32/lib/libt2embed.a
+++ b/x86_64-w64-mingw32/lib/libt2embed.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libtapi3.a b/x86_64-w64-mingw32/lib/libtapi3.a
index 1430d7d..80e1e81 100644
--- a/x86_64-w64-mingw32/lib/libtapi3.a
+++ b/x86_64-w64-mingw32/lib/libtapi3.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libtapi32.a b/x86_64-w64-mingw32/lib/libtapi32.a
index 3536aa2..52b1f8e 100644
--- a/x86_64-w64-mingw32/lib/libtapi32.a
+++ b/x86_64-w64-mingw32/lib/libtapi32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libtapiperf.a b/x86_64-w64-mingw32/lib/libtapiperf.a
index 672b0a4..46ccb3a 100644
--- a/x86_64-w64-mingw32/lib/libtapiperf.a
+++ b/x86_64-w64-mingw32/lib/libtapiperf.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libtapisrv.a b/x86_64-w64-mingw32/lib/libtapisrv.a
index 46dc302..18d3204 100644
--- a/x86_64-w64-mingw32/lib/libtapisrv.a
+++ b/x86_64-w64-mingw32/lib/libtapisrv.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libtbs.a b/x86_64-w64-mingw32/lib/libtbs.a
index 1fbab9d..3493466 100644
--- a/x86_64-w64-mingw32/lib/libtbs.a
+++ b/x86_64-w64-mingw32/lib/libtbs.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libtcpmib.a b/x86_64-w64-mingw32/lib/libtcpmib.a
index 3928cda..48740db 100644
--- a/x86_64-w64-mingw32/lib/libtcpmib.a
+++ b/x86_64-w64-mingw32/lib/libtcpmib.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libtcpmon.a b/x86_64-w64-mingw32/lib/libtcpmon.a
index 2904581..95d3ffb 100644
--- a/x86_64-w64-mingw32/lib/libtcpmon.a
+++ b/x86_64-w64-mingw32/lib/libtcpmon.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libtcpmonui.a b/x86_64-w64-mingw32/lib/libtcpmonui.a
index 7b70fca..6068067 100644
--- a/x86_64-w64-mingw32/lib/libtcpmonui.a
+++ b/x86_64-w64-mingw32/lib/libtcpmonui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libtdh.a b/x86_64-w64-mingw32/lib/libtdh.a
index 7b7005f..8ffa928 100644
--- a/x86_64-w64-mingw32/lib/libtdh.a
+++ b/x86_64-w64-mingw32/lib/libtdh.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libtermmgr.a b/x86_64-w64-mingw32/lib/libtermmgr.a
index 80787bc..9c111c4 100644
--- a/x86_64-w64-mingw32/lib/libtermmgr.a
+++ b/x86_64-w64-mingw32/lib/libtermmgr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libtermsrv.a b/x86_64-w64-mingw32/lib/libtermsrv.a
index e95628e..9d50995 100644
--- a/x86_64-w64-mingw32/lib/libtermsrv.a
+++ b/x86_64-w64-mingw32/lib/libtermsrv.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libthawbrkr.a b/x86_64-w64-mingw32/lib/libthawbrkr.a
index b0ffdf7..43dbffa 100644
--- a/x86_64-w64-mingw32/lib/libthawbrkr.a
+++ b/x86_64-w64-mingw32/lib/libthawbrkr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libthemeui.a b/x86_64-w64-mingw32/lib/libthemeui.a
index 8ba55f1..8ec1036 100644
--- a/x86_64-w64-mingw32/lib/libthemeui.a
+++ b/x86_64-w64-mingw32/lib/libthemeui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libtlntsvrp.a b/x86_64-w64-mingw32/lib/libtlntsvrp.a
index 9f80b29..a7c7fa1 100644
--- a/x86_64-w64-mingw32/lib/libtlntsvrp.a
+++ b/x86_64-w64-mingw32/lib/libtlntsvrp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libtraffic.a b/x86_64-w64-mingw32/lib/libtraffic.a
index 99b55f4..4f66ede 100644
--- a/x86_64-w64-mingw32/lib/libtraffic.a
+++ b/x86_64-w64-mingw32/lib/libtraffic.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libtrialoc.a b/x86_64-w64-mingw32/lib/libtrialoc.a
index 765ed1c..7c26f53 100644
--- a/x86_64-w64-mingw32/lib/libtrialoc.a
+++ b/x86_64-w64-mingw32/lib/libtrialoc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libtrkwks.a b/x86_64-w64-mingw32/lib/libtrkwks.a
index 85022af..9b6a440 100644
--- a/x86_64-w64-mingw32/lib/libtrkwks.a
+++ b/x86_64-w64-mingw32/lib/libtrkwks.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libtsappcmp.a b/x86_64-w64-mingw32/lib/libtsappcmp.a
index 3be294a..f43f95b 100644
--- a/x86_64-w64-mingw32/lib/libtsappcmp.a
+++ b/x86_64-w64-mingw32/lib/libtsappcmp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libtsbyuv.a b/x86_64-w64-mingw32/lib/libtsbyuv.a
index 8e4333f..e9b2418 100644
--- a/x86_64-w64-mingw32/lib/libtsbyuv.a
+++ b/x86_64-w64-mingw32/lib/libtsbyuv.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libtscfgwmi.a b/x86_64-w64-mingw32/lib/libtscfgwmi.a
index f56333c..926fbd0 100644
--- a/x86_64-w64-mingw32/lib/libtscfgwmi.a
+++ b/x86_64-w64-mingw32/lib/libtscfgwmi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libtsd32.a b/x86_64-w64-mingw32/lib/libtsd32.a
index cfdf5a6..ecc5875 100644
--- a/x86_64-w64-mingw32/lib/libtsd32.a
+++ b/x86_64-w64-mingw32/lib/libtsd32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libtshoot.a b/x86_64-w64-mingw32/lib/libtshoot.a
index 0f52236..c3bb009 100644
--- a/x86_64-w64-mingw32/lib/libtshoot.a
+++ b/x86_64-w64-mingw32/lib/libtshoot.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libtsoc.a b/x86_64-w64-mingw32/lib/libtsoc.a
index f2568b5..01c4af6 100644
--- a/x86_64-w64-mingw32/lib/libtsoc.a
+++ b/x86_64-w64-mingw32/lib/libtsoc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libtwext.a b/x86_64-w64-mingw32/lib/libtwext.a
index 8daf84d..c504b42 100644
--- a/x86_64-w64-mingw32/lib/libtwext.a
+++ b/x86_64-w64-mingw32/lib/libtwext.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libtxflog.a b/x86_64-w64-mingw32/lib/libtxflog.a
index 3bf0a3f..957682b 100644
--- a/x86_64-w64-mingw32/lib/libtxflog.a
+++ b/x86_64-w64-mingw32/lib/libtxflog.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libtxfw32.a b/x86_64-w64-mingw32/lib/libtxfw32.a
index 463bfe6..7d53a55 100644
--- a/x86_64-w64-mingw32/lib/libtxfw32.a
+++ b/x86_64-w64-mingw32/lib/libtxfw32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libudhisapi.a b/x86_64-w64-mingw32/lib/libudhisapi.a
index 7076d2c..7b56aa4 100644
--- a/x86_64-w64-mingw32/lib/libudhisapi.a
+++ b/x86_64-w64-mingw32/lib/libudhisapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libufat.a b/x86_64-w64-mingw32/lib/libufat.a
index 87f8b4a..8146c37 100644
--- a/x86_64-w64-mingw32/lib/libufat.a
+++ b/x86_64-w64-mingw32/lib/libufat.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libuihelper.a b/x86_64-w64-mingw32/lib/libuihelper.a
index 4cdf96c..72de5f2 100644
--- a/x86_64-w64-mingw32/lib/libuihelper.a
+++ b/x86_64-w64-mingw32/lib/libuihelper.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libulib.a b/x86_64-w64-mingw32/lib/libulib.a
index d0a865b..58770ef 100644
--- a/x86_64-w64-mingw32/lib/libulib.a
+++ b/x86_64-w64-mingw32/lib/libulib.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libumandlg.a b/x86_64-w64-mingw32/lib/libumandlg.a
index 5f23a4e..1a2b857 100644
--- a/x86_64-w64-mingw32/lib/libumandlg.a
+++ b/x86_64-w64-mingw32/lib/libumandlg.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libumdmxfrm.a b/x86_64-w64-mingw32/lib/libumdmxfrm.a
index 25ed44b..e562f5a 100644
--- a/x86_64-w64-mingw32/lib/libumdmxfrm.a
+++ b/x86_64-w64-mingw32/lib/libumdmxfrm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libumpnpmgr.a b/x86_64-w64-mingw32/lib/libumpnpmgr.a
index c5db4cc..ea323e2 100644
--- a/x86_64-w64-mingw32/lib/libumpnpmgr.a
+++ b/x86_64-w64-mingw32/lib/libumpnpmgr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libuniime.a b/x86_64-w64-mingw32/lib/libuniime.a
index 17f1ac6..ba0de21 100644
--- a/x86_64-w64-mingw32/lib/libuniime.a
+++ b/x86_64-w64-mingw32/lib/libuniime.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libunimdmat.a b/x86_64-w64-mingw32/lib/libunimdmat.a
index 7d5c18d..0f2d857 100644
--- a/x86_64-w64-mingw32/lib/libunimdmat.a
+++ b/x86_64-w64-mingw32/lib/libunimdmat.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libuniplat.a b/x86_64-w64-mingw32/lib/libuniplat.a
index 0d010da..1103982 100644
--- a/x86_64-w64-mingw32/lib/libuniplat.a
+++ b/x86_64-w64-mingw32/lib/libuniplat.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libuntfs.a b/x86_64-w64-mingw32/lib/libuntfs.a
index 4fa5c33..127f3f5 100644
--- a/x86_64-w64-mingw32/lib/libuntfs.a
+++ b/x86_64-w64-mingw32/lib/libuntfs.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libupnp.a b/x86_64-w64-mingw32/lib/libupnp.a
index 4891e9b..9c963ab 100644
--- a/x86_64-w64-mingw32/lib/libupnp.a
+++ b/x86_64-w64-mingw32/lib/libupnp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libupnphost.a b/x86_64-w64-mingw32/lib/libupnphost.a
index ffa04b0..fcfa118 100644
--- a/x86_64-w64-mingw32/lib/libupnphost.a
+++ b/x86_64-w64-mingw32/lib/libupnphost.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libupnpui.a b/x86_64-w64-mingw32/lib/libupnpui.a
index 4d9cc37..19e0df0 100644
--- a/x86_64-w64-mingw32/lib/libupnpui.a
+++ b/x86_64-w64-mingw32/lib/libupnpui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libureg.a b/x86_64-w64-mingw32/lib/libureg.a
index abe329b..73c1e0d 100644
--- a/x86_64-w64-mingw32/lib/libureg.a
+++ b/x86_64-w64-mingw32/lib/libureg.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liburl.a b/x86_64-w64-mingw32/lib/liburl.a
index b7f5124..db861e2 100644
--- a/x86_64-w64-mingw32/lib/liburl.a
+++ b/x86_64-w64-mingw32/lib/liburl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liburlauth.a b/x86_64-w64-mingw32/lib/liburlauth.a
index 36b96de..b93ddfa 100644
--- a/x86_64-w64-mingw32/lib/liburlauth.a
+++ b/x86_64-w64-mingw32/lib/liburlauth.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/liburlmon.a b/x86_64-w64-mingw32/lib/liburlmon.a
index 2b272bc..e78c0b0 100644
--- a/x86_64-w64-mingw32/lib/liburlmon.a
+++ b/x86_64-w64-mingw32/lib/liburlmon.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libusbcamd2.a b/x86_64-w64-mingw32/lib/libusbcamd2.a
index 0b44a66..6b6a6d2 100644
--- a/x86_64-w64-mingw32/lib/libusbcamd2.a
+++ b/x86_64-w64-mingw32/lib/libusbcamd2.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libusbd.a b/x86_64-w64-mingw32/lib/libusbd.a
index 9327372..99183df 100644
--- a/x86_64-w64-mingw32/lib/libusbd.a
+++ b/x86_64-w64-mingw32/lib/libusbd.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libusbmon.a b/x86_64-w64-mingw32/lib/libusbmon.a
index cd19f2c..d9becd5 100644
--- a/x86_64-w64-mingw32/lib/libusbmon.a
+++ b/x86_64-w64-mingw32/lib/libusbmon.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libusbport.a b/x86_64-w64-mingw32/lib/libusbport.a
index 8de311e..89cf2b5 100644
--- a/x86_64-w64-mingw32/lib/libusbport.a
+++ b/x86_64-w64-mingw32/lib/libusbport.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libuser32.a b/x86_64-w64-mingw32/lib/libuser32.a
index 4964609..4c37a00 100644
--- a/x86_64-w64-mingw32/lib/libuser32.a
+++ b/x86_64-w64-mingw32/lib/libuser32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libuserenv.a b/x86_64-w64-mingw32/lib/libuserenv.a
index 3f4b871..fdfc2f1 100644
--- a/x86_64-w64-mingw32/lib/libuserenv.a
+++ b/x86_64-w64-mingw32/lib/libuserenv.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libusp10.a b/x86_64-w64-mingw32/lib/libusp10.a
index fd2061a..1516e75 100644
--- a/x86_64-w64-mingw32/lib/libusp10.a
+++ b/x86_64-w64-mingw32/lib/libusp10.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libutildll.a b/x86_64-w64-mingw32/lib/libutildll.a
index 44dde9e..8c2aa9e 100644
--- a/x86_64-w64-mingw32/lib/libutildll.a
+++ b/x86_64-w64-mingw32/lib/libutildll.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libuuid.a b/x86_64-w64-mingw32/lib/libuuid.a
index 72aa8e0..5da1f76 100644
--- a/x86_64-w64-mingw32/lib/libuuid.a
+++ b/x86_64-w64-mingw32/lib/libuuid.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libuxtheme.a b/x86_64-w64-mingw32/lib/libuxtheme.a
index 19baa94..a3acf07 100644
--- a/x86_64-w64-mingw32/lib/libuxtheme.a
+++ b/x86_64-w64-mingw32/lib/libuxtheme.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libvbscript.a b/x86_64-w64-mingw32/lib/libvbscript.a
index c11e500..f23ce79 100644
--- a/x86_64-w64-mingw32/lib/libvbscript.a
+++ b/x86_64-w64-mingw32/lib/libvbscript.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libvds_ps.a b/x86_64-w64-mingw32/lib/libvds_ps.a
index 8f924ac..806a9f6 100644
--- a/x86_64-w64-mingw32/lib/libvds_ps.a
+++ b/x86_64-w64-mingw32/lib/libvds_ps.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libvdsbas.a b/x86_64-w64-mingw32/lib/libvdsbas.a
index 28951e1..23f39c8 100644
--- a/x86_64-w64-mingw32/lib/libvdsbas.a
+++ b/x86_64-w64-mingw32/lib/libvdsbas.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libvdsdyndr.a b/x86_64-w64-mingw32/lib/libvdsdyndr.a
index 8d1327f..51624a1 100644
--- a/x86_64-w64-mingw32/lib/libvdsdyndr.a
+++ b/x86_64-w64-mingw32/lib/libvdsdyndr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libvdsutil.a b/x86_64-w64-mingw32/lib/libvdsutil.a
index 52108c7..20bbbb1 100644
--- a/x86_64-w64-mingw32/lib/libvdsutil.a
+++ b/x86_64-w64-mingw32/lib/libvdsutil.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libvdswmi.a b/x86_64-w64-mingw32/lib/libvdswmi.a
index fe17b4c..83a3ac7 100644
--- a/x86_64-w64-mingw32/lib/libvdswmi.a
+++ b/x86_64-w64-mingw32/lib/libvdswmi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libverifier.a b/x86_64-w64-mingw32/lib/libverifier.a
index 3ce95df..d5d53d0 100644
--- a/x86_64-w64-mingw32/lib/libverifier.a
+++ b/x86_64-w64-mingw32/lib/libverifier.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libversion.a b/x86_64-w64-mingw32/lib/libversion.a
index 87c3ecb..1a9ef6d 100644
--- a/x86_64-w64-mingw32/lib/libversion.a
+++ b/x86_64-w64-mingw32/lib/libversion.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libvfw32.a b/x86_64-w64-mingw32/lib/libvfw32.a
index 7724bcc..19d7ff8 100644
--- a/x86_64-w64-mingw32/lib/libvfw32.a
+++ b/x86_64-w64-mingw32/lib/libvfw32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libvgx.a b/x86_64-w64-mingw32/lib/libvgx.a
index 660c321..04fa1da 100644
--- a/x86_64-w64-mingw32/lib/libvgx.a
+++ b/x86_64-w64-mingw32/lib/libvgx.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libviewprov.a b/x86_64-w64-mingw32/lib/libviewprov.a
index 5378983..1b542d0 100644
--- a/x86_64-w64-mingw32/lib/libviewprov.a
+++ b/x86_64-w64-mingw32/lib/libviewprov.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libvirtdisk.a b/x86_64-w64-mingw32/lib/libvirtdisk.a
new file mode 100644
index 0000000..af81854
--- /dev/null
+++ b/x86_64-w64-mingw32/lib/libvirtdisk.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libvmx_mode.a b/x86_64-w64-mingw32/lib/libvmx_mode.a
index e02361e..6a7a57d 100644
--- a/x86_64-w64-mingw32/lib/libvmx_mode.a
+++ b/x86_64-w64-mingw32/lib/libvmx_mode.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libvss_ps.a b/x86_64-w64-mingw32/lib/libvss_ps.a
index 0886cea..215a4de 100644
--- a/x86_64-w64-mingw32/lib/libvss_ps.a
+++ b/x86_64-w64-mingw32/lib/libvss_ps.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libvssapi.a b/x86_64-w64-mingw32/lib/libvssapi.a
index a36e8e1..98017dc 100644
--- a/x86_64-w64-mingw32/lib/libvssapi.a
+++ b/x86_64-w64-mingw32/lib/libvssapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libvsstrace.a b/x86_64-w64-mingw32/lib/libvsstrace.a
index 3520018..26f445a 100644
--- a/x86_64-w64-mingw32/lib/libvsstrace.a
+++ b/x86_64-w64-mingw32/lib/libvsstrace.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libvsswmi.a b/x86_64-w64-mingw32/lib/libvsswmi.a
index 5d7182e..b32434b 100644
--- a/x86_64-w64-mingw32/lib/libvsswmi.a
+++ b/x86_64-w64-mingw32/lib/libvsswmi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libw32time.a b/x86_64-w64-mingw32/lib/libw32time.a
index f0d095a..de2ee59 100644
--- a/x86_64-w64-mingw32/lib/libw32time.a
+++ b/x86_64-w64-mingw32/lib/libw32time.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libw32topl.a b/x86_64-w64-mingw32/lib/libw32topl.a
index 7eb6b56..d94d728 100644
--- a/x86_64-w64-mingw32/lib/libw32topl.a
+++ b/x86_64-w64-mingw32/lib/libw32topl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libw3cache.a b/x86_64-w64-mingw32/lib/libw3cache.a
index c780c0b..adbb854 100644
--- a/x86_64-w64-mingw32/lib/libw3cache.a
+++ b/x86_64-w64-mingw32/lib/libw3cache.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libw3comlog.a b/x86_64-w64-mingw32/lib/libw3comlog.a
index 8695bca..9c2b3bd 100644
--- a/x86_64-w64-mingw32/lib/libw3comlog.a
+++ b/x86_64-w64-mingw32/lib/libw3comlog.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libw3core.a b/x86_64-w64-mingw32/lib/libw3core.a
index c413084..281aef8 100644
--- a/x86_64-w64-mingw32/lib/libw3core.a
+++ b/x86_64-w64-mingw32/lib/libw3core.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libw3ctrlps.a b/x86_64-w64-mingw32/lib/libw3ctrlps.a
index 452f075..69a21f1 100644
--- a/x86_64-w64-mingw32/lib/libw3ctrlps.a
+++ b/x86_64-w64-mingw32/lib/libw3ctrlps.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libw3ctrs.a b/x86_64-w64-mingw32/lib/libw3ctrs.a
index 735b99f..ca66160 100644
--- a/x86_64-w64-mingw32/lib/libw3ctrs.a
+++ b/x86_64-w64-mingw32/lib/libw3ctrs.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libw3dt.a b/x86_64-w64-mingw32/lib/libw3dt.a
index c205065..6e3d9ac 100644
--- a/x86_64-w64-mingw32/lib/libw3dt.a
+++ b/x86_64-w64-mingw32/lib/libw3dt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libw3ext.a b/x86_64-w64-mingw32/lib/libw3ext.a
index 3c3d5b6..e68dc55 100644
--- a/x86_64-w64-mingw32/lib/libw3ext.a
+++ b/x86_64-w64-mingw32/lib/libw3ext.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libw3isapi.a b/x86_64-w64-mingw32/lib/libw3isapi.a
index 6d6a501..aef0d11 100644
--- a/x86_64-w64-mingw32/lib/libw3isapi.a
+++ b/x86_64-w64-mingw32/lib/libw3isapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libw3ssl.a b/x86_64-w64-mingw32/lib/libw3ssl.a
index 8e773ff..d7d99a8 100644
--- a/x86_64-w64-mingw32/lib/libw3ssl.a
+++ b/x86_64-w64-mingw32/lib/libw3ssl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libw3tp.a b/x86_64-w64-mingw32/lib/libw3tp.a
index 1ff0b1a..8c9ab12 100644
--- a/x86_64-w64-mingw32/lib/libw3tp.a
+++ b/x86_64-w64-mingw32/lib/libw3tp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwab32.a b/x86_64-w64-mingw32/lib/libwab32.a
index 5426b94..26a2f79 100644
--- a/x86_64-w64-mingw32/lib/libwab32.a
+++ b/x86_64-w64-mingw32/lib/libwab32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwabimp.a b/x86_64-w64-mingw32/lib/libwabimp.a
index 138ba1a..5d856e6 100644
--- a/x86_64-w64-mingw32/lib/libwabimp.a
+++ b/x86_64-w64-mingw32/lib/libwabimp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwamreg.a b/x86_64-w64-mingw32/lib/libwamreg.a
index b5f62f0..1947a84 100644
--- a/x86_64-w64-mingw32/lib/libwamreg.a
+++ b/x86_64-w64-mingw32/lib/libwamreg.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwamregps.a b/x86_64-w64-mingw32/lib/libwamregps.a
index d3ed740..44fac14 100644
--- a/x86_64-w64-mingw32/lib/libwamregps.a
+++ b/x86_64-w64-mingw32/lib/libwamregps.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwbemcore.a b/x86_64-w64-mingw32/lib/libwbemcore.a
index 00d48dd..95eabc0 100644
--- a/x86_64-w64-mingw32/lib/libwbemcore.a
+++ b/x86_64-w64-mingw32/lib/libwbemcore.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwbemupgd.a b/x86_64-w64-mingw32/lib/libwbemupgd.a
index ac879f9..3470874 100644
--- a/x86_64-w64-mingw32/lib/libwbemupgd.a
+++ b/x86_64-w64-mingw32/lib/libwbemupgd.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwbemuuid.a b/x86_64-w64-mingw32/lib/libwbemuuid.a
index 75745f3..f19a738 100644
--- a/x86_64-w64-mingw32/lib/libwbemuuid.a
+++ b/x86_64-w64-mingw32/lib/libwbemuuid.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwdigest.a b/x86_64-w64-mingw32/lib/libwdigest.a
index 074e14f..484dd31 100644
--- a/x86_64-w64-mingw32/lib/libwdigest.a
+++ b/x86_64-w64-mingw32/lib/libwdigest.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwdmaud.a b/x86_64-w64-mingw32/lib/libwdmaud.a
index 8a4897e..7d79c62 100644
--- a/x86_64-w64-mingw32/lib/libwdmaud.a
+++ b/x86_64-w64-mingw32/lib/libwdmaud.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwdsclient.a b/x86_64-w64-mingw32/lib/libwdsclient.a
index 73b693a..9189d61 100644
--- a/x86_64-w64-mingw32/lib/libwdsclient.a
+++ b/x86_64-w64-mingw32/lib/libwdsclient.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwdsclientapi.a b/x86_64-w64-mingw32/lib/libwdsclientapi.a
index 8621f3b..e12a603 100644
--- a/x86_64-w64-mingw32/lib/libwdsclientapi.a
+++ b/x86_64-w64-mingw32/lib/libwdsclientapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwdscore.a b/x86_64-w64-mingw32/lib/libwdscore.a
index 037470c..be936be 100644
--- a/x86_64-w64-mingw32/lib/libwdscore.a
+++ b/x86_64-w64-mingw32/lib/libwdscore.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwdscsl.a b/x86_64-w64-mingw32/lib/libwdscsl.a
index 5525c81..65e558f 100644
--- a/x86_64-w64-mingw32/lib/libwdscsl.a
+++ b/x86_64-w64-mingw32/lib/libwdscsl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwdsimage.a b/x86_64-w64-mingw32/lib/libwdsimage.a
index 3ad2c18..22a548e 100644
--- a/x86_64-w64-mingw32/lib/libwdsimage.a
+++ b/x86_64-w64-mingw32/lib/libwdsimage.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwdstptc.a b/x86_64-w64-mingw32/lib/libwdstptc.a
index 62273ce..40c8536 100644
--- a/x86_64-w64-mingw32/lib/libwdstptc.a
+++ b/x86_64-w64-mingw32/lib/libwdstptc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwdsupgcompl.a b/x86_64-w64-mingw32/lib/libwdsupgcompl.a
index ae39b68..0475fb2 100644
--- a/x86_64-w64-mingw32/lib/libwdsupgcompl.a
+++ b/x86_64-w64-mingw32/lib/libwdsupgcompl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwdsutil.a b/x86_64-w64-mingw32/lib/libwdsutil.a
index 484bb36..c5042da 100644
--- a/x86_64-w64-mingw32/lib/libwdsutil.a
+++ b/x86_64-w64-mingw32/lib/libwdsutil.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwebcheck.a b/x86_64-w64-mingw32/lib/libwebcheck.a
index 6f4f10d..3604d4b 100644
--- a/x86_64-w64-mingw32/lib/libwebcheck.a
+++ b/x86_64-w64-mingw32/lib/libwebcheck.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwebclnt.a b/x86_64-w64-mingw32/lib/libwebclnt.a
index b849af8..406da1d 100644
--- a/x86_64-w64-mingw32/lib/libwebclnt.a
+++ b/x86_64-w64-mingw32/lib/libwebclnt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwebhits.a b/x86_64-w64-mingw32/lib/libwebhits.a
index f1bf882..25b834a 100644
--- a/x86_64-w64-mingw32/lib/libwebhits.a
+++ b/x86_64-w64-mingw32/lib/libwebhits.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwecapi.a b/x86_64-w64-mingw32/lib/libwecapi.a
index d7a8695..702645b 100644
--- a/x86_64-w64-mingw32/lib/libwecapi.a
+++ b/x86_64-w64-mingw32/lib/libwecapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwer.a b/x86_64-w64-mingw32/lib/libwer.a
index 1f020c8..e7fe750 100644
--- a/x86_64-w64-mingw32/lib/libwer.a
+++ b/x86_64-w64-mingw32/lib/libwer.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwevtapi.a b/x86_64-w64-mingw32/lib/libwevtapi.a
index f0eb2f8..e94b12d 100644
--- a/x86_64-w64-mingw32/lib/libwevtapi.a
+++ b/x86_64-w64-mingw32/lib/libwevtapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwevtfwd.a b/x86_64-w64-mingw32/lib/libwevtfwd.a
index 9b87378..fe35d4d 100644
--- a/x86_64-w64-mingw32/lib/libwevtfwd.a
+++ b/x86_64-w64-mingw32/lib/libwevtfwd.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwiadss.a b/x86_64-w64-mingw32/lib/libwiadss.a
index 3c5803b..7f5c2dd 100644
--- a/x86_64-w64-mingw32/lib/libwiadss.a
+++ b/x86_64-w64-mingw32/lib/libwiadss.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwiarpc.a b/x86_64-w64-mingw32/lib/libwiarpc.a
index 970586e..9cf6d85 100644
--- a/x86_64-w64-mingw32/lib/libwiarpc.a
+++ b/x86_64-w64-mingw32/lib/libwiarpc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwiaservc.a b/x86_64-w64-mingw32/lib/libwiaservc.a
index 02bb228..fe60fd3 100644
--- a/x86_64-w64-mingw32/lib/libwiaservc.a
+++ b/x86_64-w64-mingw32/lib/libwiaservc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwiashext.a b/x86_64-w64-mingw32/lib/libwiashext.a
index f8caceb..e133e75 100644
--- a/x86_64-w64-mingw32/lib/libwiashext.a
+++ b/x86_64-w64-mingw32/lib/libwiashext.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwin32spl.a b/x86_64-w64-mingw32/lib/libwin32spl.a
index d9b4a50..0429aa9 100644
--- a/x86_64-w64-mingw32/lib/libwin32spl.a
+++ b/x86_64-w64-mingw32/lib/libwin32spl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwindowscodecs.a b/x86_64-w64-mingw32/lib/libwindowscodecs.a
index e6eed3d..da91199 100644
--- a/x86_64-w64-mingw32/lib/libwindowscodecs.a
+++ b/x86_64-w64-mingw32/lib/libwindowscodecs.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwinfax.a b/x86_64-w64-mingw32/lib/libwinfax.a
index 63999a7..2b756f4 100644
--- a/x86_64-w64-mingw32/lib/libwinfax.a
+++ b/x86_64-w64-mingw32/lib/libwinfax.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwinhttp.a b/x86_64-w64-mingw32/lib/libwinhttp.a
index 9959482..7a58e7d 100644
--- a/x86_64-w64-mingw32/lib/libwinhttp.a
+++ b/x86_64-w64-mingw32/lib/libwinhttp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwininet.a b/x86_64-w64-mingw32/lib/libwininet.a
index 3cf53cd..6614014 100644
--- a/x86_64-w64-mingw32/lib/libwininet.a
+++ b/x86_64-w64-mingw32/lib/libwininet.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwinipsec.a b/x86_64-w64-mingw32/lib/libwinipsec.a
index 3e16a34..1521287 100644
--- a/x86_64-w64-mingw32/lib/libwinipsec.a
+++ b/x86_64-w64-mingw32/lib/libwinipsec.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwinmm.a b/x86_64-w64-mingw32/lib/libwinmm.a
index 0e89ad3..ae973a5 100644
--- a/x86_64-w64-mingw32/lib/libwinmm.a
+++ b/x86_64-w64-mingw32/lib/libwinmm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwinpthread.a b/x86_64-w64-mingw32/lib/libwinpthread.a
index 77d7159..0190720 100644
--- a/x86_64-w64-mingw32/lib/libwinpthread.a
+++ b/x86_64-w64-mingw32/lib/libwinpthread.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwinpthread.dll.a b/x86_64-w64-mingw32/lib/libwinpthread.dll.a
index 70eb213..07a101d 100755
--- a/x86_64-w64-mingw32/lib/libwinpthread.dll.a
+++ b/x86_64-w64-mingw32/lib/libwinpthread.dll.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwinrnr.a b/x86_64-w64-mingw32/lib/libwinrnr.a
index e84c48a..361dc8b 100644
--- a/x86_64-w64-mingw32/lib/libwinrnr.a
+++ b/x86_64-w64-mingw32/lib/libwinrnr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwinscard.a b/x86_64-w64-mingw32/lib/libwinscard.a
index fa7a6c8..fff3448 100644
--- a/x86_64-w64-mingw32/lib/libwinscard.a
+++ b/x86_64-w64-mingw32/lib/libwinscard.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwinspool.a b/x86_64-w64-mingw32/lib/libwinspool.a
index 011c46d..669b366 100644
--- a/x86_64-w64-mingw32/lib/libwinspool.a
+++ b/x86_64-w64-mingw32/lib/libwinspool.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwinsrv.a b/x86_64-w64-mingw32/lib/libwinsrv.a
index 82d13f7..ed36cfc 100644
--- a/x86_64-w64-mingw32/lib/libwinsrv.a
+++ b/x86_64-w64-mingw32/lib/libwinsrv.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwinsta.a b/x86_64-w64-mingw32/lib/libwinsta.a
index 33a2e78..b74f110 100644
--- a/x86_64-w64-mingw32/lib/libwinsta.a
+++ b/x86_64-w64-mingw32/lib/libwinsta.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwintrust.a b/x86_64-w64-mingw32/lib/libwintrust.a
index 7d537bc..8ce309b 100644
--- a/x86_64-w64-mingw32/lib/libwintrust.a
+++ b/x86_64-w64-mingw32/lib/libwintrust.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwinusb.a b/x86_64-w64-mingw32/lib/libwinusb.a
index 489e559..107a044 100644
--- a/x86_64-w64-mingw32/lib/libwinusb.a
+++ b/x86_64-w64-mingw32/lib/libwinusb.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwkssvc.a b/x86_64-w64-mingw32/lib/libwkssvc.a
index 55d00bb..bb5c478 100644
--- a/x86_64-w64-mingw32/lib/libwkssvc.a
+++ b/x86_64-w64-mingw32/lib/libwkssvc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwlanapi.a b/x86_64-w64-mingw32/lib/libwlanapi.a
index 30de1bf..11b6de9 100644
--- a/x86_64-w64-mingw32/lib/libwlanapi.a
+++ b/x86_64-w64-mingw32/lib/libwlanapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwlanui.a b/x86_64-w64-mingw32/lib/libwlanui.a
index 989e9d1..4bf0e04 100644
--- a/x86_64-w64-mingw32/lib/libwlanui.a
+++ b/x86_64-w64-mingw32/lib/libwlanui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwlanutil.a b/x86_64-w64-mingw32/lib/libwlanutil.a
index 074fdde..a7d76a7 100644
--- a/x86_64-w64-mingw32/lib/libwlanutil.a
+++ b/x86_64-w64-mingw32/lib/libwlanutil.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwldap32.a b/x86_64-w64-mingw32/lib/libwldap32.a
index ae8df01..ef1b368 100644
--- a/x86_64-w64-mingw32/lib/libwldap32.a
+++ b/x86_64-w64-mingw32/lib/libwldap32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwlnotify.a b/x86_64-w64-mingw32/lib/libwlnotify.a
index 4435273..a1aa8e4 100644
--- a/x86_64-w64-mingw32/lib/libwlnotify.a
+++ b/x86_64-w64-mingw32/lib/libwlnotify.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwlstore.a b/x86_64-w64-mingw32/lib/libwlstore.a
index 28abda4..c480212 100644
--- a/x86_64-w64-mingw32/lib/libwlstore.a
+++ b/x86_64-w64-mingw32/lib/libwlstore.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwmcodecdspuuid.a b/x86_64-w64-mingw32/lib/libwmcodecdspuuid.a
index ba8db1a..8eba101 100644
--- a/x86_64-w64-mingw32/lib/libwmcodecdspuuid.a
+++ b/x86_64-w64-mingw32/lib/libwmcodecdspuuid.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwmi.a b/x86_64-w64-mingw32/lib/libwmi.a
index 2f20d1a..e9eb9fe 100644
--- a/x86_64-w64-mingw32/lib/libwmi.a
+++ b/x86_64-w64-mingw32/lib/libwmi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwmi2xml.a b/x86_64-w64-mingw32/lib/libwmi2xml.a
index 01c61bd..dd838f2 100644
--- a/x86_64-w64-mingw32/lib/libwmi2xml.a
+++ b/x86_64-w64-mingw32/lib/libwmi2xml.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwmiaprpl.a b/x86_64-w64-mingw32/lib/libwmiaprpl.a
index f70d744..cbac0a6 100644
--- a/x86_64-w64-mingw32/lib/libwmiaprpl.a
+++ b/x86_64-w64-mingw32/lib/libwmiaprpl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwmilib.a b/x86_64-w64-mingw32/lib/libwmilib.a
index 79d7894..0ba8e4f 100644
--- a/x86_64-w64-mingw32/lib/libwmilib.a
+++ b/x86_64-w64-mingw32/lib/libwmilib.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwmiprop.a b/x86_64-w64-mingw32/lib/libwmiprop.a
index f52b615..ea029c4 100644
--- a/x86_64-w64-mingw32/lib/libwmiprop.a
+++ b/x86_64-w64-mingw32/lib/libwmiprop.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwmisvc.a b/x86_64-w64-mingw32/lib/libwmisvc.a
index 5477c0f..8d9ae14 100644
--- a/x86_64-w64-mingw32/lib/libwmisvc.a
+++ b/x86_64-w64-mingw32/lib/libwmisvc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwow64.a b/x86_64-w64-mingw32/lib/libwow64.a
index e7e9fcd..fb5f69b 100644
--- a/x86_64-w64-mingw32/lib/libwow64.a
+++ b/x86_64-w64-mingw32/lib/libwow64.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwow64cpu.a b/x86_64-w64-mingw32/lib/libwow64cpu.a
index 741c770..0a1b15d 100644
--- a/x86_64-w64-mingw32/lib/libwow64cpu.a
+++ b/x86_64-w64-mingw32/lib/libwow64cpu.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwow64mib.a b/x86_64-w64-mingw32/lib/libwow64mib.a
index 9bcdf5e..a5d56bf 100644
--- a/x86_64-w64-mingw32/lib/libwow64mib.a
+++ b/x86_64-w64-mingw32/lib/libwow64mib.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwow64win.a b/x86_64-w64-mingw32/lib/libwow64win.a
index 71662d7..31e30fc 100644
--- a/x86_64-w64-mingw32/lib/libwow64win.a
+++ b/x86_64-w64-mingw32/lib/libwow64win.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwpd_ci.a b/x86_64-w64-mingw32/lib/libwpd_ci.a
index e183295..a4c3e46 100644
--- a/x86_64-w64-mingw32/lib/libwpd_ci.a
+++ b/x86_64-w64-mingw32/lib/libwpd_ci.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libws2_32.a b/x86_64-w64-mingw32/lib/libws2_32.a
index c294f2b..72371df 100644
--- a/x86_64-w64-mingw32/lib/libws2_32.a
+++ b/x86_64-w64-mingw32/lib/libws2_32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libws2help.a b/x86_64-w64-mingw32/lib/libws2help.a
index dc220d0..9fd56f7 100644
--- a/x86_64-w64-mingw32/lib/libws2help.a
+++ b/x86_64-w64-mingw32/lib/libws2help.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwscsvc.a b/x86_64-w64-mingw32/lib/libwscsvc.a
index e2700f7..ad1a516 100644
--- a/x86_64-w64-mingw32/lib/libwscsvc.a
+++ b/x86_64-w64-mingw32/lib/libwscsvc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwsdapi.a b/x86_64-w64-mingw32/lib/libwsdapi.a
index c2f1adb..8e977e1 100644
--- a/x86_64-w64-mingw32/lib/libwsdapi.a
+++ b/x86_64-w64-mingw32/lib/libwsdapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwshatm.a b/x86_64-w64-mingw32/lib/libwshatm.a
index fc5f9ab..93b6f37 100644
--- a/x86_64-w64-mingw32/lib/libwshatm.a
+++ b/x86_64-w64-mingw32/lib/libwshatm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwshbth.a b/x86_64-w64-mingw32/lib/libwshbth.a
index 343a73e..3705334 100644
--- a/x86_64-w64-mingw32/lib/libwshbth.a
+++ b/x86_64-w64-mingw32/lib/libwshbth.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwshcon.a b/x86_64-w64-mingw32/lib/libwshcon.a
index 79f721c..6059afe 100644
--- a/x86_64-w64-mingw32/lib/libwshcon.a
+++ b/x86_64-w64-mingw32/lib/libwshcon.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwsock32.a b/x86_64-w64-mingw32/lib/libwsock32.a
index 088ae4a..0ad470d 100644
--- a/x86_64-w64-mingw32/lib/libwsock32.a
+++ b/x86_64-w64-mingw32/lib/libwsock32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libwtsapi32.a b/x86_64-w64-mingw32/lib/libwtsapi32.a
index e046e91..52a9221 100644
--- a/x86_64-w64-mingw32/lib/libwtsapi32.a
+++ b/x86_64-w64-mingw32/lib/libwtsapi32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libx3daudio.a b/x86_64-w64-mingw32/lib/libx3daudio.a
index 4b4a1b8..0771f9c 100644
--- a/x86_64-w64-mingw32/lib/libx3daudio.a
+++ b/x86_64-w64-mingw32/lib/libx3daudio.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libx3daudio1_2.a b/x86_64-w64-mingw32/lib/libx3daudio1_2.a
index 7d3fb29..e65a302 100644
--- a/x86_64-w64-mingw32/lib/libx3daudio1_2.a
+++ b/x86_64-w64-mingw32/lib/libx3daudio1_2.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libx3daudio1_3.a b/x86_64-w64-mingw32/lib/libx3daudio1_3.a
index fffb750..d991977 100644
--- a/x86_64-w64-mingw32/lib/libx3daudio1_3.a
+++ b/x86_64-w64-mingw32/lib/libx3daudio1_3.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libx3daudio1_4.a b/x86_64-w64-mingw32/lib/libx3daudio1_4.a
index 38f85e7..2f6c96e 100644
--- a/x86_64-w64-mingw32/lib/libx3daudio1_4.a
+++ b/x86_64-w64-mingw32/lib/libx3daudio1_4.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libx3daudio1_5.a b/x86_64-w64-mingw32/lib/libx3daudio1_5.a
index 5cd3566..11c0d61 100644
--- a/x86_64-w64-mingw32/lib/libx3daudio1_5.a
+++ b/x86_64-w64-mingw32/lib/libx3daudio1_5.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libx3daudio1_6.a b/x86_64-w64-mingw32/lib/libx3daudio1_6.a
index c8c3e34..5cc9027 100644
--- a/x86_64-w64-mingw32/lib/libx3daudio1_6.a
+++ b/x86_64-w64-mingw32/lib/libx3daudio1_6.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libx3daudio1_7.a b/x86_64-w64-mingw32/lib/libx3daudio1_7.a
index bace563..4dc7999 100644
--- a/x86_64-w64-mingw32/lib/libx3daudio1_7.a
+++ b/x86_64-w64-mingw32/lib/libx3daudio1_7.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libx3daudiod1_7.a b/x86_64-w64-mingw32/lib/libx3daudiod1_7.a
index efebf4c..3d83971 100644
--- a/x86_64-w64-mingw32/lib/libx3daudiod1_7.a
+++ b/x86_64-w64-mingw32/lib/libx3daudiod1_7.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libxapofx.a b/x86_64-w64-mingw32/lib/libxapofx.a
index ab26cfd..ff0bdc5 100644
--- a/x86_64-w64-mingw32/lib/libxapofx.a
+++ b/x86_64-w64-mingw32/lib/libxapofx.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libxapofx1_0.a b/x86_64-w64-mingw32/lib/libxapofx1_0.a
index deba65f..e5ae237 100644
--- a/x86_64-w64-mingw32/lib/libxapofx1_0.a
+++ b/x86_64-w64-mingw32/lib/libxapofx1_0.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libxapofx1_1.a b/x86_64-w64-mingw32/lib/libxapofx1_1.a
index b5655d3..e578391 100644
--- a/x86_64-w64-mingw32/lib/libxapofx1_1.a
+++ b/x86_64-w64-mingw32/lib/libxapofx1_1.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libxapofx1_2.a b/x86_64-w64-mingw32/lib/libxapofx1_2.a
index c666c6a..24a0cb9 100644
--- a/x86_64-w64-mingw32/lib/libxapofx1_2.a
+++ b/x86_64-w64-mingw32/lib/libxapofx1_2.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libxapofx1_3.a b/x86_64-w64-mingw32/lib/libxapofx1_3.a
index 59c1d00..8f009ed 100644
--- a/x86_64-w64-mingw32/lib/libxapofx1_3.a
+++ b/x86_64-w64-mingw32/lib/libxapofx1_3.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libxapofx1_4.a b/x86_64-w64-mingw32/lib/libxapofx1_4.a
index 3730e9c..3c0098f 100644
--- a/x86_64-w64-mingw32/lib/libxapofx1_4.a
+++ b/x86_64-w64-mingw32/lib/libxapofx1_4.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libxapofx1_5.a b/x86_64-w64-mingw32/lib/libxapofx1_5.a
index f28c6a8..233b5f0 100644
--- a/x86_64-w64-mingw32/lib/libxapofx1_5.a
+++ b/x86_64-w64-mingw32/lib/libxapofx1_5.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libxapofxd1_5.a b/x86_64-w64-mingw32/lib/libxapofxd1_5.a
index b31806b..5cf888f 100644
--- a/x86_64-w64-mingw32/lib/libxapofxd1_5.a
+++ b/x86_64-w64-mingw32/lib/libxapofxd1_5.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libxaudio2_8.a b/x86_64-w64-mingw32/lib/libxaudio2_8.a
index 4f0efd9..d224738 100644
--- a/x86_64-w64-mingw32/lib/libxaudio2_8.a
+++ b/x86_64-w64-mingw32/lib/libxaudio2_8.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libxinput.a b/x86_64-w64-mingw32/lib/libxinput.a
index 288f4d3..a577cd8 100644
--- a/x86_64-w64-mingw32/lib/libxinput.a
+++ b/x86_64-w64-mingw32/lib/libxinput.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libxinput1_1.a b/x86_64-w64-mingw32/lib/libxinput1_1.a
index f404cf4..7f2825b 100644
--- a/x86_64-w64-mingw32/lib/libxinput1_1.a
+++ b/x86_64-w64-mingw32/lib/libxinput1_1.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libxinput1_2.a b/x86_64-w64-mingw32/lib/libxinput1_2.a
index a5f650f..e23f870 100644
--- a/x86_64-w64-mingw32/lib/libxinput1_2.a
+++ b/x86_64-w64-mingw32/lib/libxinput1_2.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libxinput1_3.a b/x86_64-w64-mingw32/lib/libxinput1_3.a
index 3ed6f5c..2dc5e16 100644
--- a/x86_64-w64-mingw32/lib/libxinput1_3.a
+++ b/x86_64-w64-mingw32/lib/libxinput1_3.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libxinput1_4.a b/x86_64-w64-mingw32/lib/libxinput1_4.a
index 3f46463..7ea42fe 100644
--- a/x86_64-w64-mingw32/lib/libxinput1_4.a
+++ b/x86_64-w64-mingw32/lib/libxinput1_4.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libxinput9_1_0.a b/x86_64-w64-mingw32/lib/libxinput9_1_0.a
index bbb4c5b..7628874 100644
--- a/x86_64-w64-mingw32/lib/libxinput9_1_0.a
+++ b/x86_64-w64-mingw32/lib/libxinput9_1_0.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/libzoneoc.a b/x86_64-w64-mingw32/lib/libzoneoc.a
index e9a30c3..c5ef9dd 100644
--- a/x86_64-w64-mingw32/lib/libzoneoc.a
+++ b/x86_64-w64-mingw32/lib/libzoneoc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib/txtmode.o b/x86_64-w64-mingw32/lib/txtmode.o
index b431f0f..2b42b00 100644
--- a/x86_64-w64-mingw32/lib/txtmode.o
+++ b/x86_64-w64-mingw32/lib/txtmode.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/CRT_fp10.o b/x86_64-w64-mingw32/lib32/CRT_fp10.o
index 1883365..55072df 100644
--- a/x86_64-w64-mingw32/lib32/CRT_fp10.o
+++ b/x86_64-w64-mingw32/lib32/CRT_fp10.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/CRT_fp8.o b/x86_64-w64-mingw32/lib32/CRT_fp8.o
index 8ac1f59..1153dad 100644
--- a/x86_64-w64-mingw32/lib32/CRT_fp8.o
+++ b/x86_64-w64-mingw32/lib32/CRT_fp8.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/CRT_glob.o b/x86_64-w64-mingw32/lib32/CRT_glob.o
index ae68c6b..f04c685 100644
--- a/x86_64-w64-mingw32/lib32/CRT_glob.o
+++ b/x86_64-w64-mingw32/lib32/CRT_glob.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/CRT_noglob.o b/x86_64-w64-mingw32/lib32/CRT_noglob.o
index 04c9065..b6de955 100644
--- a/x86_64-w64-mingw32/lib32/CRT_noglob.o
+++ b/x86_64-w64-mingw32/lib32/CRT_noglob.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/binmode.o b/x86_64-w64-mingw32/lib32/binmode.o
index 8f42e53..e51a3d2 100644
--- a/x86_64-w64-mingw32/lib32/binmode.o
+++ b/x86_64-w64-mingw32/lib32/binmode.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/crt1.o b/x86_64-w64-mingw32/lib32/crt1.o
index 4cfed49..1bcfbd0 100644
--- a/x86_64-w64-mingw32/lib32/crt1.o
+++ b/x86_64-w64-mingw32/lib32/crt1.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/crt1u.o b/x86_64-w64-mingw32/lib32/crt1u.o
index 1c8c957..04b4ee7 100644
--- a/x86_64-w64-mingw32/lib32/crt1u.o
+++ b/x86_64-w64-mingw32/lib32/crt1u.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/crt2.o b/x86_64-w64-mingw32/lib32/crt2.o
index 4cfed49..1bcfbd0 100644
--- a/x86_64-w64-mingw32/lib32/crt2.o
+++ b/x86_64-w64-mingw32/lib32/crt2.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/crt2u.o b/x86_64-w64-mingw32/lib32/crt2u.o
index 1c8c957..04b4ee7 100644
--- a/x86_64-w64-mingw32/lib32/crt2u.o
+++ b/x86_64-w64-mingw32/lib32/crt2u.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/dllcrt1.o b/x86_64-w64-mingw32/lib32/dllcrt1.o
index 1e929a7..e887428 100644
--- a/x86_64-w64-mingw32/lib32/dllcrt1.o
+++ b/x86_64-w64-mingw32/lib32/dllcrt1.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/dllcrt2.o b/x86_64-w64-mingw32/lib32/dllcrt2.o
index 1e929a7..e887428 100644
--- a/x86_64-w64-mingw32/lib32/dllcrt2.o
+++ b/x86_64-w64-mingw32/lib32/dllcrt2.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/gcrt0.o b/x86_64-w64-mingw32/lib32/gcrt0.o
index 4974eb5..cdf6794 100644
--- a/x86_64-w64-mingw32/lib32/gcrt0.o
+++ b/x86_64-w64-mingw32/lib32/gcrt0.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/gcrt1.o b/x86_64-w64-mingw32/lib32/gcrt1.o
index 4974eb5..cdf6794 100644
--- a/x86_64-w64-mingw32/lib32/gcrt1.o
+++ b/x86_64-w64-mingw32/lib32/gcrt1.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/gcrt2.o b/x86_64-w64-mingw32/lib32/gcrt2.o
index 4974eb5..cdf6794 100644
--- a/x86_64-w64-mingw32/lib32/gcrt2.o
+++ b/x86_64-w64-mingw32/lib32/gcrt2.o
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libaclui.a b/x86_64-w64-mingw32/lib32/libaclui.a
index a21ffaf..8bcad9f 100644
--- a/x86_64-w64-mingw32/lib32/libaclui.a
+++ b/x86_64-w64-mingw32/lib32/libaclui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libactiveds.a b/x86_64-w64-mingw32/lib32/libactiveds.a
index 59b30d6..b641f50 100644
--- a/x86_64-w64-mingw32/lib32/libactiveds.a
+++ b/x86_64-w64-mingw32/lib32/libactiveds.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libadsldpc.a b/x86_64-w64-mingw32/lib32/libadsldpc.a
index 19fd451..d190b2e 100644
--- a/x86_64-w64-mingw32/lib32/libadsldpc.a
+++ b/x86_64-w64-mingw32/lib32/libadsldpc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libadvapi32.a b/x86_64-w64-mingw32/lib32/libadvapi32.a
index 1089cba..da4c135 100644
--- a/x86_64-w64-mingw32/lib32/libadvapi32.a
+++ b/x86_64-w64-mingw32/lib32/libadvapi32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libamstrmid.a b/x86_64-w64-mingw32/lib32/libamstrmid.a
new file mode 100644
index 0000000..fb44ea8
--- /dev/null
+++ b/x86_64-w64-mingw32/lib32/libamstrmid.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libapcups.a b/x86_64-w64-mingw32/lib32/libapcups.a
index 8d02b65..97dab46 100644
--- a/x86_64-w64-mingw32/lib32/libapcups.a
+++ b/x86_64-w64-mingw32/lib32/libapcups.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libauthz.a b/x86_64-w64-mingw32/lib32/libauthz.a
index 5552294..40ff357 100644
--- a/x86_64-w64-mingw32/lib32/libauthz.a
+++ b/x86_64-w64-mingw32/lib32/libauthz.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libavicap32.a b/x86_64-w64-mingw32/lib32/libavicap32.a
index 837d399..73c9c6e 100644
--- a/x86_64-w64-mingw32/lib32/libavicap32.a
+++ b/x86_64-w64-mingw32/lib32/libavicap32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libavifil32.a b/x86_64-w64-mingw32/lib32/libavifil32.a
index 03936a0..60e59ea 100644
--- a/x86_64-w64-mingw32/lib32/libavifil32.a
+++ b/x86_64-w64-mingw32/lib32/libavifil32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libavrt.a b/x86_64-w64-mingw32/lib32/libavrt.a
index 114809d..bb6eff5 100644
--- a/x86_64-w64-mingw32/lib32/libavrt.a
+++ b/x86_64-w64-mingw32/lib32/libavrt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libbcrypt.a b/x86_64-w64-mingw32/lib32/libbcrypt.a
index c8046cf..ea4f1ba 100644
--- a/x86_64-w64-mingw32/lib32/libbcrypt.a
+++ b/x86_64-w64-mingw32/lib32/libbcrypt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libbootvid.a b/x86_64-w64-mingw32/lib32/libbootvid.a
index be99c01..0b3fcbd 100644
--- a/x86_64-w64-mingw32/lib32/libbootvid.a
+++ b/x86_64-w64-mingw32/lib32/libbootvid.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libbrowcli.a b/x86_64-w64-mingw32/lib32/libbrowcli.a
index fd89a15..e4ddf24 100644
--- a/x86_64-w64-mingw32/lib32/libbrowcli.a
+++ b/x86_64-w64-mingw32/lib32/libbrowcli.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libbthprops.a b/x86_64-w64-mingw32/lib32/libbthprops.a
index 399513d..3348244 100644
--- a/x86_64-w64-mingw32/lib32/libbthprops.a
+++ b/x86_64-w64-mingw32/lib32/libbthprops.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libcabinet.a b/x86_64-w64-mingw32/lib32/libcabinet.a
index d6863c3..e5e21ac 100644
--- a/x86_64-w64-mingw32/lib32/libcabinet.a
+++ b/x86_64-w64-mingw32/lib32/libcabinet.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libcap.a b/x86_64-w64-mingw32/lib32/libcap.a
index d1beebe..9aaef41 100644
--- a/x86_64-w64-mingw32/lib32/libcap.a
+++ b/x86_64-w64-mingw32/lib32/libcap.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libcfgmgr32.a b/x86_64-w64-mingw32/lib32/libcfgmgr32.a
index 29377cc..d66f75c 100644
--- a/x86_64-w64-mingw32/lib32/libcfgmgr32.a
+++ b/x86_64-w64-mingw32/lib32/libcfgmgr32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libclasspnp.a b/x86_64-w64-mingw32/lib32/libclasspnp.a
index d3661fc..787fa96 100644
--- a/x86_64-w64-mingw32/lib32/libclasspnp.a
+++ b/x86_64-w64-mingw32/lib32/libclasspnp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libclfsw32.a b/x86_64-w64-mingw32/lib32/libclfsw32.a
index 70325ec..31b27e3 100644
--- a/x86_64-w64-mingw32/lib32/libclfsw32.a
+++ b/x86_64-w64-mingw32/lib32/libclfsw32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libclusapi.a b/x86_64-w64-mingw32/lib32/libclusapi.a
index d2313ca..8d73a0d 100644
--- a/x86_64-w64-mingw32/lib32/libclusapi.a
+++ b/x86_64-w64-mingw32/lib32/libclusapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libcmutil.a b/x86_64-w64-mingw32/lib32/libcmutil.a
index 21a89c5..2a6012e 100644
--- a/x86_64-w64-mingw32/lib32/libcmutil.a
+++ b/x86_64-w64-mingw32/lib32/libcmutil.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libcomctl32.a b/x86_64-w64-mingw32/lib32/libcomctl32.a
index 2611d29..685f52f 100644
--- a/x86_64-w64-mingw32/lib32/libcomctl32.a
+++ b/x86_64-w64-mingw32/lib32/libcomctl32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libcomdlg32.a b/x86_64-w64-mingw32/lib32/libcomdlg32.a
index fa5787f..c3ce78a 100644
--- a/x86_64-w64-mingw32/lib32/libcomdlg32.a
+++ b/x86_64-w64-mingw32/lib32/libcomdlg32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libconnect.a b/x86_64-w64-mingw32/lib32/libconnect.a
index 7d05e39..e8a206d 100644
--- a/x86_64-w64-mingw32/lib32/libconnect.a
+++ b/x86_64-w64-mingw32/lib32/libconnect.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libcredui.a b/x86_64-w64-mingw32/lib32/libcredui.a
index 6849e76..a0d647a 100644
--- a/x86_64-w64-mingw32/lib32/libcredui.a
+++ b/x86_64-w64-mingw32/lib32/libcredui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libcrtdll.a b/x86_64-w64-mingw32/lib32/libcrtdll.a
index 6d89e3a..7582869 100644
--- a/x86_64-w64-mingw32/lib32/libcrtdll.a
+++ b/x86_64-w64-mingw32/lib32/libcrtdll.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libcrypt32.a b/x86_64-w64-mingw32/lib32/libcrypt32.a
index 00ace1d..e042d42 100644
--- a/x86_64-w64-mingw32/lib32/libcrypt32.a
+++ b/x86_64-w64-mingw32/lib32/libcrypt32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libcryptnet.a b/x86_64-w64-mingw32/lib32/libcryptnet.a
index 678da61..cc705cb 100644
--- a/x86_64-w64-mingw32/lib32/libcryptnet.a
+++ b/x86_64-w64-mingw32/lib32/libcryptnet.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libcryptsp.a b/x86_64-w64-mingw32/lib32/libcryptsp.a
index bdc1bc4..21d3ccd 100644
--- a/x86_64-w64-mingw32/lib32/libcryptsp.a
+++ b/x86_64-w64-mingw32/lib32/libcryptsp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libcryptxml.a b/x86_64-w64-mingw32/lib32/libcryptxml.a
index fdb6f64..b29ed17 100644
--- a/x86_64-w64-mingw32/lib32/libcryptxml.a
+++ b/x86_64-w64-mingw32/lib32/libcryptxml.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libcscapi.a b/x86_64-w64-mingw32/lib32/libcscapi.a
index 1cf5c66..4ecb698 100644
--- a/x86_64-w64-mingw32/lib32/libcscapi.a
+++ b/x86_64-w64-mingw32/lib32/libcscapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libctl3d32.a b/x86_64-w64-mingw32/lib32/libctl3d32.a
index a94235a..a138b15 100644
--- a/x86_64-w64-mingw32/lib32/libctl3d32.a
+++ b/x86_64-w64-mingw32/lib32/libctl3d32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd2d1.a b/x86_64-w64-mingw32/lib32/libd2d1.a
index e6b2270..d6c6c3d 100644
--- a/x86_64-w64-mingw32/lib32/libd2d1.a
+++ b/x86_64-w64-mingw32/lib32/libd2d1.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3d11.a b/x86_64-w64-mingw32/lib32/libd3d11.a
index ee88ec8..097a6b5 100644
--- a/x86_64-w64-mingw32/lib32/libd3d11.a
+++ b/x86_64-w64-mingw32/lib32/libd3d11.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3d8.a b/x86_64-w64-mingw32/lib32/libd3d8.a
index f47efba..383ca36 100644
--- a/x86_64-w64-mingw32/lib32/libd3d8.a
+++ b/x86_64-w64-mingw32/lib32/libd3d8.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3d9.a b/x86_64-w64-mingw32/lib32/libd3d9.a
index 50af40c..5536e49 100644
--- a/x86_64-w64-mingw32/lib32/libd3d9.a
+++ b/x86_64-w64-mingw32/lib32/libd3d9.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dcompiler.a b/x86_64-w64-mingw32/lib32/libd3dcompiler.a
index 85a8903..28002db 100644
--- a/x86_64-w64-mingw32/lib32/libd3dcompiler.a
+++ b/x86_64-w64-mingw32/lib32/libd3dcompiler.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dcompiler_33.a b/x86_64-w64-mingw32/lib32/libd3dcompiler_33.a
index 3e57068..a951cd1 100644
--- a/x86_64-w64-mingw32/lib32/libd3dcompiler_33.a
+++ b/x86_64-w64-mingw32/lib32/libd3dcompiler_33.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dcompiler_34.a b/x86_64-w64-mingw32/lib32/libd3dcompiler_34.a
index 84fd61f..91c5aab 100644
--- a/x86_64-w64-mingw32/lib32/libd3dcompiler_34.a
+++ b/x86_64-w64-mingw32/lib32/libd3dcompiler_34.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dcompiler_35.a b/x86_64-w64-mingw32/lib32/libd3dcompiler_35.a
index 0817426..eb5f3d7 100644
--- a/x86_64-w64-mingw32/lib32/libd3dcompiler_35.a
+++ b/x86_64-w64-mingw32/lib32/libd3dcompiler_35.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dcompiler_36.a b/x86_64-w64-mingw32/lib32/libd3dcompiler_36.a
index 58e8a31..d845093 100644
--- a/x86_64-w64-mingw32/lib32/libd3dcompiler_36.a
+++ b/x86_64-w64-mingw32/lib32/libd3dcompiler_36.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dcompiler_37.a b/x86_64-w64-mingw32/lib32/libd3dcompiler_37.a
index 62542ff..3706572 100644
--- a/x86_64-w64-mingw32/lib32/libd3dcompiler_37.a
+++ b/x86_64-w64-mingw32/lib32/libd3dcompiler_37.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dcompiler_38.a b/x86_64-w64-mingw32/lib32/libd3dcompiler_38.a
index b8d4d9c..dc7e668 100644
--- a/x86_64-w64-mingw32/lib32/libd3dcompiler_38.a
+++ b/x86_64-w64-mingw32/lib32/libd3dcompiler_38.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dcompiler_39.a b/x86_64-w64-mingw32/lib32/libd3dcompiler_39.a
index cd57e4a..ad7f737 100644
--- a/x86_64-w64-mingw32/lib32/libd3dcompiler_39.a
+++ b/x86_64-w64-mingw32/lib32/libd3dcompiler_39.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dcompiler_40.a b/x86_64-w64-mingw32/lib32/libd3dcompiler_40.a
index e00ebe4..93c5e13 100644
--- a/x86_64-w64-mingw32/lib32/libd3dcompiler_40.a
+++ b/x86_64-w64-mingw32/lib32/libd3dcompiler_40.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dcompiler_41.a b/x86_64-w64-mingw32/lib32/libd3dcompiler_41.a
index e2773df..84a8b93 100644
--- a/x86_64-w64-mingw32/lib32/libd3dcompiler_41.a
+++ b/x86_64-w64-mingw32/lib32/libd3dcompiler_41.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dcompiler_42.a b/x86_64-w64-mingw32/lib32/libd3dcompiler_42.a
index 1e94e96..ccbbe8c 100644
--- a/x86_64-w64-mingw32/lib32/libd3dcompiler_42.a
+++ b/x86_64-w64-mingw32/lib32/libd3dcompiler_42.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dcompiler_43.a b/x86_64-w64-mingw32/lib32/libd3dcompiler_43.a
index 0534624..f13705f 100644
--- a/x86_64-w64-mingw32/lib32/libd3dcompiler_43.a
+++ b/x86_64-w64-mingw32/lib32/libd3dcompiler_43.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dcompiler_46.a b/x86_64-w64-mingw32/lib32/libd3dcompiler_46.a
index 2e46c92..5b07ca9 100644
--- a/x86_64-w64-mingw32/lib32/libd3dcompiler_46.a
+++ b/x86_64-w64-mingw32/lib32/libd3dcompiler_46.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dcompiler_47.a b/x86_64-w64-mingw32/lib32/libd3dcompiler_47.a
new file mode 100644
index 0000000..64f9670
--- /dev/null
+++ b/x86_64-w64-mingw32/lib32/libd3dcompiler_47.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dcsx_46.a b/x86_64-w64-mingw32/lib32/libd3dcsx_46.a
index ceaada8..4824a3b 100644
--- a/x86_64-w64-mingw32/lib32/libd3dcsx_46.a
+++ b/x86_64-w64-mingw32/lib32/libd3dcsx_46.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dcsxd.a b/x86_64-w64-mingw32/lib32/libd3dcsxd.a
index f7a8dea..5d6c616 100644
--- a/x86_64-w64-mingw32/lib32/libd3dcsxd.a
+++ b/x86_64-w64-mingw32/lib32/libd3dcsxd.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dcsxd_43.a b/x86_64-w64-mingw32/lib32/libd3dcsxd_43.a
index 9160d50..2b0a777 100644
--- a/x86_64-w64-mingw32/lib32/libd3dcsxd_43.a
+++ b/x86_64-w64-mingw32/lib32/libd3dcsxd_43.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dim.a b/x86_64-w64-mingw32/lib32/libd3dim.a
index 9bf1910..8136d78 100644
--- a/x86_64-w64-mingw32/lib32/libd3dim.a
+++ b/x86_64-w64-mingw32/lib32/libd3dim.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3drm.a b/x86_64-w64-mingw32/lib32/libd3drm.a
index af62b30..cefa089 100644
--- a/x86_64-w64-mingw32/lib32/libd3drm.a
+++ b/x86_64-w64-mingw32/lib32/libd3drm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx10.a b/x86_64-w64-mingw32/lib32/libd3dx10.a
index 2f1798f..d633e2e 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx10.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx10.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx10_33.a b/x86_64-w64-mingw32/lib32/libd3dx10_33.a
index 3eb7a44..af1ddd9 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx10_33.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx10_33.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx10_34.a b/x86_64-w64-mingw32/lib32/libd3dx10_34.a
index 6fab71b..9fcae0d 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx10_34.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx10_34.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx10_35.a b/x86_64-w64-mingw32/lib32/libd3dx10_35.a
index 20e1bca..e28d5ca 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx10_35.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx10_35.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx10_36.a b/x86_64-w64-mingw32/lib32/libd3dx10_36.a
index 376cec3..c3061aa 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx10_36.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx10_36.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx10_37.a b/x86_64-w64-mingw32/lib32/libd3dx10_37.a
index edb1493..a72fe34 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx10_37.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx10_37.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx10_38.a b/x86_64-w64-mingw32/lib32/libd3dx10_38.a
index f044163..95fc696 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx10_38.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx10_38.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx10_39.a b/x86_64-w64-mingw32/lib32/libd3dx10_39.a
index 6e6f28c..68a400a 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx10_39.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx10_39.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx10_40.a b/x86_64-w64-mingw32/lib32/libd3dx10_40.a
index 93691a2..3a802e7 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx10_40.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx10_40.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx10_41.a b/x86_64-w64-mingw32/lib32/libd3dx10_41.a
index 75e28ae..4873ecc 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx10_41.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx10_41.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx10_42.a b/x86_64-w64-mingw32/lib32/libd3dx10_42.a
index e6968aa..25d3c16 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx10_42.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx10_42.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx10_43.a b/x86_64-w64-mingw32/lib32/libd3dx10_43.a
index a839741..134d145 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx10_43.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx10_43.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx11.a b/x86_64-w64-mingw32/lib32/libd3dx11.a
index 98ac77a..7487420 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx11.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx11.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx11_42.a b/x86_64-w64-mingw32/lib32/libd3dx11_42.a
index b4636bf..d8a198c 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx11_42.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx11_42.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx11_43.a b/x86_64-w64-mingw32/lib32/libd3dx11_43.a
index fe3fc33..9381229 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx11_43.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx11_43.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx8d.a b/x86_64-w64-mingw32/lib32/libd3dx8d.a
index 0aa1327..22629f7 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx8d.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx8d.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx9.a b/x86_64-w64-mingw32/lib32/libd3dx9.a
index c0ae9b8..215dee5 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx9.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx9.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx9_24.a b/x86_64-w64-mingw32/lib32/libd3dx9_24.a
index d9fef66..0c43770 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx9_24.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx9_24.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx9_25.a b/x86_64-w64-mingw32/lib32/libd3dx9_25.a
index b634b9d..075da68 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx9_25.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx9_25.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx9_26.a b/x86_64-w64-mingw32/lib32/libd3dx9_26.a
index 949d598..9de3374 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx9_26.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx9_26.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx9_27.a b/x86_64-w64-mingw32/lib32/libd3dx9_27.a
index db2fe8a..3c2dc98 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx9_27.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx9_27.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx9_28.a b/x86_64-w64-mingw32/lib32/libd3dx9_28.a
index 3c88048..1be2b50 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx9_28.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx9_28.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx9_29.a b/x86_64-w64-mingw32/lib32/libd3dx9_29.a
index 95e6a5c..7b120dd 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx9_29.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx9_29.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx9_30.a b/x86_64-w64-mingw32/lib32/libd3dx9_30.a
index 8c7b5cf..50c9fe8 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx9_30.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx9_30.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx9_31.a b/x86_64-w64-mingw32/lib32/libd3dx9_31.a
index a33185e..e6e1b40 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx9_31.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx9_31.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx9_32.a b/x86_64-w64-mingw32/lib32/libd3dx9_32.a
index ad98510..68faab8 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx9_32.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx9_32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx9_33.a b/x86_64-w64-mingw32/lib32/libd3dx9_33.a
index 2c75244..39074cd 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx9_33.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx9_33.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx9_34.a b/x86_64-w64-mingw32/lib32/libd3dx9_34.a
index 87fcd5c..ab4fef8 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx9_34.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx9_34.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx9_35.a b/x86_64-w64-mingw32/lib32/libd3dx9_35.a
index 197346c..29b34f0 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx9_35.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx9_35.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx9_36.a b/x86_64-w64-mingw32/lib32/libd3dx9_36.a
index b99d58a..bb3ef72 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx9_36.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx9_36.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx9_37.a b/x86_64-w64-mingw32/lib32/libd3dx9_37.a
index 4f3c03c..c3147cf 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx9_37.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx9_37.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx9_38.a b/x86_64-w64-mingw32/lib32/libd3dx9_38.a
index 8edb8da..fed14e3 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx9_38.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx9_38.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx9_39.a b/x86_64-w64-mingw32/lib32/libd3dx9_39.a
index 4f306b9..2c5b0c5 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx9_39.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx9_39.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx9_40.a b/x86_64-w64-mingw32/lib32/libd3dx9_40.a
index 0b78d90..2131879 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx9_40.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx9_40.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx9_41.a b/x86_64-w64-mingw32/lib32/libd3dx9_41.a
index ab32ab4..c34574d 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx9_41.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx9_41.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx9_42.a b/x86_64-w64-mingw32/lib32/libd3dx9_42.a
index 920af95..e8e1b03 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx9_42.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx9_42.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx9_43.a b/x86_64-w64-mingw32/lib32/libd3dx9_43.a
index e361a43..34e4efc 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx9_43.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx9_43.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dx9d.a b/x86_64-w64-mingw32/lib32/libd3dx9d.a
index f51d4d6..548f1bb 100644
--- a/x86_64-w64-mingw32/lib32/libd3dx9d.a
+++ b/x86_64-w64-mingw32/lib32/libd3dx9d.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libd3dxof.a b/x86_64-w64-mingw32/lib32/libd3dxof.a
index 1c7f41a..fa02e70 100644
--- a/x86_64-w64-mingw32/lib32/libd3dxof.a
+++ b/x86_64-w64-mingw32/lib32/libd3dxof.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdavclnt.a b/x86_64-w64-mingw32/lib32/libdavclnt.a
index 5ef69f3..e789fd4 100644
--- a/x86_64-w64-mingw32/lib32/libdavclnt.a
+++ b/x86_64-w64-mingw32/lib32/libdavclnt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdavhlpr.a b/x86_64-w64-mingw32/lib32/libdavhlpr.a
index a697ec8..4d83e66 100644
--- a/x86_64-w64-mingw32/lib32/libdavhlpr.a
+++ b/x86_64-w64-mingw32/lib32/libdavhlpr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdbgeng.a b/x86_64-w64-mingw32/lib32/libdbgeng.a
index bc7baec..416edda 100644
--- a/x86_64-w64-mingw32/lib32/libdbgeng.a
+++ b/x86_64-w64-mingw32/lib32/libdbgeng.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdbghelp.a b/x86_64-w64-mingw32/lib32/libdbghelp.a
index d4b27b8..da216c3 100644
--- a/x86_64-w64-mingw32/lib32/libdbghelp.a
+++ b/x86_64-w64-mingw32/lib32/libdbghelp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libddraw.a b/x86_64-w64-mingw32/lib32/libddraw.a
index 36ee898..9fe61b3 100644
--- a/x86_64-w64-mingw32/lib32/libddraw.a
+++ b/x86_64-w64-mingw32/lib32/libddraw.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdevmgr.a b/x86_64-w64-mingw32/lib32/libdevmgr.a
index 26847ce..fdd63e4 100644
--- a/x86_64-w64-mingw32/lib32/libdevmgr.a
+++ b/x86_64-w64-mingw32/lib32/libdevmgr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdevobj.a b/x86_64-w64-mingw32/lib32/libdevobj.a
index 253e491..c2cee30 100644
--- a/x86_64-w64-mingw32/lib32/libdevobj.a
+++ b/x86_64-w64-mingw32/lib32/libdevobj.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdevrtl.a b/x86_64-w64-mingw32/lib32/libdevrtl.a
index 5c7b1f8..6d2bb8c 100644
--- a/x86_64-w64-mingw32/lib32/libdevrtl.a
+++ b/x86_64-w64-mingw32/lib32/libdevrtl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdfscli.a b/x86_64-w64-mingw32/lib32/libdfscli.a
index 1389c38..c1297ba 100644
--- a/x86_64-w64-mingw32/lib32/libdfscli.a
+++ b/x86_64-w64-mingw32/lib32/libdfscli.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdhcpcsvc.a b/x86_64-w64-mingw32/lib32/libdhcpcsvc.a
index 9df39ba..c535e09 100644
--- a/x86_64-w64-mingw32/lib32/libdhcpcsvc.a
+++ b/x86_64-w64-mingw32/lib32/libdhcpcsvc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdhcpcsvc6.a b/x86_64-w64-mingw32/lib32/libdhcpcsvc6.a
index 2a4f709..2d0967e 100644
--- a/x86_64-w64-mingw32/lib32/libdhcpcsvc6.a
+++ b/x86_64-w64-mingw32/lib32/libdhcpcsvc6.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdhcpsapi.a b/x86_64-w64-mingw32/lib32/libdhcpsapi.a
index 4190ca1..7b77905 100644
--- a/x86_64-w64-mingw32/lib32/libdhcpsapi.a
+++ b/x86_64-w64-mingw32/lib32/libdhcpsapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdinput.a b/x86_64-w64-mingw32/lib32/libdinput.a
index 267beb3..da2c6c2 100644
--- a/x86_64-w64-mingw32/lib32/libdinput.a
+++ b/x86_64-w64-mingw32/lib32/libdinput.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdinput8.a b/x86_64-w64-mingw32/lib32/libdinput8.a
index 632ed93..1e7b9fc 100644
--- a/x86_64-w64-mingw32/lib32/libdinput8.a
+++ b/x86_64-w64-mingw32/lib32/libdinput8.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdlcapi.a b/x86_64-w64-mingw32/lib32/libdlcapi.a
index 2496f20..ca0f7d5 100644
--- a/x86_64-w64-mingw32/lib32/libdlcapi.a
+++ b/x86_64-w64-mingw32/lib32/libdlcapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdmoguids.a b/x86_64-w64-mingw32/lib32/libdmoguids.a
index 6f56538..5fde4bd 100644
--- a/x86_64-w64-mingw32/lib32/libdmoguids.a
+++ b/x86_64-w64-mingw32/lib32/libdmoguids.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdnsapi.a b/x86_64-w64-mingw32/lib32/libdnsapi.a
index 75307ec..845d8dd 100644
--- a/x86_64-w64-mingw32/lib32/libdnsapi.a
+++ b/x86_64-w64-mingw32/lib32/libdnsapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdplayx.a b/x86_64-w64-mingw32/lib32/libdplayx.a
index 0003182..39ab6d2 100644
--- a/x86_64-w64-mingw32/lib32/libdplayx.a
+++ b/x86_64-w64-mingw32/lib32/libdplayx.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdpnaddr.a b/x86_64-w64-mingw32/lib32/libdpnaddr.a
index a3adfad..f20e11d 100644
--- a/x86_64-w64-mingw32/lib32/libdpnaddr.a
+++ b/x86_64-w64-mingw32/lib32/libdpnaddr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdpnet.a b/x86_64-w64-mingw32/lib32/libdpnet.a
index de65328..9c2d0d8 100644
--- a/x86_64-w64-mingw32/lib32/libdpnet.a
+++ b/x86_64-w64-mingw32/lib32/libdpnet.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdpnlobby.a b/x86_64-w64-mingw32/lib32/libdpnlobby.a
index 0383421..e3f3dc3 100644
--- a/x86_64-w64-mingw32/lib32/libdpnlobby.a
+++ b/x86_64-w64-mingw32/lib32/libdpnlobby.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdpvoice.a b/x86_64-w64-mingw32/lib32/libdpvoice.a
index 10fc35c..2815271 100644
--- a/x86_64-w64-mingw32/lib32/libdpvoice.a
+++ b/x86_64-w64-mingw32/lib32/libdpvoice.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdsetup.a b/x86_64-w64-mingw32/lib32/libdsetup.a
index 505e4fd..1d0cac6 100644
--- a/x86_64-w64-mingw32/lib32/libdsetup.a
+++ b/x86_64-w64-mingw32/lib32/libdsetup.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdsound.a b/x86_64-w64-mingw32/lib32/libdsound.a
index f94ce6c..d3820b7 100644
--- a/x86_64-w64-mingw32/lib32/libdsound.a
+++ b/x86_64-w64-mingw32/lib32/libdsound.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdsrole.a b/x86_64-w64-mingw32/lib32/libdsrole.a
index 15ac04f..a483823 100644
--- a/x86_64-w64-mingw32/lib32/libdsrole.a
+++ b/x86_64-w64-mingw32/lib32/libdsrole.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdssec.a b/x86_64-w64-mingw32/lib32/libdssec.a
index b7c8988..2e5b0c8 100644
--- a/x86_64-w64-mingw32/lib32/libdssec.a
+++ b/x86_64-w64-mingw32/lib32/libdssec.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdwmapi.a b/x86_64-w64-mingw32/lib32/libdwmapi.a
index 6486837..24b1884 100644
--- a/x86_64-w64-mingw32/lib32/libdwmapi.a
+++ b/x86_64-w64-mingw32/lib32/libdwmapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdwrite.a b/x86_64-w64-mingw32/lib32/libdwrite.a
index 9afcff3..088db2a 100644
--- a/x86_64-w64-mingw32/lib32/libdwrite.a
+++ b/x86_64-w64-mingw32/lib32/libdwrite.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdxapi.a b/x86_64-w64-mingw32/lib32/libdxapi.a
index d3ad1f5..45d8d1a 100644
--- a/x86_64-w64-mingw32/lib32/libdxapi.a
+++ b/x86_64-w64-mingw32/lib32/libdxapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdxerr8.a b/x86_64-w64-mingw32/lib32/libdxerr8.a
index 8e7ceed..564a233 100644
--- a/x86_64-w64-mingw32/lib32/libdxerr8.a
+++ b/x86_64-w64-mingw32/lib32/libdxerr8.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdxerr9.a b/x86_64-w64-mingw32/lib32/libdxerr9.a
index b007fc7..8731d3c 100644
--- a/x86_64-w64-mingw32/lib32/libdxerr9.a
+++ b/x86_64-w64-mingw32/lib32/libdxerr9.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdxgi.a b/x86_64-w64-mingw32/lib32/libdxgi.a
index 645bab6..f008a3c 100644
--- a/x86_64-w64-mingw32/lib32/libdxgi.a
+++ b/x86_64-w64-mingw32/lib32/libdxgi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdxguid.a b/x86_64-w64-mingw32/lib32/libdxguid.a
index 49fe462..fd8a292 100644
--- a/x86_64-w64-mingw32/lib32/libdxguid.a
+++ b/x86_64-w64-mingw32/lib32/libdxguid.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libdxva2.a b/x86_64-w64-mingw32/lib32/libdxva2.a
index c72eaa4..cd29fed 100644
--- a/x86_64-w64-mingw32/lib32/libdxva2.a
+++ b/x86_64-w64-mingw32/lib32/libdxva2.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libeapp3hst.a b/x86_64-w64-mingw32/lib32/libeapp3hst.a
index 4581c66..3108d93 100644
--- a/x86_64-w64-mingw32/lib32/libeapp3hst.a
+++ b/x86_64-w64-mingw32/lib32/libeapp3hst.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libeappcfg.a b/x86_64-w64-mingw32/lib32/libeappcfg.a
index 227655b..a7df0b4 100644
--- a/x86_64-w64-mingw32/lib32/libeappcfg.a
+++ b/x86_64-w64-mingw32/lib32/libeappcfg.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libeappgnui.a b/x86_64-w64-mingw32/lib32/libeappgnui.a
index da4eb38..69d6cbc 100644
--- a/x86_64-w64-mingw32/lib32/libeappgnui.a
+++ b/x86_64-w64-mingw32/lib32/libeappgnui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libeapphost.a b/x86_64-w64-mingw32/lib32/libeapphost.a
index 547569b..64d4dff 100644
--- a/x86_64-w64-mingw32/lib32/libeapphost.a
+++ b/x86_64-w64-mingw32/lib32/libeapphost.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libeappprxy.a b/x86_64-w64-mingw32/lib32/libeappprxy.a
index 1b6e5c1..89a1429 100644
--- a/x86_64-w64-mingw32/lib32/libeappprxy.a
+++ b/x86_64-w64-mingw32/lib32/libeappprxy.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libelscore.a b/x86_64-w64-mingw32/lib32/libelscore.a
index 6cff18c..f932299 100644
--- a/x86_64-w64-mingw32/lib32/libelscore.a
+++ b/x86_64-w64-mingw32/lib32/libelscore.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libesent.a b/x86_64-w64-mingw32/lib32/libesent.a
index 052b5fd..9152d1b 100644
--- a/x86_64-w64-mingw32/lib32/libesent.a
+++ b/x86_64-w64-mingw32/lib32/libesent.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libevr.a b/x86_64-w64-mingw32/lib32/libevr.a
index 15d214b..24e959e 100644
--- a/x86_64-w64-mingw32/lib32/libevr.a
+++ b/x86_64-w64-mingw32/lib32/libevr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libfaultrep.a b/x86_64-w64-mingw32/lib32/libfaultrep.a
index e54ac20..b91459e 100644
--- a/x86_64-w64-mingw32/lib32/libfaultrep.a
+++ b/x86_64-w64-mingw32/lib32/libfaultrep.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libfwpuclnt.a b/x86_64-w64-mingw32/lib32/libfwpuclnt.a
index a57b1eb..2014af1 100644
--- a/x86_64-w64-mingw32/lib32/libfwpuclnt.a
+++ b/x86_64-w64-mingw32/lib32/libfwpuclnt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libgdi32.a b/x86_64-w64-mingw32/lib32/libgdi32.a
index e028a23..42a3231 100644
--- a/x86_64-w64-mingw32/lib32/libgdi32.a
+++ b/x86_64-w64-mingw32/lib32/libgdi32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libgdiplus.a b/x86_64-w64-mingw32/lib32/libgdiplus.a
index 7d240bb..d953da7 100644
--- a/x86_64-w64-mingw32/lib32/libgdiplus.a
+++ b/x86_64-w64-mingw32/lib32/libgdiplus.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libglaux.a b/x86_64-w64-mingw32/lib32/libglaux.a
index 4befc93..3ba1271 100644
--- a/x86_64-w64-mingw32/lib32/libglaux.a
+++ b/x86_64-w64-mingw32/lib32/libglaux.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libglu32.a b/x86_64-w64-mingw32/lib32/libglu32.a
index c9a67a3..257475f 100644
--- a/x86_64-w64-mingw32/lib32/libglu32.a
+++ b/x86_64-w64-mingw32/lib32/libglu32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libglut.a b/x86_64-w64-mingw32/lib32/libglut.a
index 1e80acd..08f0f41 100644
--- a/x86_64-w64-mingw32/lib32/libglut.a
+++ b/x86_64-w64-mingw32/lib32/libglut.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libglut32.a b/x86_64-w64-mingw32/lib32/libglut32.a
index cbc3998..a80fca0 100644
--- a/x86_64-w64-mingw32/lib32/libglut32.a
+++ b/x86_64-w64-mingw32/lib32/libglut32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libgmon.a b/x86_64-w64-mingw32/lib32/libgmon.a
index 9acc1d6..97934e5 100644
--- a/x86_64-w64-mingw32/lib32/libgmon.a
+++ b/x86_64-w64-mingw32/lib32/libgmon.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libgpapi.a b/x86_64-w64-mingw32/lib32/libgpapi.a
index eb62b88..41ce599 100644
--- a/x86_64-w64-mingw32/lib32/libgpapi.a
+++ b/x86_64-w64-mingw32/lib32/libgpapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libgpedit.a b/x86_64-w64-mingw32/lib32/libgpedit.a
index a8ea924..0092252 100644
--- a/x86_64-w64-mingw32/lib32/libgpedit.a
+++ b/x86_64-w64-mingw32/lib32/libgpedit.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libgpprefcl.a b/x86_64-w64-mingw32/lib32/libgpprefcl.a
index 0185b98..73dd6ed 100644
--- a/x86_64-w64-mingw32/lib32/libgpprefcl.a
+++ b/x86_64-w64-mingw32/lib32/libgpprefcl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libgpscript.a b/x86_64-w64-mingw32/lib32/libgpscript.a
index 66beaf1..96c0fcb 100644
--- a/x86_64-w64-mingw32/lib32/libgpscript.a
+++ b/x86_64-w64-mingw32/lib32/libgpscript.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libgptext.a b/x86_64-w64-mingw32/lib32/libgptext.a
index fb4eabe..b3ecb54 100644
--- a/x86_64-w64-mingw32/lib32/libgptext.a
+++ b/x86_64-w64-mingw32/lib32/libgptext.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libhal.a b/x86_64-w64-mingw32/lib32/libhal.a
index 3e9afea..9533189 100644
--- a/x86_64-w64-mingw32/lib32/libhal.a
+++ b/x86_64-w64-mingw32/lib32/libhal.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libhid.a b/x86_64-w64-mingw32/lib32/libhid.a
index f94024e..e5ff963 100644
--- a/x86_64-w64-mingw32/lib32/libhid.a
+++ b/x86_64-w64-mingw32/lib32/libhid.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libhidclass.a b/x86_64-w64-mingw32/lib32/libhidclass.a
index 2258b18..381c122 100644
--- a/x86_64-w64-mingw32/lib32/libhidclass.a
+++ b/x86_64-w64-mingw32/lib32/libhidclass.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libhidparse.a b/x86_64-w64-mingw32/lib32/libhidparse.a
index 96d2e57..bb3ad7a 100644
--- a/x86_64-w64-mingw32/lib32/libhidparse.a
+++ b/x86_64-w64-mingw32/lib32/libhidparse.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libhttpapi.a b/x86_64-w64-mingw32/lib32/libhttpapi.a
index 23ec7d9..902048d 100644
--- a/x86_64-w64-mingw32/lib32/libhttpapi.a
+++ b/x86_64-w64-mingw32/lib32/libhttpapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libicmui.a b/x86_64-w64-mingw32/lib32/libicmui.a
index 0c729ec..13aa810 100644
--- a/x86_64-w64-mingw32/lib32/libicmui.a
+++ b/x86_64-w64-mingw32/lib32/libicmui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libigmpagnt.a b/x86_64-w64-mingw32/lib32/libigmpagnt.a
index a5a81df..9f37a21 100644
--- a/x86_64-w64-mingw32/lib32/libigmpagnt.a
+++ b/x86_64-w64-mingw32/lib32/libigmpagnt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libimagehlp.a b/x86_64-w64-mingw32/lib32/libimagehlp.a
index a233039..87d8043 100644
--- a/x86_64-w64-mingw32/lib32/libimagehlp.a
+++ b/x86_64-w64-mingw32/lib32/libimagehlp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libimm32.a b/x86_64-w64-mingw32/lib32/libimm32.a
index 92b399b..d55c8aa 100644
--- a/x86_64-w64-mingw32/lib32/libimm32.a
+++ b/x86_64-w64-mingw32/lib32/libimm32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libiphlpapi.a b/x86_64-w64-mingw32/lib32/libiphlpapi.a
index 30234ea..0c30e26 100644
--- a/x86_64-w64-mingw32/lib32/libiphlpapi.a
+++ b/x86_64-w64-mingw32/lib32/libiphlpapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libiscsidsc.a b/x86_64-w64-mingw32/lib32/libiscsidsc.a
index 4d67f22..05c3844 100644
--- a/x86_64-w64-mingw32/lib32/libiscsidsc.a
+++ b/x86_64-w64-mingw32/lib32/libiscsidsc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libkernel32.a b/x86_64-w64-mingw32/lib32/libkernel32.a
index 69486f7..6a0e438 100644
--- a/x86_64-w64-mingw32/lib32/libkernel32.a
+++ b/x86_64-w64-mingw32/lib32/libkernel32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libks.a b/x86_64-w64-mingw32/lib32/libks.a
index 5440b8f..cbaf484 100644
--- a/x86_64-w64-mingw32/lib32/libks.a
+++ b/x86_64-w64-mingw32/lib32/libks.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libksguid.a b/x86_64-w64-mingw32/lib32/libksguid.a
index 30414da..3bc09ac 100644
--- a/x86_64-w64-mingw32/lib32/libksguid.a
+++ b/x86_64-w64-mingw32/lib32/libksguid.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libksproxy.a b/x86_64-w64-mingw32/lib32/libksproxy.a
index ad53c64..c628e85 100644
--- a/x86_64-w64-mingw32/lib32/libksproxy.a
+++ b/x86_64-w64-mingw32/lib32/libksproxy.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libksuser.a b/x86_64-w64-mingw32/lib32/libksuser.a
index 59b1d1b..4fa2abf 100644
--- a/x86_64-w64-mingw32/lib32/libksuser.a
+++ b/x86_64-w64-mingw32/lib32/libksuser.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libktmw32.a b/x86_64-w64-mingw32/lib32/libktmw32.a
index 6c5de01..c8513ad 100644
--- a/x86_64-w64-mingw32/lib32/libktmw32.a
+++ b/x86_64-w64-mingw32/lib32/libktmw32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/liblargeint.a b/x86_64-w64-mingw32/lib32/liblargeint.a
index 4a907f0..55da547 100644
--- a/x86_64-w64-mingw32/lib32/liblargeint.a
+++ b/x86_64-w64-mingw32/lib32/liblargeint.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/liblocationapi.a b/x86_64-w64-mingw32/lib32/liblocationapi.a
new file mode 100644
index 0000000..7d9b84b
--- /dev/null
+++ b/x86_64-w64-mingw32/lib32/liblocationapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/liblogoncli.a b/x86_64-w64-mingw32/lib32/liblogoncli.a
index f57e160..4e81fbb 100644
--- a/x86_64-w64-mingw32/lib32/liblogoncli.a
+++ b/x86_64-w64-mingw32/lib32/liblogoncli.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/liblz32.a b/x86_64-w64-mingw32/lib32/liblz32.a
index 50da528..3b7cd17 100644
--- a/x86_64-w64-mingw32/lib32/liblz32.a
+++ b/x86_64-w64-mingw32/lib32/liblz32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libm.a b/x86_64-w64-mingw32/lib32/libm.a
index 2ed18b5..417b845 100644
--- a/x86_64-w64-mingw32/lib32/libm.a
+++ b/x86_64-w64-mingw32/lib32/libm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmapi32.a b/x86_64-w64-mingw32/lib32/libmapi32.a
index cf7b25e..0b71e7d 100644
--- a/x86_64-w64-mingw32/lib32/libmapi32.a
+++ b/x86_64-w64-mingw32/lib32/libmapi32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmcd.a b/x86_64-w64-mingw32/lib32/libmcd.a
index f2736d6..de2c2c8 100644
--- a/x86_64-w64-mingw32/lib32/libmcd.a
+++ b/x86_64-w64-mingw32/lib32/libmcd.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmf.a b/x86_64-w64-mingw32/lib32/libmf.a
index 76ee22b..1db68e6 100644
--- a/x86_64-w64-mingw32/lib32/libmf.a
+++ b/x86_64-w64-mingw32/lib32/libmf.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmfcuia32.a b/x86_64-w64-mingw32/lib32/libmfcuia32.a
index 5ebedc9..d564df4 100644
--- a/x86_64-w64-mingw32/lib32/libmfcuia32.a
+++ b/x86_64-w64-mingw32/lib32/libmfcuia32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmfplat.a b/x86_64-w64-mingw32/lib32/libmfplat.a
index d200520..7fee819 100644
--- a/x86_64-w64-mingw32/lib32/libmfplat.a
+++ b/x86_64-w64-mingw32/lib32/libmfplat.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmfuuid.a b/x86_64-w64-mingw32/lib32/libmfuuid.a
index 4508e35..0640416 100644
--- a/x86_64-w64-mingw32/lib32/libmfuuid.a
+++ b/x86_64-w64-mingw32/lib32/libmfuuid.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmgmtapi.a b/x86_64-w64-mingw32/lib32/libmgmtapi.a
index 6e6120d..af9b302 100644
--- a/x86_64-w64-mingw32/lib32/libmgmtapi.a
+++ b/x86_64-w64-mingw32/lib32/libmgmtapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmingw32.a b/x86_64-w64-mingw32/lib32/libmingw32.a
index 533edc5..3c6acf1 100644
--- a/x86_64-w64-mingw32/lib32/libmingw32.a
+++ b/x86_64-w64-mingw32/lib32/libmingw32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmingwex.a b/x86_64-w64-mingw32/lib32/libmingwex.a
index f466b0b..e01ae4e 100644
--- a/x86_64-w64-mingw32/lib32/libmingwex.a
+++ b/x86_64-w64-mingw32/lib32/libmingwex.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmingwthrd.a b/x86_64-w64-mingw32/lib32/libmingwthrd.a
index f1b9461..eacee19 100644
--- a/x86_64-w64-mingw32/lib32/libmingwthrd.a
+++ b/x86_64-w64-mingw32/lib32/libmingwthrd.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmoldname.a b/x86_64-w64-mingw32/lib32/libmoldname.a
index 085c0c2..4739928 100644
--- a/x86_64-w64-mingw32/lib32/libmoldname.a
+++ b/x86_64-w64-mingw32/lib32/libmoldname.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmpr.a b/x86_64-w64-mingw32/lib32/libmpr.a
index 774ccd4..756c8dd 100644
--- a/x86_64-w64-mingw32/lib32/libmpr.a
+++ b/x86_64-w64-mingw32/lib32/libmpr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmprapi.a b/x86_64-w64-mingw32/lib32/libmprapi.a
index 4fe4525..ca6069b 100644
--- a/x86_64-w64-mingw32/lib32/libmprapi.a
+++ b/x86_64-w64-mingw32/lib32/libmprapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmqrt.a b/x86_64-w64-mingw32/lib32/libmqrt.a
index f1fbd3b..6147835 100644
--- a/x86_64-w64-mingw32/lib32/libmqrt.a
+++ b/x86_64-w64-mingw32/lib32/libmqrt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmsacm32.a b/x86_64-w64-mingw32/lib32/libmsacm32.a
index 4043e8a..6acef77 100644
--- a/x86_64-w64-mingw32/lib32/libmsacm32.a
+++ b/x86_64-w64-mingw32/lib32/libmsacm32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmscms.a b/x86_64-w64-mingw32/lib32/libmscms.a
index c20adba..2f24b12 100644
--- a/x86_64-w64-mingw32/lib32/libmscms.a
+++ b/x86_64-w64-mingw32/lib32/libmscms.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmsctf.a b/x86_64-w64-mingw32/lib32/libmsctf.a
index 569a0d3..6b84ca4 100644
--- a/x86_64-w64-mingw32/lib32/libmsctf.a
+++ b/x86_64-w64-mingw32/lib32/libmsctf.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmsctfmonitor.a b/x86_64-w64-mingw32/lib32/libmsctfmonitor.a
index 067d7b4..0a7c585 100644
--- a/x86_64-w64-mingw32/lib32/libmsctfmonitor.a
+++ b/x86_64-w64-mingw32/lib32/libmsctfmonitor.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmsdmo.a b/x86_64-w64-mingw32/lib32/libmsdmo.a
index 6722ace..3b0803e 100644
--- a/x86_64-w64-mingw32/lib32/libmsdmo.a
+++ b/x86_64-w64-mingw32/lib32/libmsdmo.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmsdrm.a b/x86_64-w64-mingw32/lib32/libmsdrm.a
index e7bb902..03165f2 100644
--- a/x86_64-w64-mingw32/lib32/libmsdrm.a
+++ b/x86_64-w64-mingw32/lib32/libmsdrm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmshtml.a b/x86_64-w64-mingw32/lib32/libmshtml.a
index 32dad6d..d35e4d9 100644
--- a/x86_64-w64-mingw32/lib32/libmshtml.a
+++ b/x86_64-w64-mingw32/lib32/libmshtml.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmshtmled.a b/x86_64-w64-mingw32/lib32/libmshtmled.a
index 0369ae8..3f1860d 100644
--- a/x86_64-w64-mingw32/lib32/libmshtmled.a
+++ b/x86_64-w64-mingw32/lib32/libmshtmled.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmsi.a b/x86_64-w64-mingw32/lib32/libmsi.a
index 5fd51f9..bb1e80d 100644
--- a/x86_64-w64-mingw32/lib32/libmsi.a
+++ b/x86_64-w64-mingw32/lib32/libmsi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmsimg32.a b/x86_64-w64-mingw32/lib32/libmsimg32.a
index 55f8879..99e5c4c 100644
--- a/x86_64-w64-mingw32/lib32/libmsimg32.a
+++ b/x86_64-w64-mingw32/lib32/libmsimg32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmstask.a b/x86_64-w64-mingw32/lib32/libmstask.a
index 94a4d74..6571977 100644
--- a/x86_64-w64-mingw32/lib32/libmstask.a
+++ b/x86_64-w64-mingw32/lib32/libmstask.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmsvcp60.a b/x86_64-w64-mingw32/lib32/libmsvcp60.a
index 44ef62b..ee736af 100644
--- a/x86_64-w64-mingw32/lib32/libmsvcp60.a
+++ b/x86_64-w64-mingw32/lib32/libmsvcp60.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmsvcr100.a b/x86_64-w64-mingw32/lib32/libmsvcr100.a
index 37348ec..23b6cc7 100644
--- a/x86_64-w64-mingw32/lib32/libmsvcr100.a
+++ b/x86_64-w64-mingw32/lib32/libmsvcr100.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmsvcr110.a b/x86_64-w64-mingw32/lib32/libmsvcr110.a
index ecd0173..dedc7a2 100644
--- a/x86_64-w64-mingw32/lib32/libmsvcr110.a
+++ b/x86_64-w64-mingw32/lib32/libmsvcr110.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmsvcr120.a b/x86_64-w64-mingw32/lib32/libmsvcr120.a
new file mode 100644
index 0000000..eec6e28
--- /dev/null
+++ b/x86_64-w64-mingw32/lib32/libmsvcr120.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmsvcr120d.a b/x86_64-w64-mingw32/lib32/libmsvcr120d.a
new file mode 100644
index 0000000..dfffb09
--- /dev/null
+++ b/x86_64-w64-mingw32/lib32/libmsvcr120d.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmsvcr80.a b/x86_64-w64-mingw32/lib32/libmsvcr80.a
index e0ce033..64e8559 100644
--- a/x86_64-w64-mingw32/lib32/libmsvcr80.a
+++ b/x86_64-w64-mingw32/lib32/libmsvcr80.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmsvcr90.a b/x86_64-w64-mingw32/lib32/libmsvcr90.a
index 7abb678..cd7e602 100644
--- a/x86_64-w64-mingw32/lib32/libmsvcr90.a
+++ b/x86_64-w64-mingw32/lib32/libmsvcr90.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmsvcr90d.a b/x86_64-w64-mingw32/lib32/libmsvcr90d.a
index 1cd8393..639684f 100644
--- a/x86_64-w64-mingw32/lib32/libmsvcr90d.a
+++ b/x86_64-w64-mingw32/lib32/libmsvcr90d.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmsvcrt.a b/x86_64-w64-mingw32/lib32/libmsvcrt.a
index 6a8a2de..b0f94ca 100644
--- a/x86_64-w64-mingw32/lib32/libmsvcrt.a
+++ b/x86_64-w64-mingw32/lib32/libmsvcrt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmsvfw32.a b/x86_64-w64-mingw32/lib32/libmsvfw32.a
index 1aa48f4..222fdd4 100644
--- a/x86_64-w64-mingw32/lib32/libmsvfw32.a
+++ b/x86_64-w64-mingw32/lib32/libmsvfw32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libmswsock.a b/x86_64-w64-mingw32/lib32/libmswsock.a
index b06bdf7..9670d7e 100644
--- a/x86_64-w64-mingw32/lib32/libmswsock.a
+++ b/x86_64-w64-mingw32/lib32/libmswsock.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libncrypt.a b/x86_64-w64-mingw32/lib32/libncrypt.a
index c0bdfb9..1bd2fcc 100644
--- a/x86_64-w64-mingw32/lib32/libncrypt.a
+++ b/x86_64-w64-mingw32/lib32/libncrypt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libnddeapi.a b/x86_64-w64-mingw32/lib32/libnddeapi.a
index 80cce79..fd1279c 100644
--- a/x86_64-w64-mingw32/lib32/libnddeapi.a
+++ b/x86_64-w64-mingw32/lib32/libnddeapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libndfapi.a b/x86_64-w64-mingw32/lib32/libndfapi.a
index ed06c35..b540268 100644
--- a/x86_64-w64-mingw32/lib32/libndfapi.a
+++ b/x86_64-w64-mingw32/lib32/libndfapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libndis.a b/x86_64-w64-mingw32/lib32/libndis.a
index 23787a9..1dd5c97 100644
--- a/x86_64-w64-mingw32/lib32/libndis.a
+++ b/x86_64-w64-mingw32/lib32/libndis.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libnetapi32.a b/x86_64-w64-mingw32/lib32/libnetapi32.a
index 82eb992..e14e77b 100644
--- a/x86_64-w64-mingw32/lib32/libnetapi32.a
+++ b/x86_64-w64-mingw32/lib32/libnetapi32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libnetjoin.a b/x86_64-w64-mingw32/lib32/libnetjoin.a
index 432c711..92e151b 100644
--- a/x86_64-w64-mingw32/lib32/libnetjoin.a
+++ b/x86_64-w64-mingw32/lib32/libnetjoin.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libnetutils.a b/x86_64-w64-mingw32/lib32/libnetutils.a
index f37d2da..caf477f 100644
--- a/x86_64-w64-mingw32/lib32/libnetutils.a
+++ b/x86_64-w64-mingw32/lib32/libnetutils.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libnewdev.a b/x86_64-w64-mingw32/lib32/libnewdev.a
index f7db4c8..3ee0147 100644
--- a/x86_64-w64-mingw32/lib32/libnewdev.a
+++ b/x86_64-w64-mingw32/lib32/libnewdev.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libnormaliz.a b/x86_64-w64-mingw32/lib32/libnormaliz.a
index b35a577..b9dfe05 100644
--- a/x86_64-w64-mingw32/lib32/libnormaliz.a
+++ b/x86_64-w64-mingw32/lib32/libnormaliz.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libntdll.a b/x86_64-w64-mingw32/lib32/libntdll.a
index dd7183f..2034a92 100644
--- a/x86_64-w64-mingw32/lib32/libntdll.a
+++ b/x86_64-w64-mingw32/lib32/libntdll.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libntdsapi.a b/x86_64-w64-mingw32/lib32/libntdsapi.a
index 3c6330e..d78c035 100644
--- a/x86_64-w64-mingw32/lib32/libntdsapi.a
+++ b/x86_64-w64-mingw32/lib32/libntdsapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libntmsapi.a b/x86_64-w64-mingw32/lib32/libntmsapi.a
index 2282075..713b608 100644
--- a/x86_64-w64-mingw32/lib32/libntmsapi.a
+++ b/x86_64-w64-mingw32/lib32/libntmsapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libntoskrnl.a b/x86_64-w64-mingw32/lib32/libntoskrnl.a
index 503b63b..7baf2fb 100644
--- a/x86_64-w64-mingw32/lib32/libntoskrnl.a
+++ b/x86_64-w64-mingw32/lib32/libntoskrnl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libodbc32.a b/x86_64-w64-mingw32/lib32/libodbc32.a
index 2efeaa4..0384dc9 100644
--- a/x86_64-w64-mingw32/lib32/libodbc32.a
+++ b/x86_64-w64-mingw32/lib32/libodbc32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libodbccp32.a b/x86_64-w64-mingw32/lib32/libodbccp32.a
index 04ef39a..bf3d55d 100644
--- a/x86_64-w64-mingw32/lib32/libodbccp32.a
+++ b/x86_64-w64-mingw32/lib32/libodbccp32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libole32.a b/x86_64-w64-mingw32/lib32/libole32.a
index e63df23..5f3a52e 100644
--- a/x86_64-w64-mingw32/lib32/libole32.a
+++ b/x86_64-w64-mingw32/lib32/libole32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/liboleacc.a b/x86_64-w64-mingw32/lib32/liboleacc.a
index 0e54783..6623ac4 100644
--- a/x86_64-w64-mingw32/lib32/liboleacc.a
+++ b/x86_64-w64-mingw32/lib32/liboleacc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/liboleaut32.a b/x86_64-w64-mingw32/lib32/liboleaut32.a
index d0eec34..e5adb71 100644
--- a/x86_64-w64-mingw32/lib32/liboleaut32.a
+++ b/x86_64-w64-mingw32/lib32/liboleaut32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libolecli32.a b/x86_64-w64-mingw32/lib32/libolecli32.a
index bf2b01f..b79bc80 100644
--- a/x86_64-w64-mingw32/lib32/libolecli32.a
+++ b/x86_64-w64-mingw32/lib32/libolecli32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/liboledlg.a b/x86_64-w64-mingw32/lib32/liboledlg.a
index b1fe7b3..9a93ff1 100644
--- a/x86_64-w64-mingw32/lib32/liboledlg.a
+++ b/x86_64-w64-mingw32/lib32/liboledlg.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libolepro32.a b/x86_64-w64-mingw32/lib32/libolepro32.a
index 0ce0c90..4b4a530 100644
--- a/x86_64-w64-mingw32/lib32/libolepro32.a
+++ b/x86_64-w64-mingw32/lib32/libolepro32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libolesvr32.a b/x86_64-w64-mingw32/lib32/libolesvr32.a
index c6242d2..4e2247b 100644
--- a/x86_64-w64-mingw32/lib32/libolesvr32.a
+++ b/x86_64-w64-mingw32/lib32/libolesvr32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libolethk32.a b/x86_64-w64-mingw32/lib32/libolethk32.a
index ddfb707..e14fdeb 100644
--- a/x86_64-w64-mingw32/lib32/libolethk32.a
+++ b/x86_64-w64-mingw32/lib32/libolethk32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libopengl32.a b/x86_64-w64-mingw32/lib32/libopengl32.a
index 840c9b0..34f9719 100644
--- a/x86_64-w64-mingw32/lib32/libopengl32.a
+++ b/x86_64-w64-mingw32/lib32/libopengl32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libp2p.a b/x86_64-w64-mingw32/lib32/libp2p.a
index c6c034d..eaeb03b 100644
--- a/x86_64-w64-mingw32/lib32/libp2p.a
+++ b/x86_64-w64-mingw32/lib32/libp2p.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libp2pcollab.a b/x86_64-w64-mingw32/lib32/libp2pcollab.a
index 168f0cf..8ee7a04 100644
--- a/x86_64-w64-mingw32/lib32/libp2pcollab.a
+++ b/x86_64-w64-mingw32/lib32/libp2pcollab.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libp2pgraph.a b/x86_64-w64-mingw32/lib32/libp2pgraph.a
index bfbccfb..349d2d0 100644
--- a/x86_64-w64-mingw32/lib32/libp2pgraph.a
+++ b/x86_64-w64-mingw32/lib32/libp2pgraph.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libpcwum.a b/x86_64-w64-mingw32/lib32/libpcwum.a
index ea5d36d..f83738d 100644
--- a/x86_64-w64-mingw32/lib32/libpcwum.a
+++ b/x86_64-w64-mingw32/lib32/libpcwum.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libpdh.a b/x86_64-w64-mingw32/lib32/libpdh.a
index 3853534..1d0d693 100644
--- a/x86_64-w64-mingw32/lib32/libpdh.a
+++ b/x86_64-w64-mingw32/lib32/libpdh.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libpdhui.a b/x86_64-w64-mingw32/lib32/libpdhui.a
index 153056a..87d3e6a 100644
--- a/x86_64-w64-mingw32/lib32/libpdhui.a
+++ b/x86_64-w64-mingw32/lib32/libpdhui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libpenwin32.a b/x86_64-w64-mingw32/lib32/libpenwin32.a
index 5a1dc61..4b8727f 100644
--- a/x86_64-w64-mingw32/lib32/libpenwin32.a
+++ b/x86_64-w64-mingw32/lib32/libpenwin32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libpkpd32.a b/x86_64-w64-mingw32/lib32/libpkpd32.a
index e1f0020..fca563f 100644
--- a/x86_64-w64-mingw32/lib32/libpkpd32.a
+++ b/x86_64-w64-mingw32/lib32/libpkpd32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libportabledeviceguids.a b/x86_64-w64-mingw32/lib32/libportabledeviceguids.a
index da33c72..247b79f 100644
--- a/x86_64-w64-mingw32/lib32/libportabledeviceguids.a
+++ b/x86_64-w64-mingw32/lib32/libportabledeviceguids.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libpowrprof.a b/x86_64-w64-mingw32/lib32/libpowrprof.a
index 1919f79..5d28d25 100644
--- a/x86_64-w64-mingw32/lib32/libpowrprof.a
+++ b/x86_64-w64-mingw32/lib32/libpowrprof.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libpsapi.a b/x86_64-w64-mingw32/lib32/libpsapi.a
index 3ad6183..068a1a6 100644
--- a/x86_64-w64-mingw32/lib32/libpsapi.a
+++ b/x86_64-w64-mingw32/lib32/libpsapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libpthread.a b/x86_64-w64-mingw32/lib32/libpthread.a
index 94093e6..593ba58 100644
--- a/x86_64-w64-mingw32/lib32/libpthread.a
+++ b/x86_64-w64-mingw32/lib32/libpthread.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libpthread.dll.a b/x86_64-w64-mingw32/lib32/libpthread.dll.a
index 127c2f9..082d8db 100644
--- a/x86_64-w64-mingw32/lib32/libpthread.dll.a
+++ b/x86_64-w64-mingw32/lib32/libpthread.dll.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libquadmath.a b/x86_64-w64-mingw32/lib32/libquadmath.a
index 76527c2..2a30855 100644
--- a/x86_64-w64-mingw32/lib32/libquadmath.a
+++ b/x86_64-w64-mingw32/lib32/libquadmath.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libquartz.a b/x86_64-w64-mingw32/lib32/libquartz.a
index 7454518..667017c 100644
--- a/x86_64-w64-mingw32/lib32/libquartz.a
+++ b/x86_64-w64-mingw32/lib32/libquartz.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libqutil.a b/x86_64-w64-mingw32/lib32/libqutil.a
index b8cc7f1..c20d4ba 100644
--- a/x86_64-w64-mingw32/lib32/libqutil.a
+++ b/x86_64-w64-mingw32/lib32/libqutil.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libqwave.a b/x86_64-w64-mingw32/lib32/libqwave.a
index cfe7d49..7079fb4 100644
--- a/x86_64-w64-mingw32/lib32/libqwave.a
+++ b/x86_64-w64-mingw32/lib32/libqwave.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/librapi.a b/x86_64-w64-mingw32/lib32/librapi.a
index e562d2f..2f315ab 100644
--- a/x86_64-w64-mingw32/lib32/librapi.a
+++ b/x86_64-w64-mingw32/lib32/librapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/librasapi32.a b/x86_64-w64-mingw32/lib32/librasapi32.a
index b82eafc..d8f5752 100644
--- a/x86_64-w64-mingw32/lib32/librasapi32.a
+++ b/x86_64-w64-mingw32/lib32/librasapi32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/librasdlg.a b/x86_64-w64-mingw32/lib32/librasdlg.a
index b6fd05a..96b6150 100644
--- a/x86_64-w64-mingw32/lib32/librasdlg.a
+++ b/x86_64-w64-mingw32/lib32/librasdlg.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libresutil.a b/x86_64-w64-mingw32/lib32/libresutil.a
index dc5602b..fdc6ce3 100644
--- a/x86_64-w64-mingw32/lib32/libresutil.a
+++ b/x86_64-w64-mingw32/lib32/libresutil.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/librpcdce4.a b/x86_64-w64-mingw32/lib32/librpcdce4.a
index 7d63ac5..bee4248 100644
--- a/x86_64-w64-mingw32/lib32/librpcdce4.a
+++ b/x86_64-w64-mingw32/lib32/librpcdce4.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/librpcdiag.a b/x86_64-w64-mingw32/lib32/librpcdiag.a
index 123c9c4..bbfd425 100644
--- a/x86_64-w64-mingw32/lib32/librpcdiag.a
+++ b/x86_64-w64-mingw32/lib32/librpcdiag.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/librpchttp.a b/x86_64-w64-mingw32/lib32/librpchttp.a
index 7acfc90..4ba7b5f 100644
--- a/x86_64-w64-mingw32/lib32/librpchttp.a
+++ b/x86_64-w64-mingw32/lib32/librpchttp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/librpcns4.a b/x86_64-w64-mingw32/lib32/librpcns4.a
index 7b7777d..190597e 100644
--- a/x86_64-w64-mingw32/lib32/librpcns4.a
+++ b/x86_64-w64-mingw32/lib32/librpcns4.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/librpcrt4.a b/x86_64-w64-mingw32/lib32/librpcrt4.a
index 9ac5d27..3110089 100644
--- a/x86_64-w64-mingw32/lib32/librpcrt4.a
+++ b/x86_64-w64-mingw32/lib32/librpcrt4.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/librstrmgr.a b/x86_64-w64-mingw32/lib32/librstrmgr.a
index 918cc69..296c630 100644
--- a/x86_64-w64-mingw32/lib32/librstrmgr.a
+++ b/x86_64-w64-mingw32/lib32/librstrmgr.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/librtm.a b/x86_64-w64-mingw32/lib32/librtm.a
index d7e7295..4c627a7 100644
--- a/x86_64-w64-mingw32/lib32/librtm.a
+++ b/x86_64-w64-mingw32/lib32/librtm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/librtutils.a b/x86_64-w64-mingw32/lib32/librtutils.a
index d39d2e8..a8aedf8 100644
--- a/x86_64-w64-mingw32/lib32/librtutils.a
+++ b/x86_64-w64-mingw32/lib32/librtutils.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libsamcli.a b/x86_64-w64-mingw32/lib32/libsamcli.a
index 0467b60..b2093ae 100644
--- a/x86_64-w64-mingw32/lib32/libsamcli.a
+++ b/x86_64-w64-mingw32/lib32/libsamcli.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libsapi.a b/x86_64-w64-mingw32/lib32/libsapi.a
new file mode 100644
index 0000000..4fce3ad
--- /dev/null
+++ b/x86_64-w64-mingw32/lib32/libsapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libschedcli.a b/x86_64-w64-mingw32/lib32/libschedcli.a
index 5ecd9c6..0429498 100644
--- a/x86_64-w64-mingw32/lib32/libschedcli.a
+++ b/x86_64-w64-mingw32/lib32/libschedcli.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libscrnsave.a b/x86_64-w64-mingw32/lib32/libscrnsave.a
index d109cdc..72b8053 100644
--- a/x86_64-w64-mingw32/lib32/libscrnsave.a
+++ b/x86_64-w64-mingw32/lib32/libscrnsave.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libscrnsavw.a b/x86_64-w64-mingw32/lib32/libscrnsavw.a
index b6eeeff..574a9ed 100644
--- a/x86_64-w64-mingw32/lib32/libscrnsavw.a
+++ b/x86_64-w64-mingw32/lib32/libscrnsavw.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libscsiport.a b/x86_64-w64-mingw32/lib32/libscsiport.a
index ea35337..94e0c4e 100644
--- a/x86_64-w64-mingw32/lib32/libscsiport.a
+++ b/x86_64-w64-mingw32/lib32/libscsiport.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libsecur32.a b/x86_64-w64-mingw32/lib32/libsecur32.a
index 16ef0c3..c6c8cba 100644
--- a/x86_64-w64-mingw32/lib32/libsecur32.a
+++ b/x86_64-w64-mingw32/lib32/libsecur32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libsensorsapi.a b/x86_64-w64-mingw32/lib32/libsensorsapi.a
index c613271..2c425d3 100644
--- a/x86_64-w64-mingw32/lib32/libsensorsapi.a
+++ b/x86_64-w64-mingw32/lib32/libsensorsapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libsetupapi.a b/x86_64-w64-mingw32/lib32/libsetupapi.a
index 5741b41..eb40b13 100644
--- a/x86_64-w64-mingw32/lib32/libsetupapi.a
+++ b/x86_64-w64-mingw32/lib32/libsetupapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libshell32.a b/x86_64-w64-mingw32/lib32/libshell32.a
index 20bf7cf..48d4676 100644
--- a/x86_64-w64-mingw32/lib32/libshell32.a
+++ b/x86_64-w64-mingw32/lib32/libshell32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libshfolder.a b/x86_64-w64-mingw32/lib32/libshfolder.a
index 939ccfa..85b6bc7 100644
--- a/x86_64-w64-mingw32/lib32/libshfolder.a
+++ b/x86_64-w64-mingw32/lib32/libshfolder.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libshlwapi.a b/x86_64-w64-mingw32/lib32/libshlwapi.a
index 67f8dbc..781c5d1 100644
--- a/x86_64-w64-mingw32/lib32/libshlwapi.a
+++ b/x86_64-w64-mingw32/lib32/libshlwapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libslc.a b/x86_64-w64-mingw32/lib32/libslc.a
index 1a4bdbf..e62c3d3 100644
--- a/x86_64-w64-mingw32/lib32/libslc.a
+++ b/x86_64-w64-mingw32/lib32/libslc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libslcext.a b/x86_64-w64-mingw32/lib32/libslcext.a
index ad17400..aef2b44 100644
--- a/x86_64-w64-mingw32/lib32/libslcext.a
+++ b/x86_64-w64-mingw32/lib32/libslcext.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libslwga.a b/x86_64-w64-mingw32/lib32/libslwga.a
index b5cbe5f..5cbd64d 100644
--- a/x86_64-w64-mingw32/lib32/libslwga.a
+++ b/x86_64-w64-mingw32/lib32/libslwga.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libsnmpapi.a b/x86_64-w64-mingw32/lib32/libsnmpapi.a
index 583ade3..4a9e709 100644
--- a/x86_64-w64-mingw32/lib32/libsnmpapi.a
+++ b/x86_64-w64-mingw32/lib32/libsnmpapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libspoolss.a b/x86_64-w64-mingw32/lib32/libspoolss.a
index fcea7a3..a5ca324 100644
--- a/x86_64-w64-mingw32/lib32/libspoolss.a
+++ b/x86_64-w64-mingw32/lib32/libspoolss.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libsrvcli.a b/x86_64-w64-mingw32/lib32/libsrvcli.a
index 8ee7dd6..fc655f1 100644
--- a/x86_64-w64-mingw32/lib32/libsrvcli.a
+++ b/x86_64-w64-mingw32/lib32/libsrvcli.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libssp.a b/x86_64-w64-mingw32/lib32/libssp.a
index 53d2ac1..e2dc579 100644
--- a/x86_64-w64-mingw32/lib32/libssp.a
+++ b/x86_64-w64-mingw32/lib32/libssp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libssp_nonshared.a b/x86_64-w64-mingw32/lib32/libssp_nonshared.a
index f1d540b..ce919be 100644
--- a/x86_64-w64-mingw32/lib32/libssp_nonshared.a
+++ b/x86_64-w64-mingw32/lib32/libssp_nonshared.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libsspicli.a b/x86_64-w64-mingw32/lib32/libsspicli.a
index c2b5291..e65206b 100644
--- a/x86_64-w64-mingw32/lib32/libsspicli.a
+++ b/x86_64-w64-mingw32/lib32/libsspicli.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libstdc++.a b/x86_64-w64-mingw32/lib32/libstdc++.a
index 7736d36..9bec70f 100644
--- a/x86_64-w64-mingw32/lib32/libstdc++.a
+++ b/x86_64-w64-mingw32/lib32/libstdc++.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libstrmiids.a b/x86_64-w64-mingw32/lib32/libstrmiids.a
index 5aea884..b685dd6 100644
--- a/x86_64-w64-mingw32/lib32/libstrmiids.a
+++ b/x86_64-w64-mingw32/lib32/libstrmiids.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libsupc++.a b/x86_64-w64-mingw32/lib32/libsupc++.a
index d7b0415..455e3eb 100644
--- a/x86_64-w64-mingw32/lib32/libsupc++.a
+++ b/x86_64-w64-mingw32/lib32/libsupc++.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libsvrapi.a b/x86_64-w64-mingw32/lib32/libsvrapi.a
index 7cdf262..6cba428 100644
--- a/x86_64-w64-mingw32/lib32/libsvrapi.a
+++ b/x86_64-w64-mingw32/lib32/libsvrapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libsxs.a b/x86_64-w64-mingw32/lib32/libsxs.a
index 7967172..ab8a8ec 100644
--- a/x86_64-w64-mingw32/lib32/libsxs.a
+++ b/x86_64-w64-mingw32/lib32/libsxs.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libt2embed.a b/x86_64-w64-mingw32/lib32/libt2embed.a
index b38fe85..2a5404d 100644
--- a/x86_64-w64-mingw32/lib32/libt2embed.a
+++ b/x86_64-w64-mingw32/lib32/libt2embed.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libtapi32.a b/x86_64-w64-mingw32/lib32/libtapi32.a
index 0df692b..7189f9d 100644
--- a/x86_64-w64-mingw32/lib32/libtapi32.a
+++ b/x86_64-w64-mingw32/lib32/libtapi32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libtbs.a b/x86_64-w64-mingw32/lib32/libtbs.a
index 7032a88..0a345f1 100644
--- a/x86_64-w64-mingw32/lib32/libtbs.a
+++ b/x86_64-w64-mingw32/lib32/libtbs.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libtdh.a b/x86_64-w64-mingw32/lib32/libtdh.a
index 91fa532..0b5e982 100644
--- a/x86_64-w64-mingw32/lib32/libtdh.a
+++ b/x86_64-w64-mingw32/lib32/libtdh.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libtdi.a b/x86_64-w64-mingw32/lib32/libtdi.a
index 685c04d..d17e14e 100644
--- a/x86_64-w64-mingw32/lib32/libtdi.a
+++ b/x86_64-w64-mingw32/lib32/libtdi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libtxfw32.a b/x86_64-w64-mingw32/lib32/libtxfw32.a
index 9a02048..ebd4cbf 100644
--- a/x86_64-w64-mingw32/lib32/libtxfw32.a
+++ b/x86_64-w64-mingw32/lib32/libtxfw32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/liburl.a b/x86_64-w64-mingw32/lib32/liburl.a
index 29a4bad..7c0358c 100644
--- a/x86_64-w64-mingw32/lib32/liburl.a
+++ b/x86_64-w64-mingw32/lib32/liburl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/liburlmon.a b/x86_64-w64-mingw32/lib32/liburlmon.a
index 4eab32a..8e0654e 100644
--- a/x86_64-w64-mingw32/lib32/liburlmon.a
+++ b/x86_64-w64-mingw32/lib32/liburlmon.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libusbcamd.a b/x86_64-w64-mingw32/lib32/libusbcamd.a
index 13e7810..33025ed 100644
--- a/x86_64-w64-mingw32/lib32/libusbcamd.a
+++ b/x86_64-w64-mingw32/lib32/libusbcamd.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libusbcamd2.a b/x86_64-w64-mingw32/lib32/libusbcamd2.a
index 830b816..5181cdc 100644
--- a/x86_64-w64-mingw32/lib32/libusbcamd2.a
+++ b/x86_64-w64-mingw32/lib32/libusbcamd2.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libusbd.a b/x86_64-w64-mingw32/lib32/libusbd.a
index 7f6f32e..1ae3fe8 100644
--- a/x86_64-w64-mingw32/lib32/libusbd.a
+++ b/x86_64-w64-mingw32/lib32/libusbd.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libusbport.a b/x86_64-w64-mingw32/lib32/libusbport.a
index 49b246c..22a84b9 100644
--- a/x86_64-w64-mingw32/lib32/libusbport.a
+++ b/x86_64-w64-mingw32/lib32/libusbport.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libuser32.a b/x86_64-w64-mingw32/lib32/libuser32.a
index ea8e4da..93e04e3 100644
--- a/x86_64-w64-mingw32/lib32/libuser32.a
+++ b/x86_64-w64-mingw32/lib32/libuser32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libuserenv.a b/x86_64-w64-mingw32/lib32/libuserenv.a
index 718380f..5a45f25 100644
--- a/x86_64-w64-mingw32/lib32/libuserenv.a
+++ b/x86_64-w64-mingw32/lib32/libuserenv.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libusp10.a b/x86_64-w64-mingw32/lib32/libusp10.a
index aa2f41d..386f62c 100644
--- a/x86_64-w64-mingw32/lib32/libusp10.a
+++ b/x86_64-w64-mingw32/lib32/libusp10.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libuuid.a b/x86_64-w64-mingw32/lib32/libuuid.a
index 20117e5..01de1ee 100644
--- a/x86_64-w64-mingw32/lib32/libuuid.a
+++ b/x86_64-w64-mingw32/lib32/libuuid.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libuxtheme.a b/x86_64-w64-mingw32/lib32/libuxtheme.a
index 4b9f8ae..9444f6f 100644
--- a/x86_64-w64-mingw32/lib32/libuxtheme.a
+++ b/x86_64-w64-mingw32/lib32/libuxtheme.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libvdmdbg.a b/x86_64-w64-mingw32/lib32/libvdmdbg.a
index bb5346b..eccf09d 100644
--- a/x86_64-w64-mingw32/lib32/libvdmdbg.a
+++ b/x86_64-w64-mingw32/lib32/libvdmdbg.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libversion.a b/x86_64-w64-mingw32/lib32/libversion.a
index 4fff4b2..b33dead 100644
--- a/x86_64-w64-mingw32/lib32/libversion.a
+++ b/x86_64-w64-mingw32/lib32/libversion.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libvfw32.a b/x86_64-w64-mingw32/lib32/libvfw32.a
index 31aaa65..5d44be4 100644
--- a/x86_64-w64-mingw32/lib32/libvfw32.a
+++ b/x86_64-w64-mingw32/lib32/libvfw32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libvideoprt.a b/x86_64-w64-mingw32/lib32/libvideoprt.a
index c9a2943..76806f2 100644
--- a/x86_64-w64-mingw32/lib32/libvideoprt.a
+++ b/x86_64-w64-mingw32/lib32/libvideoprt.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libvirtdisk.a b/x86_64-w64-mingw32/lib32/libvirtdisk.a
index d607b33..25dbb6c 100644
--- a/x86_64-w64-mingw32/lib32/libvirtdisk.a
+++ b/x86_64-w64-mingw32/lib32/libvirtdisk.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libvss_ps.a b/x86_64-w64-mingw32/lib32/libvss_ps.a
index f9b2c38..594a45a 100644
--- a/x86_64-w64-mingw32/lib32/libvss_ps.a
+++ b/x86_64-w64-mingw32/lib32/libvss_ps.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libvssapi.a b/x86_64-w64-mingw32/lib32/libvssapi.a
index 8b5a7cb..00627f9 100644
--- a/x86_64-w64-mingw32/lib32/libvssapi.a
+++ b/x86_64-w64-mingw32/lib32/libvssapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libvsstrace.a b/x86_64-w64-mingw32/lib32/libvsstrace.a
index 1d747fb..ce219f4 100644
--- a/x86_64-w64-mingw32/lib32/libvsstrace.a
+++ b/x86_64-w64-mingw32/lib32/libvsstrace.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwbemuuid.a b/x86_64-w64-mingw32/lib32/libwbemuuid.a
index f61a7d7..c6836dd 100644
--- a/x86_64-w64-mingw32/lib32/libwbemuuid.a
+++ b/x86_64-w64-mingw32/lib32/libwbemuuid.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwdsclient.a b/x86_64-w64-mingw32/lib32/libwdsclient.a
index 673f4de..5b832bd 100644
--- a/x86_64-w64-mingw32/lib32/libwdsclient.a
+++ b/x86_64-w64-mingw32/lib32/libwdsclient.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwdsclientapi.a b/x86_64-w64-mingw32/lib32/libwdsclientapi.a
index 4f0edb7..a7bb549 100644
--- a/x86_64-w64-mingw32/lib32/libwdsclientapi.a
+++ b/x86_64-w64-mingw32/lib32/libwdsclientapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwdscore.a b/x86_64-w64-mingw32/lib32/libwdscore.a
index eb0cf6a..80ac78a 100644
--- a/x86_64-w64-mingw32/lib32/libwdscore.a
+++ b/x86_64-w64-mingw32/lib32/libwdscore.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwdscsl.a b/x86_64-w64-mingw32/lib32/libwdscsl.a
index 104d352..0743660 100644
--- a/x86_64-w64-mingw32/lib32/libwdscsl.a
+++ b/x86_64-w64-mingw32/lib32/libwdscsl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwdsimage.a b/x86_64-w64-mingw32/lib32/libwdsimage.a
index 39df73b..d099299 100644
--- a/x86_64-w64-mingw32/lib32/libwdsimage.a
+++ b/x86_64-w64-mingw32/lib32/libwdsimage.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwdstptc.a b/x86_64-w64-mingw32/lib32/libwdstptc.a
index 4351977..fd3adcd 100644
--- a/x86_64-w64-mingw32/lib32/libwdstptc.a
+++ b/x86_64-w64-mingw32/lib32/libwdstptc.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwdsupgcompl.a b/x86_64-w64-mingw32/lib32/libwdsupgcompl.a
index 974b37b..92ca0f6 100644
--- a/x86_64-w64-mingw32/lib32/libwdsupgcompl.a
+++ b/x86_64-w64-mingw32/lib32/libwdsupgcompl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwdsutil.a b/x86_64-w64-mingw32/lib32/libwdsutil.a
index de20b4c..4fda8c9 100644
--- a/x86_64-w64-mingw32/lib32/libwdsutil.a
+++ b/x86_64-w64-mingw32/lib32/libwdsutil.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwecapi.a b/x86_64-w64-mingw32/lib32/libwecapi.a
index 8bee233..0f01d15 100644
--- a/x86_64-w64-mingw32/lib32/libwecapi.a
+++ b/x86_64-w64-mingw32/lib32/libwecapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwer.a b/x86_64-w64-mingw32/lib32/libwer.a
index ec1b43d..e996990 100644
--- a/x86_64-w64-mingw32/lib32/libwer.a
+++ b/x86_64-w64-mingw32/lib32/libwer.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwevtapi.a b/x86_64-w64-mingw32/lib32/libwevtapi.a
index 4519fba..73f4da9 100644
--- a/x86_64-w64-mingw32/lib32/libwevtapi.a
+++ b/x86_64-w64-mingw32/lib32/libwevtapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwevtfwd.a b/x86_64-w64-mingw32/lib32/libwevtfwd.a
index 6fcbacf..3f6ddfc 100644
--- a/x86_64-w64-mingw32/lib32/libwevtfwd.a
+++ b/x86_64-w64-mingw32/lib32/libwevtfwd.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwiadss.a b/x86_64-w64-mingw32/lib32/libwiadss.a
index 1eb1aa4..189d92d 100644
--- a/x86_64-w64-mingw32/lib32/libwiadss.a
+++ b/x86_64-w64-mingw32/lib32/libwiadss.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwin32k.a b/x86_64-w64-mingw32/lib32/libwin32k.a
index f8b459b..7abebe9 100644
--- a/x86_64-w64-mingw32/lib32/libwin32k.a
+++ b/x86_64-w64-mingw32/lib32/libwin32k.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwin32spl.a b/x86_64-w64-mingw32/lib32/libwin32spl.a
index 35a4ca8..fbaea37 100644
--- a/x86_64-w64-mingw32/lib32/libwin32spl.a
+++ b/x86_64-w64-mingw32/lib32/libwin32spl.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwindowscodecs.a b/x86_64-w64-mingw32/lib32/libwindowscodecs.a
index 05e0a8e..8b51f76 100644
--- a/x86_64-w64-mingw32/lib32/libwindowscodecs.a
+++ b/x86_64-w64-mingw32/lib32/libwindowscodecs.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwinhttp.a b/x86_64-w64-mingw32/lib32/libwinhttp.a
index ae1f94b..f8b8bfc 100644
--- a/x86_64-w64-mingw32/lib32/libwinhttp.a
+++ b/x86_64-w64-mingw32/lib32/libwinhttp.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwininet.a b/x86_64-w64-mingw32/lib32/libwininet.a
index 567f951..1801a03 100644
--- a/x86_64-w64-mingw32/lib32/libwininet.a
+++ b/x86_64-w64-mingw32/lib32/libwininet.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwinmm.a b/x86_64-w64-mingw32/lib32/libwinmm.a
index abce86a..53e5754 100644
--- a/x86_64-w64-mingw32/lib32/libwinmm.a
+++ b/x86_64-w64-mingw32/lib32/libwinmm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwinpthread-1.dll b/x86_64-w64-mingw32/lib32/libwinpthread-1.dll
index 94e343a..3aa88d7 100755
--- a/x86_64-w64-mingw32/lib32/libwinpthread-1.dll
+++ b/x86_64-w64-mingw32/lib32/libwinpthread-1.dll
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwinpthread.a b/x86_64-w64-mingw32/lib32/libwinpthread.a
index 94093e6..593ba58 100644
--- a/x86_64-w64-mingw32/lib32/libwinpthread.a
+++ b/x86_64-w64-mingw32/lib32/libwinpthread.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwinpthread.dll.a b/x86_64-w64-mingw32/lib32/libwinpthread.dll.a
index 556d91d..082d8db 100755
--- a/x86_64-w64-mingw32/lib32/libwinpthread.dll.a
+++ b/x86_64-w64-mingw32/lib32/libwinpthread.dll.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwinscard.a b/x86_64-w64-mingw32/lib32/libwinscard.a
index 414817e..1b8a504 100644
--- a/x86_64-w64-mingw32/lib32/libwinscard.a
+++ b/x86_64-w64-mingw32/lib32/libwinscard.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwinspool.a b/x86_64-w64-mingw32/lib32/libwinspool.a
index 14500d4..e5ad53b 100644
--- a/x86_64-w64-mingw32/lib32/libwinspool.a
+++ b/x86_64-w64-mingw32/lib32/libwinspool.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwinstrm.a b/x86_64-w64-mingw32/lib32/libwinstrm.a
index 6281b5c..5a73eca 100644
--- a/x86_64-w64-mingw32/lib32/libwinstrm.a
+++ b/x86_64-w64-mingw32/lib32/libwinstrm.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwintrust.a b/x86_64-w64-mingw32/lib32/libwintrust.a
index ba9930b..71868e3 100644
--- a/x86_64-w64-mingw32/lib32/libwintrust.a
+++ b/x86_64-w64-mingw32/lib32/libwintrust.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwinusb.a b/x86_64-w64-mingw32/lib32/libwinusb.a
index 13f0fed..21b66e9 100644
--- a/x86_64-w64-mingw32/lib32/libwinusb.a
+++ b/x86_64-w64-mingw32/lib32/libwinusb.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwkscli.a b/x86_64-w64-mingw32/lib32/libwkscli.a
index 2253e29..5e39ce0 100644
--- a/x86_64-w64-mingw32/lib32/libwkscli.a
+++ b/x86_64-w64-mingw32/lib32/libwkscli.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwlanapi.a b/x86_64-w64-mingw32/lib32/libwlanapi.a
index d8f9c98..214bebf 100644
--- a/x86_64-w64-mingw32/lib32/libwlanapi.a
+++ b/x86_64-w64-mingw32/lib32/libwlanapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwlanui.a b/x86_64-w64-mingw32/lib32/libwlanui.a
index 5dd0864..1375883 100644
--- a/x86_64-w64-mingw32/lib32/libwlanui.a
+++ b/x86_64-w64-mingw32/lib32/libwlanui.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwlanutil.a b/x86_64-w64-mingw32/lib32/libwlanutil.a
index c6a7ffd..4a67b37 100644
--- a/x86_64-w64-mingw32/lib32/libwlanutil.a
+++ b/x86_64-w64-mingw32/lib32/libwlanutil.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwldap32.a b/x86_64-w64-mingw32/lib32/libwldap32.a
index be92993..249b361 100644
--- a/x86_64-w64-mingw32/lib32/libwldap32.a
+++ b/x86_64-w64-mingw32/lib32/libwldap32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwmcodecdspuuid.a b/x86_64-w64-mingw32/lib32/libwmcodecdspuuid.a
index e860560..c4bccef 100644
--- a/x86_64-w64-mingw32/lib32/libwmcodecdspuuid.a
+++ b/x86_64-w64-mingw32/lib32/libwmcodecdspuuid.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwmilib.a b/x86_64-w64-mingw32/lib32/libwmilib.a
index 0d14647..c3f6970 100644
--- a/x86_64-w64-mingw32/lib32/libwmilib.a
+++ b/x86_64-w64-mingw32/lib32/libwmilib.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwow32.a b/x86_64-w64-mingw32/lib32/libwow32.a
index 210a219..78f2b36 100644
--- a/x86_64-w64-mingw32/lib32/libwow32.a
+++ b/x86_64-w64-mingw32/lib32/libwow32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libws2_32.a b/x86_64-w64-mingw32/lib32/libws2_32.a
index f230671..50f17af 100644
--- a/x86_64-w64-mingw32/lib32/libws2_32.a
+++ b/x86_64-w64-mingw32/lib32/libws2_32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwsdapi.a b/x86_64-w64-mingw32/lib32/libwsdapi.a
index 7667d27..c0051cb 100644
--- a/x86_64-w64-mingw32/lib32/libwsdapi.a
+++ b/x86_64-w64-mingw32/lib32/libwsdapi.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwsnmp32.a b/x86_64-w64-mingw32/lib32/libwsnmp32.a
index 3abaa0e..afbc2e9 100644
--- a/x86_64-w64-mingw32/lib32/libwsnmp32.a
+++ b/x86_64-w64-mingw32/lib32/libwsnmp32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwsock32.a b/x86_64-w64-mingw32/lib32/libwsock32.a
index 158c97b..5c7f1d3 100644
--- a/x86_64-w64-mingw32/lib32/libwsock32.a
+++ b/x86_64-w64-mingw32/lib32/libwsock32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwst.a b/x86_64-w64-mingw32/lib32/libwst.a
index 1135a14..423acc1 100644
--- a/x86_64-w64-mingw32/lib32/libwst.a
+++ b/x86_64-w64-mingw32/lib32/libwst.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libwtsapi32.a b/x86_64-w64-mingw32/lib32/libwtsapi32.a
index 1a3faf4..a9e26db 100644
--- a/x86_64-w64-mingw32/lib32/libwtsapi32.a
+++ b/x86_64-w64-mingw32/lib32/libwtsapi32.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libx3daudio.a b/x86_64-w64-mingw32/lib32/libx3daudio.a
index b8d1cdf..f009ac0 100644
--- a/x86_64-w64-mingw32/lib32/libx3daudio.a
+++ b/x86_64-w64-mingw32/lib32/libx3daudio.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libx3daudio1_2.a b/x86_64-w64-mingw32/lib32/libx3daudio1_2.a
index 82cc76b..1d647f1 100644
--- a/x86_64-w64-mingw32/lib32/libx3daudio1_2.a
+++ b/x86_64-w64-mingw32/lib32/libx3daudio1_2.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libx3daudio1_3.a b/x86_64-w64-mingw32/lib32/libx3daudio1_3.a
index ee0930b..27ee2c1 100644
--- a/x86_64-w64-mingw32/lib32/libx3daudio1_3.a
+++ b/x86_64-w64-mingw32/lib32/libx3daudio1_3.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libx3daudio1_4.a b/x86_64-w64-mingw32/lib32/libx3daudio1_4.a
index 331d32e..31036a8 100644
--- a/x86_64-w64-mingw32/lib32/libx3daudio1_4.a
+++ b/x86_64-w64-mingw32/lib32/libx3daudio1_4.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libx3daudio1_5.a b/x86_64-w64-mingw32/lib32/libx3daudio1_5.a
index c3eb7d1..10b9e27 100644
--- a/x86_64-w64-mingw32/lib32/libx3daudio1_5.a
+++ b/x86_64-w64-mingw32/lib32/libx3daudio1_5.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libx3daudio1_6.a b/x86_64-w64-mingw32/lib32/libx3daudio1_6.a
index ad80007..fc1c312 100644
--- a/x86_64-w64-mingw32/lib32/libx3daudio1_6.a
+++ b/x86_64-w64-mingw32/lib32/libx3daudio1_6.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libx3daudio1_7.a b/x86_64-w64-mingw32/lib32/libx3daudio1_7.a
index 35504d6..29ee75e 100644
--- a/x86_64-w64-mingw32/lib32/libx3daudio1_7.a
+++ b/x86_64-w64-mingw32/lib32/libx3daudio1_7.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libx3daudiod1_7.a b/x86_64-w64-mingw32/lib32/libx3daudiod1_7.a
index 1906261..bf32fd8 100644
--- a/x86_64-w64-mingw32/lib32/libx3daudiod1_7.a
+++ b/x86_64-w64-mingw32/lib32/libx3daudiod1_7.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libxapofx.a b/x86_64-w64-mingw32/lib32/libxapofx.a
index 449bf60..dc1d6e3 100644
--- a/x86_64-w64-mingw32/lib32/libxapofx.a
+++ b/x86_64-w64-mingw32/lib32/libxapofx.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libxapofx1_0.a b/x86_64-w64-mingw32/lib32/libxapofx1_0.a
index d9eb77f..887e55e 100644
--- a/x86_64-w64-mingw32/lib32/libxapofx1_0.a
+++ b/x86_64-w64-mingw32/lib32/libxapofx1_0.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libxapofx1_1.a b/x86_64-w64-mingw32/lib32/libxapofx1_1.a
index 9375028..7f880fa 100644
--- a/x86_64-w64-mingw32/lib32/libxapofx1_1.a
+++ b/x86_64-w64-mingw32/lib32/libxapofx1_1.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libxapofx1_2.a b/x86_64-w64-mingw32/lib32/libxapofx1_2.a
index 7372054..e15695d 100644
--- a/x86_64-w64-mingw32/lib32/libxapofx1_2.a
+++ b/x86_64-w64-mingw32/lib32/libxapofx1_2.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libxapofx1_3.a b/x86_64-w64-mingw32/lib32/libxapofx1_3.a
index bc46a5e..009df9e 100644
--- a/x86_64-w64-mingw32/lib32/libxapofx1_3.a
+++ b/x86_64-w64-mingw32/lib32/libxapofx1_3.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libxapofx1_4.a b/x86_64-w64-mingw32/lib32/libxapofx1_4.a
index d1b9e9d..3b3d778 100644
--- a/x86_64-w64-mingw32/lib32/libxapofx1_4.a
+++ b/x86_64-w64-mingw32/lib32/libxapofx1_4.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libxapofx1_5.a b/x86_64-w64-mingw32/lib32/libxapofx1_5.a
index 4a8e2c8..574d3e7 100644
--- a/x86_64-w64-mingw32/lib32/libxapofx1_5.a
+++ b/x86_64-w64-mingw32/lib32/libxapofx1_5.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libxapofxd1_5.a b/x86_64-w64-mingw32/lib32/libxapofxd1_5.a
index 171d722..c23d214 100644
--- a/x86_64-w64-mingw32/lib32/libxapofxd1_5.a
+++ b/x86_64-w64-mingw32/lib32/libxapofxd1_5.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libxaudio2_8.a b/x86_64-w64-mingw32/lib32/libxaudio2_8.a
index e2e8364..22762af 100644
--- a/x86_64-w64-mingw32/lib32/libxaudio2_8.a
+++ b/x86_64-w64-mingw32/lib32/libxaudio2_8.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libxinput.a b/x86_64-w64-mingw32/lib32/libxinput.a
index e2af9e1..8544e0c 100644
--- a/x86_64-w64-mingw32/lib32/libxinput.a
+++ b/x86_64-w64-mingw32/lib32/libxinput.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libxinput1_1.a b/x86_64-w64-mingw32/lib32/libxinput1_1.a
index 8a2121d..8d5f2b5 100644
--- a/x86_64-w64-mingw32/lib32/libxinput1_1.a
+++ b/x86_64-w64-mingw32/lib32/libxinput1_1.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libxinput1_2.a b/x86_64-w64-mingw32/lib32/libxinput1_2.a
index 7c12734..d2dca07 100644
--- a/x86_64-w64-mingw32/lib32/libxinput1_2.a
+++ b/x86_64-w64-mingw32/lib32/libxinput1_2.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libxinput1_3.a b/x86_64-w64-mingw32/lib32/libxinput1_3.a
index 4f42832..0678b5e 100644
--- a/x86_64-w64-mingw32/lib32/libxinput1_3.a
+++ b/x86_64-w64-mingw32/lib32/libxinput1_3.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libxinput1_4.a b/x86_64-w64-mingw32/lib32/libxinput1_4.a
index 3df0682..82998b1 100644
--- a/x86_64-w64-mingw32/lib32/libxinput1_4.a
+++ b/x86_64-w64-mingw32/lib32/libxinput1_4.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/libxinput9_1_0.a b/x86_64-w64-mingw32/lib32/libxinput9_1_0.a
index 57bfec9..db83c91 100644
--- a/x86_64-w64-mingw32/lib32/libxinput9_1_0.a
+++ b/x86_64-w64-mingw32/lib32/libxinput9_1_0.a
Binary files differ
diff --git a/x86_64-w64-mingw32/lib32/txtmode.o b/x86_64-w64-mingw32/lib32/txtmode.o
index 50f9a94..74e8cc5 100644
--- a/x86_64-w64-mingw32/lib32/txtmode.o
+++ b/x86_64-w64-mingw32/lib32/txtmode.o
Binary files differ
