/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the w64 mingw-runtime package.
 * No warranty is given; refer to the file DISCLAIMER within this package.
 */
#if !defined(__cplusplus) || defined(CINTERFACE)
#include "mshtmlc.h"
#else

#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 440
#endif

#include "rpc.h"
#include "rpcndr.h"

#ifndef __RPCNDR_H_VERSION__
#error This stub requires an updated version of <rpcndr.h>
#endif

#ifndef COM_NO_WINDOWS_H
#include "windows.h"
#include "ole2.h"
#endif

#ifndef __mshtml_h__
#define __mshtml_h__

#ifndef __IHTMLFiltersCollection_FWD_DEFINED__
#define __IHTMLFiltersCollection_FWD_DEFINED__
typedef interface IHTMLFiltersCollection IHTMLFiltersCollection;
#endif

#ifndef __IHTMLEventObj_FWD_DEFINED__
#define __IHTMLEventObj_FWD_DEFINED__
typedef interface IHTMLEventObj IHTMLEventObj;
#endif

#ifndef __IElementBehaviorSite_FWD_DEFINED__
#define __IElementBehaviorSite_FWD_DEFINED__
typedef interface IElementBehaviorSite IElementBehaviorSite;
#endif

#ifndef __IElementBehavior_FWD_DEFINED__
#define __IElementBehavior_FWD_DEFINED__
typedef interface IElementBehavior IElementBehavior;
#endif

#ifndef __IElementBehaviorFactory_FWD_DEFINED__
#define __IElementBehaviorFactory_FWD_DEFINED__
typedef interface IElementBehaviorFactory IElementBehaviorFactory;
#endif

#ifndef __IElementBehaviorSiteOM_FWD_DEFINED__
#define __IElementBehaviorSiteOM_FWD_DEFINED__
typedef interface IElementBehaviorSiteOM IElementBehaviorSiteOM;
#endif

#ifndef __IElementBehaviorRender_FWD_DEFINED__
#define __IElementBehaviorRender_FWD_DEFINED__
typedef interface IElementBehaviorRender IElementBehaviorRender;
#endif

#ifndef __IElementBehaviorSiteRender_FWD_DEFINED__
#define __IElementBehaviorSiteRender_FWD_DEFINED__
typedef interface IElementBehaviorSiteRender IElementBehaviorSiteRender;
#endif

#ifndef __IHTMLStyle_FWD_DEFINED__
#define __IHTMLStyle_FWD_DEFINED__
typedef interface IHTMLStyle IHTMLStyle;
#endif

#ifndef __IHTMLStyle2_FWD_DEFINED__
#define __IHTMLStyle2_FWD_DEFINED__
typedef interface IHTMLStyle2 IHTMLStyle2;
#endif

#ifndef __IHTMLStyle3_FWD_DEFINED__
#define __IHTMLStyle3_FWD_DEFINED__
typedef interface IHTMLStyle3 IHTMLStyle3;
#endif

#ifndef __IHTMLStyle4_FWD_DEFINED__
#define __IHTMLStyle4_FWD_DEFINED__
typedef interface IHTMLStyle4 IHTMLStyle4;
#endif

#ifndef __IHTMLRuleStyle_FWD_DEFINED__
#define __IHTMLRuleStyle_FWD_DEFINED__
typedef interface IHTMLRuleStyle IHTMLRuleStyle;
#endif

#ifndef __IHTMLRuleStyle2_FWD_DEFINED__
#define __IHTMLRuleStyle2_FWD_DEFINED__
typedef interface IHTMLRuleStyle2 IHTMLRuleStyle2;
#endif

#ifndef __IHTMLRuleStyle3_FWD_DEFINED__
#define __IHTMLRuleStyle3_FWD_DEFINED__
typedef interface IHTMLRuleStyle3 IHTMLRuleStyle3;
#endif

#ifndef __IHTMLRuleStyle4_FWD_DEFINED__
#define __IHTMLRuleStyle4_FWD_DEFINED__
typedef interface IHTMLRuleStyle4 IHTMLRuleStyle4;
#endif

#ifndef __DispHTMLStyle_FWD_DEFINED__
#define __DispHTMLStyle_FWD_DEFINED__
typedef interface DispHTMLStyle DispHTMLStyle;
#endif

#ifndef __HTMLStyle_FWD_DEFINED__
#define __HTMLStyle_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLStyle HTMLStyle;
#else
typedef struct HTMLStyle HTMLStyle;
#endif
#endif

#ifndef __DispHTMLRuleStyle_FWD_DEFINED__
#define __DispHTMLRuleStyle_FWD_DEFINED__
typedef interface DispHTMLRuleStyle DispHTMLRuleStyle;
#endif

#ifndef __HTMLRuleStyle_FWD_DEFINED__
#define __HTMLRuleStyle_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLRuleStyle HTMLRuleStyle;
#else
typedef struct HTMLRuleStyle HTMLRuleStyle;
#endif
#endif

#ifndef __IHTMLRenderStyle_FWD_DEFINED__
#define __IHTMLRenderStyle_FWD_DEFINED__
typedef interface IHTMLRenderStyle IHTMLRenderStyle;
#endif

#ifndef __DispHTMLRenderStyle_FWD_DEFINED__
#define __DispHTMLRenderStyle_FWD_DEFINED__
typedef interface DispHTMLRenderStyle DispHTMLRenderStyle;
#endif

#ifndef __HTMLRenderStyle_FWD_DEFINED__
#define __HTMLRenderStyle_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLRenderStyle HTMLRenderStyle;
#else
typedef struct HTMLRenderStyle HTMLRenderStyle;
#endif
#endif

#ifndef __IHTMLCurrentStyle_FWD_DEFINED__
#define __IHTMLCurrentStyle_FWD_DEFINED__
typedef interface IHTMLCurrentStyle IHTMLCurrentStyle;
#endif

#ifndef __IHTMLCurrentStyle2_FWD_DEFINED__
#define __IHTMLCurrentStyle2_FWD_DEFINED__
typedef interface IHTMLCurrentStyle2 IHTMLCurrentStyle2;
#endif

#ifndef __IHTMLCurrentStyle3_FWD_DEFINED__
#define __IHTMLCurrentStyle3_FWD_DEFINED__
typedef interface IHTMLCurrentStyle3 IHTMLCurrentStyle3;
#endif

#ifndef __DispHTMLCurrentStyle_FWD_DEFINED__
#define __DispHTMLCurrentStyle_FWD_DEFINED__
typedef interface DispHTMLCurrentStyle DispHTMLCurrentStyle;
#endif

#ifndef __HTMLCurrentStyle_FWD_DEFINED__
#define __HTMLCurrentStyle_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLCurrentStyle HTMLCurrentStyle;
#else
typedef struct HTMLCurrentStyle HTMLCurrentStyle;
#endif
#endif

#ifndef __IHTMLElement_FWD_DEFINED__
#define __IHTMLElement_FWD_DEFINED__
typedef interface IHTMLElement IHTMLElement;
#endif

#ifndef __IHTMLRect_FWD_DEFINED__
#define __IHTMLRect_FWD_DEFINED__
typedef interface IHTMLRect IHTMLRect;
#endif

#ifndef __IHTMLRectCollection_FWD_DEFINED__
#define __IHTMLRectCollection_FWD_DEFINED__
typedef interface IHTMLRectCollection IHTMLRectCollection;
#endif

#ifndef __IHTMLDOMNode_FWD_DEFINED__
#define __IHTMLDOMNode_FWD_DEFINED__
typedef interface IHTMLDOMNode IHTMLDOMNode;
#endif

#ifndef __IHTMLDOMNode2_FWD_DEFINED__
#define __IHTMLDOMNode2_FWD_DEFINED__
typedef interface IHTMLDOMNode2 IHTMLDOMNode2;
#endif

#ifndef __IHTMLDOMAttribute_FWD_DEFINED__
#define __IHTMLDOMAttribute_FWD_DEFINED__
typedef interface IHTMLDOMAttribute IHTMLDOMAttribute;
#endif

#ifndef __IHTMLDOMAttribute2_FWD_DEFINED__
#define __IHTMLDOMAttribute2_FWD_DEFINED__
typedef interface IHTMLDOMAttribute2 IHTMLDOMAttribute2;
#endif

#ifndef __IHTMLDOMTextNode_FWD_DEFINED__
#define __IHTMLDOMTextNode_FWD_DEFINED__
typedef interface IHTMLDOMTextNode IHTMLDOMTextNode;
#endif

#ifndef __IHTMLDOMTextNode2_FWD_DEFINED__
#define __IHTMLDOMTextNode2_FWD_DEFINED__
typedef interface IHTMLDOMTextNode2 IHTMLDOMTextNode2;
#endif

#ifndef __IHTMLDOMImplementation_FWD_DEFINED__
#define __IHTMLDOMImplementation_FWD_DEFINED__
typedef interface IHTMLDOMImplementation IHTMLDOMImplementation;
#endif

#ifndef __DispHTMLDOMAttribute_FWD_DEFINED__
#define __DispHTMLDOMAttribute_FWD_DEFINED__
typedef interface DispHTMLDOMAttribute DispHTMLDOMAttribute;
#endif

#ifndef __HTMLDOMAttribute_FWD_DEFINED__
#define __HTMLDOMAttribute_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDOMAttribute HTMLDOMAttribute;
#else
typedef struct HTMLDOMAttribute HTMLDOMAttribute;
#endif
#endif

#ifndef __DispHTMLDOMTextNode_FWD_DEFINED__
#define __DispHTMLDOMTextNode_FWD_DEFINED__
typedef interface DispHTMLDOMTextNode DispHTMLDOMTextNode;
#endif

#ifndef __HTMLDOMTextNode_FWD_DEFINED__
#define __HTMLDOMTextNode_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDOMTextNode HTMLDOMTextNode;
#else
typedef struct HTMLDOMTextNode HTMLDOMTextNode;
#endif
#endif

#ifndef __DispHTMLDOMImplementation_FWD_DEFINED__
#define __DispHTMLDOMImplementation_FWD_DEFINED__
typedef interface DispHTMLDOMImplementation DispHTMLDOMImplementation;
#endif

#ifndef __HTMLDOMImplementation_FWD_DEFINED__
#define __HTMLDOMImplementation_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDOMImplementation HTMLDOMImplementation;
#else
typedef struct HTMLDOMImplementation HTMLDOMImplementation;
#endif
#endif

#ifndef __IHTMLAttributeCollection_FWD_DEFINED__
#define __IHTMLAttributeCollection_FWD_DEFINED__
typedef interface IHTMLAttributeCollection IHTMLAttributeCollection;
#endif

#ifndef __IHTMLAttributeCollection2_FWD_DEFINED__
#define __IHTMLAttributeCollection2_FWD_DEFINED__
typedef interface IHTMLAttributeCollection2 IHTMLAttributeCollection2;
#endif

#ifndef __IHTMLDOMChildrenCollection_FWD_DEFINED__
#define __IHTMLDOMChildrenCollection_FWD_DEFINED__
typedef interface IHTMLDOMChildrenCollection IHTMLDOMChildrenCollection;
#endif

#ifndef __DispHTMLAttributeCollection_FWD_DEFINED__
#define __DispHTMLAttributeCollection_FWD_DEFINED__
typedef interface DispHTMLAttributeCollection DispHTMLAttributeCollection;
#endif

#ifndef __HTMLAttributeCollection_FWD_DEFINED__
#define __HTMLAttributeCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLAttributeCollection HTMLAttributeCollection;
#else
typedef struct HTMLAttributeCollection HTMLAttributeCollection;
#endif
#endif

#ifndef __DispDOMChildrenCollection_FWD_DEFINED__
#define __DispDOMChildrenCollection_FWD_DEFINED__
typedef interface DispDOMChildrenCollection DispDOMChildrenCollection;
#endif

#ifndef __DOMChildrenCollection_FWD_DEFINED__
#define __DOMChildrenCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class DOMChildrenCollection DOMChildrenCollection;
#else
typedef struct DOMChildrenCollection DOMChildrenCollection;
#endif
#endif

#ifndef __HTMLElementEvents2_FWD_DEFINED__
#define __HTMLElementEvents2_FWD_DEFINED__
typedef interface HTMLElementEvents2 HTMLElementEvents2;
#endif

#ifndef __HTMLElementEvents_FWD_DEFINED__
#define __HTMLElementEvents_FWD_DEFINED__
typedef interface HTMLElementEvents HTMLElementEvents;
#endif

#ifndef __IHTMLElementCollection_FWD_DEFINED__
#define __IHTMLElementCollection_FWD_DEFINED__
typedef interface IHTMLElementCollection IHTMLElementCollection;
#endif

#ifndef __IHTMLFiltersCollection_FWD_DEFINED__
#define __IHTMLFiltersCollection_FWD_DEFINED__
typedef interface IHTMLFiltersCollection IHTMLFiltersCollection;
#endif

#ifndef __IHTMLElement2_FWD_DEFINED__
#define __IHTMLElement2_FWD_DEFINED__
typedef interface IHTMLElement2 IHTMLElement2;
#endif

#ifndef __IHTMLElement3_FWD_DEFINED__
#define __IHTMLElement3_FWD_DEFINED__
typedef interface IHTMLElement3 IHTMLElement3;
#endif

#ifndef __IHTMLElement4_FWD_DEFINED__
#define __IHTMLElement4_FWD_DEFINED__
typedef interface IHTMLElement4 IHTMLElement4;
#endif

#ifndef __IHTMLElementRender_FWD_DEFINED__
#define __IHTMLElementRender_FWD_DEFINED__
typedef interface IHTMLElementRender IHTMLElementRender;
#endif

#ifndef __IHTMLUniqueName_FWD_DEFINED__
#define __IHTMLUniqueName_FWD_DEFINED__
typedef interface IHTMLUniqueName IHTMLUniqueName;
#endif

#ifndef __IHTMLDatabinding_FWD_DEFINED__
#define __IHTMLDatabinding_FWD_DEFINED__
typedef interface IHTMLDatabinding IHTMLDatabinding;
#endif

#ifndef __IHTMLDocument_FWD_DEFINED__
#define __IHTMLDocument_FWD_DEFINED__
typedef interface IHTMLDocument IHTMLDocument;
#endif

#ifndef __IHTMLElementDefaults_FWD_DEFINED__
#define __IHTMLElementDefaults_FWD_DEFINED__
typedef interface IHTMLElementDefaults IHTMLElementDefaults;
#endif

#ifndef __DispHTMLDefaults_FWD_DEFINED__
#define __DispHTMLDefaults_FWD_DEFINED__
typedef interface DispHTMLDefaults DispHTMLDefaults;
#endif

#ifndef __HTMLDefaults_FWD_DEFINED__
#define __HTMLDefaults_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDefaults HTMLDefaults;
#else
typedef struct HTMLDefaults HTMLDefaults;
#endif
#endif

#ifndef __IHTCDefaultDispatch_FWD_DEFINED__
#define __IHTCDefaultDispatch_FWD_DEFINED__
typedef interface IHTCDefaultDispatch IHTCDefaultDispatch;
#endif

#ifndef __IHTCPropertyBehavior_FWD_DEFINED__
#define __IHTCPropertyBehavior_FWD_DEFINED__
typedef interface IHTCPropertyBehavior IHTCPropertyBehavior;
#endif

#ifndef __IHTCMethodBehavior_FWD_DEFINED__
#define __IHTCMethodBehavior_FWD_DEFINED__
typedef interface IHTCMethodBehavior IHTCMethodBehavior;
#endif

#ifndef __IHTCEventBehavior_FWD_DEFINED__
#define __IHTCEventBehavior_FWD_DEFINED__
typedef interface IHTCEventBehavior IHTCEventBehavior;
#endif

#ifndef __IHTCAttachBehavior_FWD_DEFINED__
#define __IHTCAttachBehavior_FWD_DEFINED__
typedef interface IHTCAttachBehavior IHTCAttachBehavior;
#endif

#ifndef __IHTCAttachBehavior2_FWD_DEFINED__
#define __IHTCAttachBehavior2_FWD_DEFINED__
typedef interface IHTCAttachBehavior2 IHTCAttachBehavior2;
#endif

#ifndef __IHTCDescBehavior_FWD_DEFINED__
#define __IHTCDescBehavior_FWD_DEFINED__
typedef interface IHTCDescBehavior IHTCDescBehavior;
#endif

#ifndef __DispHTCDefaultDispatch_FWD_DEFINED__
#define __DispHTCDefaultDispatch_FWD_DEFINED__
typedef interface DispHTCDefaultDispatch DispHTCDefaultDispatch;
#endif

#ifndef __HTCDefaultDispatch_FWD_DEFINED__
#define __HTCDefaultDispatch_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTCDefaultDispatch HTCDefaultDispatch;
#else
typedef struct HTCDefaultDispatch HTCDefaultDispatch;
#endif
#endif

#ifndef __DispHTCPropertyBehavior_FWD_DEFINED__
#define __DispHTCPropertyBehavior_FWD_DEFINED__
typedef interface DispHTCPropertyBehavior DispHTCPropertyBehavior;
#endif

#ifndef __HTCPropertyBehavior_FWD_DEFINED__
#define __HTCPropertyBehavior_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTCPropertyBehavior HTCPropertyBehavior;
#else
typedef struct HTCPropertyBehavior HTCPropertyBehavior;
#endif
#endif

#ifndef __DispHTCMethodBehavior_FWD_DEFINED__
#define __DispHTCMethodBehavior_FWD_DEFINED__
typedef interface DispHTCMethodBehavior DispHTCMethodBehavior;
#endif

#ifndef __HTCMethodBehavior_FWD_DEFINED__
#define __HTCMethodBehavior_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTCMethodBehavior HTCMethodBehavior;
#else
typedef struct HTCMethodBehavior HTCMethodBehavior;
#endif
#endif

#ifndef __DispHTCEventBehavior_FWD_DEFINED__
#define __DispHTCEventBehavior_FWD_DEFINED__
typedef interface DispHTCEventBehavior DispHTCEventBehavior;
#endif

#ifndef __HTCEventBehavior_FWD_DEFINED__
#define __HTCEventBehavior_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTCEventBehavior HTCEventBehavior;
#else
typedef struct HTCEventBehavior HTCEventBehavior;
#endif
#endif

#ifndef __DispHTCAttachBehavior_FWD_DEFINED__
#define __DispHTCAttachBehavior_FWD_DEFINED__
typedef interface DispHTCAttachBehavior DispHTCAttachBehavior;
#endif

#ifndef __HTCAttachBehavior_FWD_DEFINED__
#define __HTCAttachBehavior_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTCAttachBehavior HTCAttachBehavior;
#else
typedef struct HTCAttachBehavior HTCAttachBehavior;
#endif
#endif

#ifndef __DispHTCDescBehavior_FWD_DEFINED__
#define __DispHTCDescBehavior_FWD_DEFINED__
typedef interface DispHTCDescBehavior DispHTCDescBehavior;
#endif

#ifndef __HTCDescBehavior_FWD_DEFINED__
#define __HTCDescBehavior_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTCDescBehavior HTCDescBehavior;
#else
typedef struct HTCDescBehavior HTCDescBehavior;
#endif
#endif

#ifndef __IHTMLUrnCollection_FWD_DEFINED__
#define __IHTMLUrnCollection_FWD_DEFINED__
typedef interface IHTMLUrnCollection IHTMLUrnCollection;
#endif

#ifndef __HTMLUrnCollection_FWD_DEFINED__
#define __HTMLUrnCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLUrnCollection HTMLUrnCollection;
#else
typedef struct HTMLUrnCollection HTMLUrnCollection;
#endif
#endif

#ifndef __IHTMLGenericElement_FWD_DEFINED__
#define __IHTMLGenericElement_FWD_DEFINED__
typedef interface IHTMLGenericElement IHTMLGenericElement;
#endif

#ifndef __DispHTMLGenericElement_FWD_DEFINED__
#define __DispHTMLGenericElement_FWD_DEFINED__
typedef interface DispHTMLGenericElement DispHTMLGenericElement;
#endif

#ifndef __HTMLGenericElement_FWD_DEFINED__
#define __HTMLGenericElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLGenericElement HTMLGenericElement;
#else
typedef struct HTMLGenericElement HTMLGenericElement;
#endif
#endif

#ifndef __IHTMLStyleSheetRule_FWD_DEFINED__
#define __IHTMLStyleSheetRule_FWD_DEFINED__
typedef interface IHTMLStyleSheetRule IHTMLStyleSheetRule;
#endif

#ifndef __IHTMLStyleSheetRulesCollection_FWD_DEFINED__
#define __IHTMLStyleSheetRulesCollection_FWD_DEFINED__
typedef interface IHTMLStyleSheetRulesCollection IHTMLStyleSheetRulesCollection;
#endif

#ifndef __HTMLStyleSheetRule_FWD_DEFINED__
#define __HTMLStyleSheetRule_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLStyleSheetRule HTMLStyleSheetRule;
#else
typedef struct HTMLStyleSheetRule HTMLStyleSheetRule;
#endif
#endif

#ifndef __HTMLStyleSheetRulesCollection_FWD_DEFINED__
#define __HTMLStyleSheetRulesCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLStyleSheetRulesCollection HTMLStyleSheetRulesCollection;
#else
typedef struct HTMLStyleSheetRulesCollection HTMLStyleSheetRulesCollection;
#endif
#endif

#ifndef __IHTMLStyleSheetPage_FWD_DEFINED__
#define __IHTMLStyleSheetPage_FWD_DEFINED__
typedef interface IHTMLStyleSheetPage IHTMLStyleSheetPage;
#endif

#ifndef __IHTMLStyleSheetPagesCollection_FWD_DEFINED__
#define __IHTMLStyleSheetPagesCollection_FWD_DEFINED__
typedef interface IHTMLStyleSheetPagesCollection IHTMLStyleSheetPagesCollection;
#endif

#ifndef __HTMLStyleSheetPage_FWD_DEFINED__
#define __HTMLStyleSheetPage_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLStyleSheetPage HTMLStyleSheetPage;
#else
typedef struct HTMLStyleSheetPage HTMLStyleSheetPage;
#endif
#endif

#ifndef __HTMLStyleSheetPagesCollection_FWD_DEFINED__
#define __HTMLStyleSheetPagesCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLStyleSheetPagesCollection HTMLStyleSheetPagesCollection;
#else
typedef struct HTMLStyleSheetPagesCollection HTMLStyleSheetPagesCollection;
#endif
#endif

#ifndef __IHTMLStyleSheetsCollection_FWD_DEFINED__
#define __IHTMLStyleSheetsCollection_FWD_DEFINED__
typedef interface IHTMLStyleSheetsCollection IHTMLStyleSheetsCollection;
#endif

#ifndef __IHTMLStyleSheet_FWD_DEFINED__
#define __IHTMLStyleSheet_FWD_DEFINED__
typedef interface IHTMLStyleSheet IHTMLStyleSheet;
#endif

#ifndef __IHTMLStyleSheet2_FWD_DEFINED__
#define __IHTMLStyleSheet2_FWD_DEFINED__
typedef interface IHTMLStyleSheet2 IHTMLStyleSheet2;
#endif

#ifndef __DispHTMLStyleSheet_FWD_DEFINED__
#define __DispHTMLStyleSheet_FWD_DEFINED__
typedef interface DispHTMLStyleSheet DispHTMLStyleSheet;
#endif

#ifndef __HTMLStyleSheet_FWD_DEFINED__
#define __HTMLStyleSheet_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLStyleSheet HTMLStyleSheet;
#else
typedef struct HTMLStyleSheet HTMLStyleSheet;
#endif
#endif

#ifndef __HTMLStyleSheetsCollection_FWD_DEFINED__
#define __HTMLStyleSheetsCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLStyleSheetsCollection HTMLStyleSheetsCollection;
#else
typedef struct HTMLStyleSheetsCollection HTMLStyleSheetsCollection;
#endif
#endif

#ifndef __HTMLLinkElementEvents2_FWD_DEFINED__
#define __HTMLLinkElementEvents2_FWD_DEFINED__
typedef interface HTMLLinkElementEvents2 HTMLLinkElementEvents2;
#endif

#ifndef __HTMLLinkElementEvents_FWD_DEFINED__
#define __HTMLLinkElementEvents_FWD_DEFINED__
typedef interface HTMLLinkElementEvents HTMLLinkElementEvents;
#endif

#ifndef __IHTMLLinkElement_FWD_DEFINED__
#define __IHTMLLinkElement_FWD_DEFINED__
typedef interface IHTMLLinkElement IHTMLLinkElement;
#endif

#ifndef __IHTMLLinkElement2_FWD_DEFINED__
#define __IHTMLLinkElement2_FWD_DEFINED__
typedef interface IHTMLLinkElement2 IHTMLLinkElement2;
#endif

#ifndef __IHTMLLinkElement3_FWD_DEFINED__
#define __IHTMLLinkElement3_FWD_DEFINED__
typedef interface IHTMLLinkElement3 IHTMLLinkElement3;
#endif

#ifndef __DispHTMLLinkElement_FWD_DEFINED__
#define __DispHTMLLinkElement_FWD_DEFINED__
typedef interface DispHTMLLinkElement DispHTMLLinkElement;
#endif

#ifndef __HTMLLinkElement_FWD_DEFINED__
#define __HTMLLinkElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLLinkElement HTMLLinkElement;
#else
typedef struct HTMLLinkElement HTMLLinkElement;
#endif
#endif

#ifndef __IHTMLTxtRange_FWD_DEFINED__
#define __IHTMLTxtRange_FWD_DEFINED__
typedef interface IHTMLTxtRange IHTMLTxtRange;
#endif

#ifndef __IHTMLTextRangeMetrics_FWD_DEFINED__
#define __IHTMLTextRangeMetrics_FWD_DEFINED__
typedef interface IHTMLTextRangeMetrics IHTMLTextRangeMetrics;
#endif

#ifndef __IHTMLTextRangeMetrics2_FWD_DEFINED__
#define __IHTMLTextRangeMetrics2_FWD_DEFINED__
typedef interface IHTMLTextRangeMetrics2 IHTMLTextRangeMetrics2;
#endif

#ifndef __IHTMLTxtRangeCollection_FWD_DEFINED__
#define __IHTMLTxtRangeCollection_FWD_DEFINED__
typedef interface IHTMLTxtRangeCollection IHTMLTxtRangeCollection;
#endif

#ifndef __HTMLFormElementEvents2_FWD_DEFINED__
#define __HTMLFormElementEvents2_FWD_DEFINED__
typedef interface HTMLFormElementEvents2 HTMLFormElementEvents2;
#endif

#ifndef __HTMLFormElementEvents_FWD_DEFINED__
#define __HTMLFormElementEvents_FWD_DEFINED__
typedef interface HTMLFormElementEvents HTMLFormElementEvents;
#endif

#ifndef __IHTMLFormElement_FWD_DEFINED__
#define __IHTMLFormElement_FWD_DEFINED__
typedef interface IHTMLFormElement IHTMLFormElement;
#endif

#ifndef __IHTMLFormElement2_FWD_DEFINED__
#define __IHTMLFormElement2_FWD_DEFINED__
typedef interface IHTMLFormElement2 IHTMLFormElement2;
#endif

#ifndef __IHTMLFormElement3_FWD_DEFINED__
#define __IHTMLFormElement3_FWD_DEFINED__
typedef interface IHTMLFormElement3 IHTMLFormElement3;
#endif

#ifndef __IHTMLSubmitData_FWD_DEFINED__
#define __IHTMLSubmitData_FWD_DEFINED__
typedef interface IHTMLSubmitData IHTMLSubmitData;
#endif

#ifndef __DispHTMLFormElement_FWD_DEFINED__
#define __DispHTMLFormElement_FWD_DEFINED__
typedef interface DispHTMLFormElement DispHTMLFormElement;
#endif

#ifndef __HTMLFormElement_FWD_DEFINED__
#define __HTMLFormElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLFormElement HTMLFormElement;
#else
typedef struct HTMLFormElement HTMLFormElement;
#endif
#endif

#ifndef __HTMLControlElementEvents2_FWD_DEFINED__
#define __HTMLControlElementEvents2_FWD_DEFINED__
typedef interface HTMLControlElementEvents2 HTMLControlElementEvents2;
#endif

#ifndef __HTMLControlElementEvents_FWD_DEFINED__
#define __HTMLControlElementEvents_FWD_DEFINED__
typedef interface HTMLControlElementEvents HTMLControlElementEvents;
#endif

#ifndef __IHTMLControlElement_FWD_DEFINED__
#define __IHTMLControlElement_FWD_DEFINED__
typedef interface IHTMLControlElement IHTMLControlElement;
#endif

#ifndef __IHTMLTextElement_FWD_DEFINED__
#define __IHTMLTextElement_FWD_DEFINED__
typedef interface IHTMLTextElement IHTMLTextElement;
#endif

#ifndef __DispHTMLTextElement_FWD_DEFINED__
#define __DispHTMLTextElement_FWD_DEFINED__
typedef interface DispHTMLTextElement DispHTMLTextElement;
#endif

#ifndef __HTMLTextElement_FWD_DEFINED__
#define __HTMLTextElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLTextElement HTMLTextElement;
#else
typedef struct HTMLTextElement HTMLTextElement;
#endif
#endif

#ifndef __HTMLTextContainerEvents2_FWD_DEFINED__
#define __HTMLTextContainerEvents2_FWD_DEFINED__
typedef interface HTMLTextContainerEvents2 HTMLTextContainerEvents2;
#endif

#ifndef __HTMLTextContainerEvents_FWD_DEFINED__
#define __HTMLTextContainerEvents_FWD_DEFINED__
typedef interface HTMLTextContainerEvents HTMLTextContainerEvents;
#endif

#ifndef __IHTMLTextContainer_FWD_DEFINED__
#define __IHTMLTextContainer_FWD_DEFINED__
typedef interface IHTMLTextContainer IHTMLTextContainer;
#endif

#ifndef __IHTMLControlRange_FWD_DEFINED__
#define __IHTMLControlRange_FWD_DEFINED__
typedef interface IHTMLControlRange IHTMLControlRange;
#endif

#ifndef __IHTMLControlRange2_FWD_DEFINED__
#define __IHTMLControlRange2_FWD_DEFINED__
typedef interface IHTMLControlRange2 IHTMLControlRange2;
#endif

#ifndef __HTMLImgEvents2_FWD_DEFINED__
#define __HTMLImgEvents2_FWD_DEFINED__
typedef interface HTMLImgEvents2 HTMLImgEvents2;
#endif

#ifndef __HTMLImgEvents_FWD_DEFINED__
#define __HTMLImgEvents_FWD_DEFINED__
typedef interface HTMLImgEvents HTMLImgEvents;
#endif

#ifndef __IHTMLImgElement_FWD_DEFINED__
#define __IHTMLImgElement_FWD_DEFINED__
typedef interface IHTMLImgElement IHTMLImgElement;
#endif

#ifndef __IHTMLImgElement2_FWD_DEFINED__
#define __IHTMLImgElement2_FWD_DEFINED__
typedef interface IHTMLImgElement2 IHTMLImgElement2;
#endif

#ifndef __IHTMLImageElementFactory_FWD_DEFINED__
#define __IHTMLImageElementFactory_FWD_DEFINED__
typedef interface IHTMLImageElementFactory IHTMLImageElementFactory;
#endif

#ifndef __DispHTMLImg_FWD_DEFINED__
#define __DispHTMLImg_FWD_DEFINED__
typedef interface DispHTMLImg DispHTMLImg;
#endif

#ifndef __HTMLImg_FWD_DEFINED__
#define __HTMLImg_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLImg HTMLImg;
#else
typedef struct HTMLImg HTMLImg;
#endif
#endif

#ifndef __HTMLImageElementFactory_FWD_DEFINED__
#define __HTMLImageElementFactory_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLImageElementFactory HTMLImageElementFactory;
#else
typedef struct HTMLImageElementFactory HTMLImageElementFactory;
#endif
#endif

#ifndef __IHTMLBodyElement_FWD_DEFINED__
#define __IHTMLBodyElement_FWD_DEFINED__
typedef interface IHTMLBodyElement IHTMLBodyElement;
#endif

#ifndef __IHTMLBodyElement2_FWD_DEFINED__
#define __IHTMLBodyElement2_FWD_DEFINED__
typedef interface IHTMLBodyElement2 IHTMLBodyElement2;
#endif

#ifndef __DispHTMLBody_FWD_DEFINED__
#define __DispHTMLBody_FWD_DEFINED__
typedef interface DispHTMLBody DispHTMLBody;
#endif

#ifndef __HTMLBody_FWD_DEFINED__
#define __HTMLBody_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLBody HTMLBody;
#else
typedef struct HTMLBody HTMLBody;
#endif
#endif

#ifndef __IHTMLFontElement_FWD_DEFINED__
#define __IHTMLFontElement_FWD_DEFINED__
typedef interface IHTMLFontElement IHTMLFontElement;
#endif

#ifndef __DispHTMLFontElement_FWD_DEFINED__
#define __DispHTMLFontElement_FWD_DEFINED__
typedef interface DispHTMLFontElement DispHTMLFontElement;
#endif

#ifndef __HTMLFontElement_FWD_DEFINED__
#define __HTMLFontElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLFontElement HTMLFontElement;
#else
typedef struct HTMLFontElement HTMLFontElement;
#endif
#endif

#ifndef __HTMLAnchorEvents2_FWD_DEFINED__
#define __HTMLAnchorEvents2_FWD_DEFINED__
typedef interface HTMLAnchorEvents2 HTMLAnchorEvents2;
#endif

#ifndef __HTMLAnchorEvents_FWD_DEFINED__
#define __HTMLAnchorEvents_FWD_DEFINED__
typedef interface HTMLAnchorEvents HTMLAnchorEvents;
#endif

#ifndef __IHTMLAnchorElement_FWD_DEFINED__
#define __IHTMLAnchorElement_FWD_DEFINED__
typedef interface IHTMLAnchorElement IHTMLAnchorElement;
#endif

#ifndef __IHTMLAnchorElement2_FWD_DEFINED__
#define __IHTMLAnchorElement2_FWD_DEFINED__
typedef interface IHTMLAnchorElement2 IHTMLAnchorElement2;
#endif

#ifndef __DispHTMLAnchorElement_FWD_DEFINED__
#define __DispHTMLAnchorElement_FWD_DEFINED__
typedef interface DispHTMLAnchorElement DispHTMLAnchorElement;
#endif

#ifndef __HTMLAnchorElement_FWD_DEFINED__
#define __HTMLAnchorElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLAnchorElement HTMLAnchorElement;
#else
typedef struct HTMLAnchorElement HTMLAnchorElement;
#endif
#endif

#ifndef __HTMLLabelEvents2_FWD_DEFINED__
#define __HTMLLabelEvents2_FWD_DEFINED__
typedef interface HTMLLabelEvents2 HTMLLabelEvents2;
#endif

#ifndef __HTMLLabelEvents_FWD_DEFINED__
#define __HTMLLabelEvents_FWD_DEFINED__
typedef interface HTMLLabelEvents HTMLLabelEvents;
#endif

#ifndef __IHTMLLabelElement_FWD_DEFINED__
#define __IHTMLLabelElement_FWD_DEFINED__
typedef interface IHTMLLabelElement IHTMLLabelElement;
#endif

#ifndef __IHTMLLabelElement2_FWD_DEFINED__
#define __IHTMLLabelElement2_FWD_DEFINED__
typedef interface IHTMLLabelElement2 IHTMLLabelElement2;
#endif

#ifndef __DispHTMLLabelElement_FWD_DEFINED__
#define __DispHTMLLabelElement_FWD_DEFINED__
typedef interface DispHTMLLabelElement DispHTMLLabelElement;
#endif

#ifndef __HTMLLabelElement_FWD_DEFINED__
#define __HTMLLabelElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLLabelElement HTMLLabelElement;
#else
typedef struct HTMLLabelElement HTMLLabelElement;
#endif
#endif

#ifndef __IHTMLListElement_FWD_DEFINED__
#define __IHTMLListElement_FWD_DEFINED__
typedef interface IHTMLListElement IHTMLListElement;
#endif

#ifndef __IHTMLListElement2_FWD_DEFINED__
#define __IHTMLListElement2_FWD_DEFINED__
typedef interface IHTMLListElement2 IHTMLListElement2;
#endif

#ifndef __DispHTMLListElement_FWD_DEFINED__
#define __DispHTMLListElement_FWD_DEFINED__
typedef interface DispHTMLListElement DispHTMLListElement;
#endif

#ifndef __HTMLListElement_FWD_DEFINED__
#define __HTMLListElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLListElement HTMLListElement;
#else
typedef struct HTMLListElement HTMLListElement;
#endif
#endif

#ifndef __IHTMLUListElement_FWD_DEFINED__
#define __IHTMLUListElement_FWD_DEFINED__
typedef interface IHTMLUListElement IHTMLUListElement;
#endif

#ifndef __DispHTMLUListElement_FWD_DEFINED__
#define __DispHTMLUListElement_FWD_DEFINED__
typedef interface DispHTMLUListElement DispHTMLUListElement;
#endif

#ifndef __HTMLUListElement_FWD_DEFINED__
#define __HTMLUListElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLUListElement HTMLUListElement;
#else
typedef struct HTMLUListElement HTMLUListElement;
#endif
#endif

#ifndef __IHTMLOListElement_FWD_DEFINED__
#define __IHTMLOListElement_FWD_DEFINED__
typedef interface IHTMLOListElement IHTMLOListElement;
#endif

#ifndef __DispHTMLOListElement_FWD_DEFINED__
#define __DispHTMLOListElement_FWD_DEFINED__
typedef interface DispHTMLOListElement DispHTMLOListElement;
#endif

#ifndef __HTMLOListElement_FWD_DEFINED__
#define __HTMLOListElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLOListElement HTMLOListElement;
#else
typedef struct HTMLOListElement HTMLOListElement;
#endif
#endif

#ifndef __IHTMLLIElement_FWD_DEFINED__
#define __IHTMLLIElement_FWD_DEFINED__
typedef interface IHTMLLIElement IHTMLLIElement;
#endif

#ifndef __DispHTMLLIElement_FWD_DEFINED__
#define __DispHTMLLIElement_FWD_DEFINED__
typedef interface DispHTMLLIElement DispHTMLLIElement;
#endif

#ifndef __HTMLLIElement_FWD_DEFINED__
#define __HTMLLIElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLLIElement HTMLLIElement;
#else
typedef struct HTMLLIElement HTMLLIElement;
#endif
#endif

#ifndef __IHTMLBlockElement_FWD_DEFINED__
#define __IHTMLBlockElement_FWD_DEFINED__
typedef interface IHTMLBlockElement IHTMLBlockElement;
#endif

#ifndef __IHTMLBlockElement2_FWD_DEFINED__
#define __IHTMLBlockElement2_FWD_DEFINED__
typedef interface IHTMLBlockElement2 IHTMLBlockElement2;
#endif

#ifndef __DispHTMLBlockElement_FWD_DEFINED__
#define __DispHTMLBlockElement_FWD_DEFINED__
typedef interface DispHTMLBlockElement DispHTMLBlockElement;
#endif

#ifndef __HTMLBlockElement_FWD_DEFINED__
#define __HTMLBlockElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLBlockElement HTMLBlockElement;
#else
typedef struct HTMLBlockElement HTMLBlockElement;
#endif
#endif

#ifndef __IHTMLDivElement_FWD_DEFINED__
#define __IHTMLDivElement_FWD_DEFINED__
typedef interface IHTMLDivElement IHTMLDivElement;
#endif

#ifndef __DispHTMLDivElement_FWD_DEFINED__
#define __DispHTMLDivElement_FWD_DEFINED__
typedef interface DispHTMLDivElement DispHTMLDivElement;
#endif

#ifndef __HTMLDivElement_FWD_DEFINED__
#define __HTMLDivElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDivElement HTMLDivElement;
#else
typedef struct HTMLDivElement HTMLDivElement;
#endif
#endif

#ifndef __IHTMLDDElement_FWD_DEFINED__
#define __IHTMLDDElement_FWD_DEFINED__
typedef interface IHTMLDDElement IHTMLDDElement;
#endif

#ifndef __DispHTMLDDElement_FWD_DEFINED__
#define __DispHTMLDDElement_FWD_DEFINED__
typedef interface DispHTMLDDElement DispHTMLDDElement;
#endif

#ifndef __HTMLDDElement_FWD_DEFINED__
#define __HTMLDDElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDDElement HTMLDDElement;
#else
typedef struct HTMLDDElement HTMLDDElement;
#endif
#endif

#ifndef __IHTMLDTElement_FWD_DEFINED__
#define __IHTMLDTElement_FWD_DEFINED__
typedef interface IHTMLDTElement IHTMLDTElement;
#endif

#ifndef __DispHTMLDTElement_FWD_DEFINED__
#define __DispHTMLDTElement_FWD_DEFINED__
typedef interface DispHTMLDTElement DispHTMLDTElement;
#endif

#ifndef __HTMLDTElement_FWD_DEFINED__
#define __HTMLDTElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDTElement HTMLDTElement;
#else
typedef struct HTMLDTElement HTMLDTElement;
#endif
#endif

#ifndef __IHTMLBRElement_FWD_DEFINED__
#define __IHTMLBRElement_FWD_DEFINED__
typedef interface IHTMLBRElement IHTMLBRElement;
#endif

#ifndef __DispHTMLBRElement_FWD_DEFINED__
#define __DispHTMLBRElement_FWD_DEFINED__
typedef interface DispHTMLBRElement DispHTMLBRElement;
#endif

#ifndef __HTMLBRElement_FWD_DEFINED__
#define __HTMLBRElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLBRElement HTMLBRElement;
#else
typedef struct HTMLBRElement HTMLBRElement;
#endif
#endif

#ifndef __IHTMLDListElement_FWD_DEFINED__
#define __IHTMLDListElement_FWD_DEFINED__
typedef interface IHTMLDListElement IHTMLDListElement;
#endif

#ifndef __DispHTMLDListElement_FWD_DEFINED__
#define __DispHTMLDListElement_FWD_DEFINED__
typedef interface DispHTMLDListElement DispHTMLDListElement;
#endif

#ifndef __HTMLDListElement_FWD_DEFINED__
#define __HTMLDListElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDListElement HTMLDListElement;
#else
typedef struct HTMLDListElement HTMLDListElement;
#endif
#endif

#ifndef __IHTMLHRElement_FWD_DEFINED__
#define __IHTMLHRElement_FWD_DEFINED__
typedef interface IHTMLHRElement IHTMLHRElement;
#endif

#ifndef __DispHTMLHRElement_FWD_DEFINED__
#define __DispHTMLHRElement_FWD_DEFINED__
typedef interface DispHTMLHRElement DispHTMLHRElement;
#endif

#ifndef __HTMLHRElement_FWD_DEFINED__
#define __HTMLHRElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLHRElement HTMLHRElement;
#else
typedef struct HTMLHRElement HTMLHRElement;
#endif
#endif

#ifndef __IHTMLParaElement_FWD_DEFINED__
#define __IHTMLParaElement_FWD_DEFINED__
typedef interface IHTMLParaElement IHTMLParaElement;
#endif

#ifndef __DispHTMLParaElement_FWD_DEFINED__
#define __DispHTMLParaElement_FWD_DEFINED__
typedef interface DispHTMLParaElement DispHTMLParaElement;
#endif

#ifndef __HTMLParaElement_FWD_DEFINED__
#define __HTMLParaElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLParaElement HTMLParaElement;
#else
typedef struct HTMLParaElement HTMLParaElement;
#endif
#endif

#ifndef __IHTMLElementCollection2_FWD_DEFINED__
#define __IHTMLElementCollection2_FWD_DEFINED__
typedef interface IHTMLElementCollection2 IHTMLElementCollection2;
#endif

#ifndef __IHTMLElementCollection3_FWD_DEFINED__
#define __IHTMLElementCollection3_FWD_DEFINED__
typedef interface IHTMLElementCollection3 IHTMLElementCollection3;
#endif

#ifndef __DispHTMLElementCollection_FWD_DEFINED__
#define __DispHTMLElementCollection_FWD_DEFINED__
typedef interface DispHTMLElementCollection DispHTMLElementCollection;
#endif

#ifndef __HTMLElementCollection_FWD_DEFINED__
#define __HTMLElementCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLElementCollection HTMLElementCollection;
#else
typedef struct HTMLElementCollection HTMLElementCollection;
#endif
#endif

#ifndef __IHTMLHeaderElement_FWD_DEFINED__
#define __IHTMLHeaderElement_FWD_DEFINED__
typedef interface IHTMLHeaderElement IHTMLHeaderElement;
#endif

#ifndef __DispHTMLHeaderElement_FWD_DEFINED__
#define __DispHTMLHeaderElement_FWD_DEFINED__
typedef interface DispHTMLHeaderElement DispHTMLHeaderElement;
#endif

#ifndef __HTMLHeaderElement_FWD_DEFINED__
#define __HTMLHeaderElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLHeaderElement HTMLHeaderElement;
#else
typedef struct HTMLHeaderElement HTMLHeaderElement;
#endif
#endif

#ifndef __HTMLSelectElementEvents2_FWD_DEFINED__
#define __HTMLSelectElementEvents2_FWD_DEFINED__
typedef interface HTMLSelectElementEvents2 HTMLSelectElementEvents2;
#endif

#ifndef __HTMLSelectElementEvents_FWD_DEFINED__
#define __HTMLSelectElementEvents_FWD_DEFINED__
typedef interface HTMLSelectElementEvents HTMLSelectElementEvents;
#endif

#ifndef __IHTMLSelectElement_FWD_DEFINED__
#define __IHTMLSelectElement_FWD_DEFINED__
typedef interface IHTMLSelectElement IHTMLSelectElement;
#endif

#ifndef __IHTMLSelectElement2_FWD_DEFINED__
#define __IHTMLSelectElement2_FWD_DEFINED__
typedef interface IHTMLSelectElement2 IHTMLSelectElement2;
#endif

#ifndef __IHTMLSelectElement4_FWD_DEFINED__
#define __IHTMLSelectElement4_FWD_DEFINED__
typedef interface IHTMLSelectElement4 IHTMLSelectElement4;
#endif

#ifndef __DispHTMLSelectElement_FWD_DEFINED__
#define __DispHTMLSelectElement_FWD_DEFINED__
typedef interface DispHTMLSelectElement DispHTMLSelectElement;
#endif

#ifndef __HTMLSelectElement_FWD_DEFINED__
#define __HTMLSelectElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLSelectElement HTMLSelectElement;
#else
typedef struct HTMLSelectElement HTMLSelectElement;
#endif
#endif

#ifndef __IHTMLSelectionObject_FWD_DEFINED__
#define __IHTMLSelectionObject_FWD_DEFINED__
typedef interface IHTMLSelectionObject IHTMLSelectionObject;
#endif

#ifndef __IHTMLSelectionObject2_FWD_DEFINED__
#define __IHTMLSelectionObject2_FWD_DEFINED__
typedef interface IHTMLSelectionObject2 IHTMLSelectionObject2;
#endif

#ifndef __IHTMLOptionElement_FWD_DEFINED__
#define __IHTMLOptionElement_FWD_DEFINED__
typedef interface IHTMLOptionElement IHTMLOptionElement;
#endif

#ifndef __IHTMLOptionElement3_FWD_DEFINED__
#define __IHTMLOptionElement3_FWD_DEFINED__
typedef interface IHTMLOptionElement3 IHTMLOptionElement3;
#endif

#ifndef __IHTMLOptionElementFactory_FWD_DEFINED__
#define __IHTMLOptionElementFactory_FWD_DEFINED__
typedef interface IHTMLOptionElementFactory IHTMLOptionElementFactory;
#endif

#ifndef __DispHTMLOptionElement_FWD_DEFINED__
#define __DispHTMLOptionElement_FWD_DEFINED__
typedef interface DispHTMLOptionElement DispHTMLOptionElement;
#endif

#ifndef __HTMLOptionElement_FWD_DEFINED__
#define __HTMLOptionElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLOptionElement HTMLOptionElement;
#else
typedef struct HTMLOptionElement HTMLOptionElement;
#endif
#endif

#ifndef __HTMLOptionElementFactory_FWD_DEFINED__
#define __HTMLOptionElementFactory_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLOptionElementFactory HTMLOptionElementFactory;
#else
typedef struct HTMLOptionElementFactory HTMLOptionElementFactory;
#endif
#endif

#ifndef __HTMLButtonElementEvents2_FWD_DEFINED__
#define __HTMLButtonElementEvents2_FWD_DEFINED__
typedef interface HTMLButtonElementEvents2 HTMLButtonElementEvents2;
#endif

#ifndef __HTMLButtonElementEvents_FWD_DEFINED__
#define __HTMLButtonElementEvents_FWD_DEFINED__
typedef interface HTMLButtonElementEvents HTMLButtonElementEvents;
#endif

#ifndef __HTMLInputTextElementEvents2_FWD_DEFINED__
#define __HTMLInputTextElementEvents2_FWD_DEFINED__
typedef interface HTMLInputTextElementEvents2 HTMLInputTextElementEvents2;
#endif

#ifndef __HTMLOptionButtonElementEvents2_FWD_DEFINED__
#define __HTMLOptionButtonElementEvents2_FWD_DEFINED__
typedef interface HTMLOptionButtonElementEvents2 HTMLOptionButtonElementEvents2;
#endif

#ifndef __HTMLInputFileElementEvents2_FWD_DEFINED__
#define __HTMLInputFileElementEvents2_FWD_DEFINED__
typedef interface HTMLInputFileElementEvents2 HTMLInputFileElementEvents2;
#endif

#ifndef __HTMLInputImageEvents2_FWD_DEFINED__
#define __HTMLInputImageEvents2_FWD_DEFINED__
typedef interface HTMLInputImageEvents2 HTMLInputImageEvents2;
#endif

#ifndef __HTMLInputTextElementEvents_FWD_DEFINED__
#define __HTMLInputTextElementEvents_FWD_DEFINED__
typedef interface HTMLInputTextElementEvents HTMLInputTextElementEvents;
#endif

#ifndef __HTMLOptionButtonElementEvents_FWD_DEFINED__
#define __HTMLOptionButtonElementEvents_FWD_DEFINED__
typedef interface HTMLOptionButtonElementEvents HTMLOptionButtonElementEvents;
#endif

#ifndef __HTMLInputFileElementEvents_FWD_DEFINED__
#define __HTMLInputFileElementEvents_FWD_DEFINED__
typedef interface HTMLInputFileElementEvents HTMLInputFileElementEvents;
#endif

#ifndef __HTMLInputImageEvents_FWD_DEFINED__
#define __HTMLInputImageEvents_FWD_DEFINED__
typedef interface HTMLInputImageEvents HTMLInputImageEvents;
#endif

#ifndef __IHTMLInputElement_FWD_DEFINED__
#define __IHTMLInputElement_FWD_DEFINED__
typedef interface IHTMLInputElement IHTMLInputElement;
#endif

#ifndef __IHTMLInputElement2_FWD_DEFINED__
#define __IHTMLInputElement2_FWD_DEFINED__
typedef interface IHTMLInputElement2 IHTMLInputElement2;
#endif

#ifndef __IHTMLInputButtonElement_FWD_DEFINED__
#define __IHTMLInputButtonElement_FWD_DEFINED__
typedef interface IHTMLInputButtonElement IHTMLInputButtonElement;
#endif

#ifndef __IHTMLInputHiddenElement_FWD_DEFINED__
#define __IHTMLInputHiddenElement_FWD_DEFINED__
typedef interface IHTMLInputHiddenElement IHTMLInputHiddenElement;
#endif

#ifndef __IHTMLInputTextElement_FWD_DEFINED__
#define __IHTMLInputTextElement_FWD_DEFINED__
typedef interface IHTMLInputTextElement IHTMLInputTextElement;
#endif

#ifndef __IHTMLInputFileElement_FWD_DEFINED__
#define __IHTMLInputFileElement_FWD_DEFINED__
typedef interface IHTMLInputFileElement IHTMLInputFileElement;
#endif

#ifndef __IHTMLOptionButtonElement_FWD_DEFINED__
#define __IHTMLOptionButtonElement_FWD_DEFINED__
typedef interface IHTMLOptionButtonElement IHTMLOptionButtonElement;
#endif

#ifndef __IHTMLInputImage_FWD_DEFINED__
#define __IHTMLInputImage_FWD_DEFINED__
typedef interface IHTMLInputImage IHTMLInputImage;
#endif

#ifndef __DispHTMLInputElement_FWD_DEFINED__
#define __DispHTMLInputElement_FWD_DEFINED__
typedef interface DispHTMLInputElement DispHTMLInputElement;
#endif

#ifndef __HTMLInputElement_FWD_DEFINED__
#define __HTMLInputElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLInputElement HTMLInputElement;
#else
typedef struct HTMLInputElement HTMLInputElement;
#endif
#endif

#ifndef __IHTMLTextAreaElement_FWD_DEFINED__
#define __IHTMLTextAreaElement_FWD_DEFINED__
typedef interface IHTMLTextAreaElement IHTMLTextAreaElement;
#endif

#ifndef __DispHTMLTextAreaElement_FWD_DEFINED__
#define __DispHTMLTextAreaElement_FWD_DEFINED__
typedef interface DispHTMLTextAreaElement DispHTMLTextAreaElement;
#endif

#ifndef __HTMLTextAreaElement_FWD_DEFINED__
#define __HTMLTextAreaElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLTextAreaElement HTMLTextAreaElement;
#else
typedef struct HTMLTextAreaElement HTMLTextAreaElement;
#endif
#endif

#ifndef __DispHTMLRichtextElement_FWD_DEFINED__
#define __DispHTMLRichtextElement_FWD_DEFINED__
typedef interface DispHTMLRichtextElement DispHTMLRichtextElement;
#endif

#ifndef __HTMLRichtextElement_FWD_DEFINED__
#define __HTMLRichtextElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLRichtextElement HTMLRichtextElement;
#else
typedef struct HTMLRichtextElement HTMLRichtextElement;
#endif
#endif

#ifndef __IHTMLButtonElement_FWD_DEFINED__
#define __IHTMLButtonElement_FWD_DEFINED__
typedef interface IHTMLButtonElement IHTMLButtonElement;
#endif

#ifndef __DispHTMLButtonElement_FWD_DEFINED__
#define __DispHTMLButtonElement_FWD_DEFINED__
typedef interface DispHTMLButtonElement DispHTMLButtonElement;
#endif

#ifndef __HTMLButtonElement_FWD_DEFINED__
#define __HTMLButtonElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLButtonElement HTMLButtonElement;
#else
typedef struct HTMLButtonElement HTMLButtonElement;
#endif
#endif

#ifndef __HTMLMarqueeElementEvents2_FWD_DEFINED__
#define __HTMLMarqueeElementEvents2_FWD_DEFINED__
typedef interface HTMLMarqueeElementEvents2 HTMLMarqueeElementEvents2;
#endif

#ifndef __HTMLMarqueeElementEvents_FWD_DEFINED__
#define __HTMLMarqueeElementEvents_FWD_DEFINED__
typedef interface HTMLMarqueeElementEvents HTMLMarqueeElementEvents;
#endif

#ifndef __IHTMLMarqueeElement_FWD_DEFINED__
#define __IHTMLMarqueeElement_FWD_DEFINED__
typedef interface IHTMLMarqueeElement IHTMLMarqueeElement;
#endif

#ifndef __DispHTMLMarqueeElement_FWD_DEFINED__
#define __DispHTMLMarqueeElement_FWD_DEFINED__
typedef interface DispHTMLMarqueeElement DispHTMLMarqueeElement;
#endif

#ifndef __HTMLMarqueeElement_FWD_DEFINED__
#define __HTMLMarqueeElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLMarqueeElement HTMLMarqueeElement;
#else
typedef struct HTMLMarqueeElement HTMLMarqueeElement;
#endif
#endif

#ifndef __IHTMLHtmlElement_FWD_DEFINED__
#define __IHTMLHtmlElement_FWD_DEFINED__
typedef interface IHTMLHtmlElement IHTMLHtmlElement;
#endif

#ifndef __IHTMLHeadElement_FWD_DEFINED__
#define __IHTMLHeadElement_FWD_DEFINED__
typedef interface IHTMLHeadElement IHTMLHeadElement;
#endif

#ifndef __IHTMLTitleElement_FWD_DEFINED__
#define __IHTMLTitleElement_FWD_DEFINED__
typedef interface IHTMLTitleElement IHTMLTitleElement;
#endif

#ifndef __IHTMLMetaElement_FWD_DEFINED__
#define __IHTMLMetaElement_FWD_DEFINED__
typedef interface IHTMLMetaElement IHTMLMetaElement;
#endif

#ifndef __IHTMLMetaElement2_FWD_DEFINED__
#define __IHTMLMetaElement2_FWD_DEFINED__
typedef interface IHTMLMetaElement2 IHTMLMetaElement2;
#endif

#ifndef __IHTMLBaseElement_FWD_DEFINED__
#define __IHTMLBaseElement_FWD_DEFINED__
typedef interface IHTMLBaseElement IHTMLBaseElement;
#endif

#ifndef __IHTMLIsIndexElement_FWD_DEFINED__
#define __IHTMLIsIndexElement_FWD_DEFINED__
typedef interface IHTMLIsIndexElement IHTMLIsIndexElement;
#endif

#ifndef __IHTMLIsIndexElement2_FWD_DEFINED__
#define __IHTMLIsIndexElement2_FWD_DEFINED__
typedef interface IHTMLIsIndexElement2 IHTMLIsIndexElement2;
#endif

#ifndef __IHTMLNextIdElement_FWD_DEFINED__
#define __IHTMLNextIdElement_FWD_DEFINED__
typedef interface IHTMLNextIdElement IHTMLNextIdElement;
#endif

#ifndef __DispHTMLHtmlElement_FWD_DEFINED__
#define __DispHTMLHtmlElement_FWD_DEFINED__
typedef interface DispHTMLHtmlElement DispHTMLHtmlElement;
#endif

#ifndef __HTMLHtmlElement_FWD_DEFINED__
#define __HTMLHtmlElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLHtmlElement HTMLHtmlElement;
#else
typedef struct HTMLHtmlElement HTMLHtmlElement;
#endif
#endif

#ifndef __DispHTMLHeadElement_FWD_DEFINED__
#define __DispHTMLHeadElement_FWD_DEFINED__
typedef interface DispHTMLHeadElement DispHTMLHeadElement;
#endif

#ifndef __HTMLHeadElement_FWD_DEFINED__
#define __HTMLHeadElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLHeadElement HTMLHeadElement;
#else
typedef struct HTMLHeadElement HTMLHeadElement;
#endif
#endif

#ifndef __DispHTMLTitleElement_FWD_DEFINED__
#define __DispHTMLTitleElement_FWD_DEFINED__
typedef interface DispHTMLTitleElement DispHTMLTitleElement;
#endif

#ifndef __HTMLTitleElement_FWD_DEFINED__
#define __HTMLTitleElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLTitleElement HTMLTitleElement;
#else
typedef struct HTMLTitleElement HTMLTitleElement;
#endif
#endif

#ifndef __DispHTMLMetaElement_FWD_DEFINED__
#define __DispHTMLMetaElement_FWD_DEFINED__
typedef interface DispHTMLMetaElement DispHTMLMetaElement;
#endif

#ifndef __HTMLMetaElement_FWD_DEFINED__
#define __HTMLMetaElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLMetaElement HTMLMetaElement;
#else
typedef struct HTMLMetaElement HTMLMetaElement;
#endif
#endif

#ifndef __DispHTMLBaseElement_FWD_DEFINED__
#define __DispHTMLBaseElement_FWD_DEFINED__
typedef interface DispHTMLBaseElement DispHTMLBaseElement;
#endif

#ifndef __HTMLBaseElement_FWD_DEFINED__
#define __HTMLBaseElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLBaseElement HTMLBaseElement;
#else
typedef struct HTMLBaseElement HTMLBaseElement;
#endif
#endif

#ifndef __DispHTMLIsIndexElement_FWD_DEFINED__
#define __DispHTMLIsIndexElement_FWD_DEFINED__
typedef interface DispHTMLIsIndexElement DispHTMLIsIndexElement;
#endif

#ifndef __HTMLIsIndexElement_FWD_DEFINED__
#define __HTMLIsIndexElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLIsIndexElement HTMLIsIndexElement;
#else
typedef struct HTMLIsIndexElement HTMLIsIndexElement;
#endif
#endif

#ifndef __DispHTMLNextIdElement_FWD_DEFINED__
#define __DispHTMLNextIdElement_FWD_DEFINED__
typedef interface DispHTMLNextIdElement DispHTMLNextIdElement;
#endif

#ifndef __HTMLNextIdElement_FWD_DEFINED__
#define __HTMLNextIdElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLNextIdElement HTMLNextIdElement;
#else
typedef struct HTMLNextIdElement HTMLNextIdElement;
#endif
#endif

#ifndef __IHTMLBaseFontElement_FWD_DEFINED__
#define __IHTMLBaseFontElement_FWD_DEFINED__
typedef interface IHTMLBaseFontElement IHTMLBaseFontElement;
#endif

#ifndef __DispHTMLBaseFontElement_FWD_DEFINED__
#define __DispHTMLBaseFontElement_FWD_DEFINED__
typedef interface DispHTMLBaseFontElement DispHTMLBaseFontElement;
#endif

#ifndef __HTMLBaseFontElement_FWD_DEFINED__
#define __HTMLBaseFontElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLBaseFontElement HTMLBaseFontElement;
#else
typedef struct HTMLBaseFontElement HTMLBaseFontElement;
#endif
#endif

#ifndef __IHTMLUnknownElement_FWD_DEFINED__
#define __IHTMLUnknownElement_FWD_DEFINED__
typedef interface IHTMLUnknownElement IHTMLUnknownElement;
#endif

#ifndef __DispHTMLUnknownElement_FWD_DEFINED__
#define __DispHTMLUnknownElement_FWD_DEFINED__
typedef interface DispHTMLUnknownElement DispHTMLUnknownElement;
#endif

#ifndef __HTMLUnknownElement_FWD_DEFINED__
#define __HTMLUnknownElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLUnknownElement HTMLUnknownElement;
#else
typedef struct HTMLUnknownElement HTMLUnknownElement;
#endif
#endif

#ifndef __IOmHistory_FWD_DEFINED__
#define __IOmHistory_FWD_DEFINED__
typedef interface IOmHistory IOmHistory;
#endif

#ifndef __IHTMLMimeTypesCollection_FWD_DEFINED__
#define __IHTMLMimeTypesCollection_FWD_DEFINED__
typedef interface IHTMLMimeTypesCollection IHTMLMimeTypesCollection;
#endif

#ifndef __IHTMLPluginsCollection_FWD_DEFINED__
#define __IHTMLPluginsCollection_FWD_DEFINED__
typedef interface IHTMLPluginsCollection IHTMLPluginsCollection;
#endif

#ifndef __IHTMLOpsProfile_FWD_DEFINED__
#define __IHTMLOpsProfile_FWD_DEFINED__
typedef interface IHTMLOpsProfile IHTMLOpsProfile;
#endif

#ifndef __IOmNavigator_FWD_DEFINED__
#define __IOmNavigator_FWD_DEFINED__
typedef interface IOmNavigator IOmNavigator;
#endif

#ifndef __IHTMLLocation_FWD_DEFINED__
#define __IHTMLLocation_FWD_DEFINED__
typedef interface IHTMLLocation IHTMLLocation;
#endif

#ifndef __HTMLHistory_FWD_DEFINED__
#define __HTMLHistory_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLHistory HTMLHistory;
#else
typedef struct HTMLHistory HTMLHistory;
#endif
#endif

#ifndef __CMimeTypes_FWD_DEFINED__
#define __CMimeTypes_FWD_DEFINED__
#ifdef __cplusplus
typedef class CMimeTypes CMimeTypes;
#else
typedef struct CMimeTypes CMimeTypes;
#endif
#endif

#ifndef __CPlugins_FWD_DEFINED__
#define __CPlugins_FWD_DEFINED__
#ifdef __cplusplus
typedef class CPlugins CPlugins;
#else
typedef struct CPlugins CPlugins;
#endif
#endif

#ifndef __COpsProfile_FWD_DEFINED__
#define __COpsProfile_FWD_DEFINED__
#ifdef __cplusplus
typedef class COpsProfile COpsProfile;
#else
typedef struct COpsProfile COpsProfile;
#endif
#endif

#ifndef __HTMLNavigator_FWD_DEFINED__
#define __HTMLNavigator_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLNavigator HTMLNavigator;
#else
typedef struct HTMLNavigator HTMLNavigator;
#endif
#endif

#ifndef __HTMLLocation_FWD_DEFINED__
#define __HTMLLocation_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLLocation HTMLLocation;
#else
typedef struct HTMLLocation HTMLLocation;
#endif
#endif

#ifndef __IHTMLBookmarkCollection_FWD_DEFINED__
#define __IHTMLBookmarkCollection_FWD_DEFINED__
typedef interface IHTMLBookmarkCollection IHTMLBookmarkCollection;
#endif

#ifndef __IHTMLDataTransfer_FWD_DEFINED__
#define __IHTMLDataTransfer_FWD_DEFINED__
typedef interface IHTMLDataTransfer IHTMLDataTransfer;
#endif

#ifndef __IHTMLEventObj2_FWD_DEFINED__
#define __IHTMLEventObj2_FWD_DEFINED__
typedef interface IHTMLEventObj2 IHTMLEventObj2;
#endif

#ifndef __IHTMLEventObj3_FWD_DEFINED__
#define __IHTMLEventObj3_FWD_DEFINED__
typedef interface IHTMLEventObj3 IHTMLEventObj3;
#endif

#ifndef __IHTMLEventObj4_FWD_DEFINED__
#define __IHTMLEventObj4_FWD_DEFINED__
typedef interface IHTMLEventObj4 IHTMLEventObj4;
#endif

#ifndef __DispCEventObj_FWD_DEFINED__
#define __DispCEventObj_FWD_DEFINED__
typedef interface DispCEventObj DispCEventObj;
#endif

#ifndef __CEventObj_FWD_DEFINED__
#define __CEventObj_FWD_DEFINED__
#ifdef __cplusplus
typedef class CEventObj CEventObj;
#else
typedef struct CEventObj CEventObj;
#endif
#endif

#ifndef __HTMLWindowEvents2_FWD_DEFINED__
#define __HTMLWindowEvents2_FWD_DEFINED__
typedef interface HTMLWindowEvents2 HTMLWindowEvents2;
#endif

#ifndef __HTMLWindowEvents_FWD_DEFINED__
#define __HTMLWindowEvents_FWD_DEFINED__
typedef interface HTMLWindowEvents HTMLWindowEvents;
#endif

#ifndef __IHTMLDocument2_FWD_DEFINED__
#define __IHTMLDocument2_FWD_DEFINED__
typedef interface IHTMLDocument2 IHTMLDocument2;
#endif

#ifndef __IHTMLFramesCollection2_FWD_DEFINED__
#define __IHTMLFramesCollection2_FWD_DEFINED__
typedef interface IHTMLFramesCollection2 IHTMLFramesCollection2;
#endif

#ifndef __IHTMLWindow2_FWD_DEFINED__
#define __IHTMLWindow2_FWD_DEFINED__
typedef interface IHTMLWindow2 IHTMLWindow2;
#endif

#ifndef __IHTMLWindow3_FWD_DEFINED__
#define __IHTMLWindow3_FWD_DEFINED__
typedef interface IHTMLWindow3 IHTMLWindow3;
#endif

#ifndef __IHTMLFrameBase_FWD_DEFINED__
#define __IHTMLFrameBase_FWD_DEFINED__
typedef interface IHTMLFrameBase IHTMLFrameBase;
#endif

#ifndef __IHTMLScreen_FWD_DEFINED__
#define __IHTMLScreen_FWD_DEFINED__
typedef interface IHTMLScreen IHTMLScreen;
#endif

#ifndef __IHTMLScreen2_FWD_DEFINED__
#define __IHTMLScreen2_FWD_DEFINED__
typedef interface IHTMLScreen2 IHTMLScreen2;
#endif

#ifndef __IHTMLWindow4_FWD_DEFINED__
#define __IHTMLWindow4_FWD_DEFINED__
typedef interface IHTMLWindow4 IHTMLWindow4;
#endif

#ifndef __FramesCollection_FWD_DEFINED__
#define __FramesCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class FramesCollection FramesCollection;
#else
typedef struct FramesCollection FramesCollection;
#endif
#endif

#ifndef __DispHTMLScreen_FWD_DEFINED__
#define __DispHTMLScreen_FWD_DEFINED__
typedef interface DispHTMLScreen DispHTMLScreen;
#endif

#ifndef __HTMLScreen_FWD_DEFINED__
#define __HTMLScreen_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLScreen HTMLScreen;
#else
typedef struct HTMLScreen HTMLScreen;
#endif
#endif

#ifndef __DispHTMLWindow2_FWD_DEFINED__
#define __DispHTMLWindow2_FWD_DEFINED__
typedef interface DispHTMLWindow2 DispHTMLWindow2;
#endif

#ifndef __HTMLWindow2_FWD_DEFINED__
#define __HTMLWindow2_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLWindow2 HTMLWindow2;
#else
typedef struct HTMLWindow2 HTMLWindow2;
#endif
#endif

#ifndef __DispHTMLWindowProxy_FWD_DEFINED__
#define __DispHTMLWindowProxy_FWD_DEFINED__
typedef interface DispHTMLWindowProxy DispHTMLWindowProxy;
#endif

#ifndef __HTMLWindowProxy_FWD_DEFINED__
#define __HTMLWindowProxy_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLWindowProxy HTMLWindowProxy;
#else
typedef struct HTMLWindowProxy HTMLWindowProxy;
#endif
#endif

#ifndef __HTMLDocumentEvents2_FWD_DEFINED__
#define __HTMLDocumentEvents2_FWD_DEFINED__
typedef interface HTMLDocumentEvents2 HTMLDocumentEvents2;
#endif

#ifndef __HTMLDocumentEvents_FWD_DEFINED__
#define __HTMLDocumentEvents_FWD_DEFINED__
typedef interface HTMLDocumentEvents HTMLDocumentEvents;
#endif

#ifndef __IHTMLDocument3_FWD_DEFINED__
#define __IHTMLDocument3_FWD_DEFINED__
typedef interface IHTMLDocument3 IHTMLDocument3;
#endif

#ifndef __IHTMLDocument4_FWD_DEFINED__
#define __IHTMLDocument4_FWD_DEFINED__
typedef interface IHTMLDocument4 IHTMLDocument4;
#endif

#ifndef __IHTMLDocument5_FWD_DEFINED__
#define __IHTMLDocument5_FWD_DEFINED__
typedef interface IHTMLDocument5 IHTMLDocument5;
#endif

#ifndef __DispHTMLDocument_FWD_DEFINED__
#define __DispHTMLDocument_FWD_DEFINED__
typedef interface DispHTMLDocument DispHTMLDocument;
#endif

#ifndef __HTMLDocument_FWD_DEFINED__
#define __HTMLDocument_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDocument HTMLDocument;
#else
typedef struct HTMLDocument HTMLDocument;
#endif
#endif

#ifndef __DWebBridgeEvents_FWD_DEFINED__
#define __DWebBridgeEvents_FWD_DEFINED__
typedef interface DWebBridgeEvents DWebBridgeEvents;
#endif

#ifndef __IWebBridge_FWD_DEFINED__
#define __IWebBridge_FWD_DEFINED__
typedef interface IWebBridge IWebBridge;
#endif

#ifndef __IWBScriptControl_FWD_DEFINED__
#define __IWBScriptControl_FWD_DEFINED__
typedef interface IWBScriptControl IWBScriptControl;
#endif

#ifndef __Scriptlet_FWD_DEFINED__
#define __Scriptlet_FWD_DEFINED__
#ifdef __cplusplus
typedef class Scriptlet Scriptlet;
#else
typedef struct Scriptlet Scriptlet;
#endif
#endif

#ifndef __IHTMLEmbedElement_FWD_DEFINED__
#define __IHTMLEmbedElement_FWD_DEFINED__
typedef interface IHTMLEmbedElement IHTMLEmbedElement;
#endif

#ifndef __DispHTMLEmbed_FWD_DEFINED__
#define __DispHTMLEmbed_FWD_DEFINED__
typedef interface DispHTMLEmbed DispHTMLEmbed;
#endif

#ifndef __HTMLEmbed_FWD_DEFINED__
#define __HTMLEmbed_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLEmbed HTMLEmbed;
#else
typedef struct HTMLEmbed HTMLEmbed;
#endif
#endif

#ifndef __HTMLMapEvents2_FWD_DEFINED__
#define __HTMLMapEvents2_FWD_DEFINED__
typedef interface HTMLMapEvents2 HTMLMapEvents2;
#endif

#ifndef __HTMLMapEvents_FWD_DEFINED__
#define __HTMLMapEvents_FWD_DEFINED__
typedef interface HTMLMapEvents HTMLMapEvents;
#endif

#ifndef __IHTMLAreasCollection_FWD_DEFINED__
#define __IHTMLAreasCollection_FWD_DEFINED__
typedef interface IHTMLAreasCollection IHTMLAreasCollection;
#endif

#ifndef __IHTMLAreasCollection2_FWD_DEFINED__
#define __IHTMLAreasCollection2_FWD_DEFINED__
typedef interface IHTMLAreasCollection2 IHTMLAreasCollection2;
#endif

#ifndef __IHTMLAreasCollection3_FWD_DEFINED__
#define __IHTMLAreasCollection3_FWD_DEFINED__
typedef interface IHTMLAreasCollection3 IHTMLAreasCollection3;
#endif

#ifndef __IHTMLMapElement_FWD_DEFINED__
#define __IHTMLMapElement_FWD_DEFINED__
typedef interface IHTMLMapElement IHTMLMapElement;
#endif

#ifndef __DispHTMLAreasCollection_FWD_DEFINED__
#define __DispHTMLAreasCollection_FWD_DEFINED__
typedef interface DispHTMLAreasCollection DispHTMLAreasCollection;
#endif

#ifndef __HTMLAreasCollection_FWD_DEFINED__
#define __HTMLAreasCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLAreasCollection HTMLAreasCollection;
#else
typedef struct HTMLAreasCollection HTMLAreasCollection;
#endif
#endif

#ifndef __DispHTMLMapElement_FWD_DEFINED__
#define __DispHTMLMapElement_FWD_DEFINED__
typedef interface DispHTMLMapElement DispHTMLMapElement;
#endif

#ifndef __HTMLMapElement_FWD_DEFINED__
#define __HTMLMapElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLMapElement HTMLMapElement;
#else
typedef struct HTMLMapElement HTMLMapElement;
#endif
#endif

#ifndef __HTMLAreaEvents2_FWD_DEFINED__
#define __HTMLAreaEvents2_FWD_DEFINED__
typedef interface HTMLAreaEvents2 HTMLAreaEvents2;
#endif

#ifndef __HTMLAreaEvents_FWD_DEFINED__
#define __HTMLAreaEvents_FWD_DEFINED__
typedef interface HTMLAreaEvents HTMLAreaEvents;
#endif

#ifndef __IHTMLAreaElement_FWD_DEFINED__
#define __IHTMLAreaElement_FWD_DEFINED__
typedef interface IHTMLAreaElement IHTMLAreaElement;
#endif

#ifndef __DispHTMLAreaElement_FWD_DEFINED__
#define __DispHTMLAreaElement_FWD_DEFINED__
typedef interface DispHTMLAreaElement DispHTMLAreaElement;
#endif

#ifndef __HTMLAreaElement_FWD_DEFINED__
#define __HTMLAreaElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLAreaElement HTMLAreaElement;
#else
typedef struct HTMLAreaElement HTMLAreaElement;
#endif
#endif

#ifndef __IHTMLTableCaption_FWD_DEFINED__
#define __IHTMLTableCaption_FWD_DEFINED__
typedef interface IHTMLTableCaption IHTMLTableCaption;
#endif

#ifndef __DispHTMLTableCaption_FWD_DEFINED__
#define __DispHTMLTableCaption_FWD_DEFINED__
typedef interface DispHTMLTableCaption DispHTMLTableCaption;
#endif

#ifndef __HTMLTableCaption_FWD_DEFINED__
#define __HTMLTableCaption_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLTableCaption HTMLTableCaption;
#else
typedef struct HTMLTableCaption HTMLTableCaption;
#endif
#endif

#ifndef __IHTMLCommentElement_FWD_DEFINED__
#define __IHTMLCommentElement_FWD_DEFINED__
typedef interface IHTMLCommentElement IHTMLCommentElement;
#endif

#ifndef __IHTMLCommentElement2_FWD_DEFINED__
#define __IHTMLCommentElement2_FWD_DEFINED__
typedef interface IHTMLCommentElement2 IHTMLCommentElement2;
#endif

#ifndef __DispHTMLCommentElement_FWD_DEFINED__
#define __DispHTMLCommentElement_FWD_DEFINED__
typedef interface DispHTMLCommentElement DispHTMLCommentElement;
#endif

#ifndef __HTMLCommentElement_FWD_DEFINED__
#define __HTMLCommentElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLCommentElement HTMLCommentElement;
#else
typedef struct HTMLCommentElement HTMLCommentElement;
#endif
#endif

#ifndef __IHTMLPhraseElement_FWD_DEFINED__
#define __IHTMLPhraseElement_FWD_DEFINED__
typedef interface IHTMLPhraseElement IHTMLPhraseElement;
#endif

#ifndef __IHTMLPhraseElement2_FWD_DEFINED__
#define __IHTMLPhraseElement2_FWD_DEFINED__
typedef interface IHTMLPhraseElement2 IHTMLPhraseElement2;
#endif

#ifndef __IHTMLSpanElement_FWD_DEFINED__
#define __IHTMLSpanElement_FWD_DEFINED__
typedef interface IHTMLSpanElement IHTMLSpanElement;
#endif

#ifndef __DispHTMLPhraseElement_FWD_DEFINED__
#define __DispHTMLPhraseElement_FWD_DEFINED__
typedef interface DispHTMLPhraseElement DispHTMLPhraseElement;
#endif

#ifndef __HTMLPhraseElement_FWD_DEFINED__
#define __HTMLPhraseElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLPhraseElement HTMLPhraseElement;
#else
typedef struct HTMLPhraseElement HTMLPhraseElement;
#endif
#endif

#ifndef __DispHTMLSpanElement_FWD_DEFINED__
#define __DispHTMLSpanElement_FWD_DEFINED__
typedef interface DispHTMLSpanElement DispHTMLSpanElement;
#endif

#ifndef __HTMLSpanElement_FWD_DEFINED__
#define __HTMLSpanElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLSpanElement HTMLSpanElement;
#else
typedef struct HTMLSpanElement HTMLSpanElement;
#endif
#endif

#ifndef __HTMLTableEvents2_FWD_DEFINED__
#define __HTMLTableEvents2_FWD_DEFINED__
typedef interface HTMLTableEvents2 HTMLTableEvents2;
#endif

#ifndef __HTMLTableEvents_FWD_DEFINED__
#define __HTMLTableEvents_FWD_DEFINED__
typedef interface HTMLTableEvents HTMLTableEvents;
#endif

#ifndef __IHTMLTableSection_FWD_DEFINED__
#define __IHTMLTableSection_FWD_DEFINED__
typedef interface IHTMLTableSection IHTMLTableSection;
#endif

#ifndef __IHTMLTable_FWD_DEFINED__
#define __IHTMLTable_FWD_DEFINED__
typedef interface IHTMLTable IHTMLTable;
#endif

#ifndef __IHTMLTable2_FWD_DEFINED__
#define __IHTMLTable2_FWD_DEFINED__
typedef interface IHTMLTable2 IHTMLTable2;
#endif

#ifndef __IHTMLTable3_FWD_DEFINED__
#define __IHTMLTable3_FWD_DEFINED__
typedef interface IHTMLTable3 IHTMLTable3;
#endif

#ifndef __IHTMLTableCol_FWD_DEFINED__
#define __IHTMLTableCol_FWD_DEFINED__
typedef interface IHTMLTableCol IHTMLTableCol;
#endif

#ifndef __IHTMLTableCol2_FWD_DEFINED__
#define __IHTMLTableCol2_FWD_DEFINED__
typedef interface IHTMLTableCol2 IHTMLTableCol2;
#endif

#ifndef __IHTMLTableSection2_FWD_DEFINED__
#define __IHTMLTableSection2_FWD_DEFINED__
typedef interface IHTMLTableSection2 IHTMLTableSection2;
#endif

#ifndef __IHTMLTableSection3_FWD_DEFINED__
#define __IHTMLTableSection3_FWD_DEFINED__
typedef interface IHTMLTableSection3 IHTMLTableSection3;
#endif

#ifndef __IHTMLTableRow_FWD_DEFINED__
#define __IHTMLTableRow_FWD_DEFINED__
typedef interface IHTMLTableRow IHTMLTableRow;
#endif

#ifndef __IHTMLTableRow2_FWD_DEFINED__
#define __IHTMLTableRow2_FWD_DEFINED__
typedef interface IHTMLTableRow2 IHTMLTableRow2;
#endif

#ifndef __IHTMLTableRow3_FWD_DEFINED__
#define __IHTMLTableRow3_FWD_DEFINED__
typedef interface IHTMLTableRow3 IHTMLTableRow3;
#endif

#ifndef __IHTMLTableRowMetrics_FWD_DEFINED__
#define __IHTMLTableRowMetrics_FWD_DEFINED__
typedef interface IHTMLTableRowMetrics IHTMLTableRowMetrics;
#endif

#ifndef __IHTMLTableCell_FWD_DEFINED__
#define __IHTMLTableCell_FWD_DEFINED__
typedef interface IHTMLTableCell IHTMLTableCell;
#endif

#ifndef __IHTMLTableCell2_FWD_DEFINED__
#define __IHTMLTableCell2_FWD_DEFINED__
typedef interface IHTMLTableCell2 IHTMLTableCell2;
#endif

#ifndef __DispHTMLTable_FWD_DEFINED__
#define __DispHTMLTable_FWD_DEFINED__
typedef interface DispHTMLTable DispHTMLTable;
#endif

#ifndef __HTMLTable_FWD_DEFINED__
#define __HTMLTable_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLTable HTMLTable;
#else
typedef struct HTMLTable HTMLTable;
#endif
#endif

#ifndef __DispHTMLTableCol_FWD_DEFINED__
#define __DispHTMLTableCol_FWD_DEFINED__
typedef interface DispHTMLTableCol DispHTMLTableCol;
#endif

#ifndef __HTMLTableCol_FWD_DEFINED__
#define __HTMLTableCol_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLTableCol HTMLTableCol;
#else
typedef struct HTMLTableCol HTMLTableCol;
#endif
#endif

#ifndef __DispHTMLTableSection_FWD_DEFINED__
#define __DispHTMLTableSection_FWD_DEFINED__
typedef interface DispHTMLTableSection DispHTMLTableSection;
#endif

#ifndef __HTMLTableSection_FWD_DEFINED__
#define __HTMLTableSection_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLTableSection HTMLTableSection;
#else
typedef struct HTMLTableSection HTMLTableSection;
#endif
#endif

#ifndef __DispHTMLTableRow_FWD_DEFINED__
#define __DispHTMLTableRow_FWD_DEFINED__
typedef interface DispHTMLTableRow DispHTMLTableRow;
#endif

#ifndef __HTMLTableRow_FWD_DEFINED__
#define __HTMLTableRow_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLTableRow HTMLTableRow;
#else
typedef struct HTMLTableRow HTMLTableRow;
#endif
#endif

#ifndef __DispHTMLTableCell_FWD_DEFINED__
#define __DispHTMLTableCell_FWD_DEFINED__
typedef interface DispHTMLTableCell DispHTMLTableCell;
#endif

#ifndef __HTMLTableCell_FWD_DEFINED__
#define __HTMLTableCell_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLTableCell HTMLTableCell;
#else
typedef struct HTMLTableCell HTMLTableCell;
#endif
#endif

#ifndef __HTMLScriptEvents2_FWD_DEFINED__
#define __HTMLScriptEvents2_FWD_DEFINED__
typedef interface HTMLScriptEvents2 HTMLScriptEvents2;
#endif

#ifndef __HTMLScriptEvents_FWD_DEFINED__
#define __HTMLScriptEvents_FWD_DEFINED__
typedef interface HTMLScriptEvents HTMLScriptEvents;
#endif

#ifndef __IHTMLScriptElement_FWD_DEFINED__
#define __IHTMLScriptElement_FWD_DEFINED__
typedef interface IHTMLScriptElement IHTMLScriptElement;
#endif

#ifndef __IHTMLScriptElement2_FWD_DEFINED__
#define __IHTMLScriptElement2_FWD_DEFINED__
typedef interface IHTMLScriptElement2 IHTMLScriptElement2;
#endif

#ifndef __DispHTMLScriptElement_FWD_DEFINED__
#define __DispHTMLScriptElement_FWD_DEFINED__
typedef interface DispHTMLScriptElement DispHTMLScriptElement;
#endif

#ifndef __HTMLScriptElement_FWD_DEFINED__
#define __HTMLScriptElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLScriptElement HTMLScriptElement;
#else
typedef struct HTMLScriptElement HTMLScriptElement;
#endif
#endif

#ifndef __IHTMLNoShowElement_FWD_DEFINED__
#define __IHTMLNoShowElement_FWD_DEFINED__
typedef interface IHTMLNoShowElement IHTMLNoShowElement;
#endif

#ifndef __DispHTMLNoShowElement_FWD_DEFINED__
#define __DispHTMLNoShowElement_FWD_DEFINED__
typedef interface DispHTMLNoShowElement DispHTMLNoShowElement;
#endif

#ifndef __HTMLNoShowElement_FWD_DEFINED__
#define __HTMLNoShowElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLNoShowElement HTMLNoShowElement;
#else
typedef struct HTMLNoShowElement HTMLNoShowElement;
#endif
#endif

#ifndef __HTMLObjectElementEvents2_FWD_DEFINED__
#define __HTMLObjectElementEvents2_FWD_DEFINED__
typedef interface HTMLObjectElementEvents2 HTMLObjectElementEvents2;
#endif

#ifndef __HTMLObjectElementEvents_FWD_DEFINED__
#define __HTMLObjectElementEvents_FWD_DEFINED__
typedef interface HTMLObjectElementEvents HTMLObjectElementEvents;
#endif

#ifndef __IHTMLObjectElement_FWD_DEFINED__
#define __IHTMLObjectElement_FWD_DEFINED__
typedef interface IHTMLObjectElement IHTMLObjectElement;
#endif

#ifndef __IHTMLObjectElement2_FWD_DEFINED__
#define __IHTMLObjectElement2_FWD_DEFINED__
typedef interface IHTMLObjectElement2 IHTMLObjectElement2;
#endif

#ifndef __IHTMLObjectElement3_FWD_DEFINED__
#define __IHTMLObjectElement3_FWD_DEFINED__
typedef interface IHTMLObjectElement3 IHTMLObjectElement3;
#endif

#ifndef __IHTMLParamElement_FWD_DEFINED__
#define __IHTMLParamElement_FWD_DEFINED__
typedef interface IHTMLParamElement IHTMLParamElement;
#endif

#ifndef __DispHTMLObjectElement_FWD_DEFINED__
#define __DispHTMLObjectElement_FWD_DEFINED__
typedef interface DispHTMLObjectElement DispHTMLObjectElement;
#endif

#ifndef __HTMLObjectElement_FWD_DEFINED__
#define __HTMLObjectElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLObjectElement HTMLObjectElement;
#else
typedef struct HTMLObjectElement HTMLObjectElement;
#endif
#endif

#ifndef __DispHTMLParamElement_FWD_DEFINED__
#define __DispHTMLParamElement_FWD_DEFINED__
typedef interface DispHTMLParamElement DispHTMLParamElement;
#endif

#ifndef __HTMLParamElement_FWD_DEFINED__
#define __HTMLParamElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLParamElement HTMLParamElement;
#else
typedef struct HTMLParamElement HTMLParamElement;
#endif
#endif

#ifndef __HTMLFrameSiteEvents2_FWD_DEFINED__
#define __HTMLFrameSiteEvents2_FWD_DEFINED__
typedef interface HTMLFrameSiteEvents2 HTMLFrameSiteEvents2;
#endif

#ifndef __HTMLFrameSiteEvents_FWD_DEFINED__
#define __HTMLFrameSiteEvents_FWD_DEFINED__
typedef interface HTMLFrameSiteEvents HTMLFrameSiteEvents;
#endif

#ifndef __IHTMLFrameBase2_FWD_DEFINED__
#define __IHTMLFrameBase2_FWD_DEFINED__
typedef interface IHTMLFrameBase2 IHTMLFrameBase2;
#endif

#ifndef __IHTMLFrameBase3_FWD_DEFINED__
#define __IHTMLFrameBase3_FWD_DEFINED__
typedef interface IHTMLFrameBase3 IHTMLFrameBase3;
#endif

#ifndef __DispHTMLFrameBase_FWD_DEFINED__
#define __DispHTMLFrameBase_FWD_DEFINED__
typedef interface DispHTMLFrameBase DispHTMLFrameBase;
#endif

#ifndef __HTMLFrameBase_FWD_DEFINED__
#define __HTMLFrameBase_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLFrameBase HTMLFrameBase;
#else
typedef struct HTMLFrameBase HTMLFrameBase;
#endif
#endif

#ifndef __IHTMLFrameElement_FWD_DEFINED__
#define __IHTMLFrameElement_FWD_DEFINED__
typedef interface IHTMLFrameElement IHTMLFrameElement;
#endif

#ifndef __IHTMLFrameElement2_FWD_DEFINED__
#define __IHTMLFrameElement2_FWD_DEFINED__
typedef interface IHTMLFrameElement2 IHTMLFrameElement2;
#endif

#ifndef __DispHTMLFrameElement_FWD_DEFINED__
#define __DispHTMLFrameElement_FWD_DEFINED__
typedef interface DispHTMLFrameElement DispHTMLFrameElement;
#endif

#ifndef __HTMLFrameElement_FWD_DEFINED__
#define __HTMLFrameElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLFrameElement HTMLFrameElement;
#else
typedef struct HTMLFrameElement HTMLFrameElement;
#endif
#endif

#ifndef __IHTMLIFrameElement_FWD_DEFINED__
#define __IHTMLIFrameElement_FWD_DEFINED__
typedef interface IHTMLIFrameElement IHTMLIFrameElement;
#endif

#ifndef __IHTMLIFrameElement2_FWD_DEFINED__
#define __IHTMLIFrameElement2_FWD_DEFINED__
typedef interface IHTMLIFrameElement2 IHTMLIFrameElement2;
#endif

#ifndef __DispHTMLIFrame_FWD_DEFINED__
#define __DispHTMLIFrame_FWD_DEFINED__
typedef interface DispHTMLIFrame DispHTMLIFrame;
#endif

#ifndef __HTMLIFrame_FWD_DEFINED__
#define __HTMLIFrame_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLIFrame HTMLIFrame;
#else
typedef struct HTMLIFrame HTMLIFrame;
#endif
#endif

#ifndef __IHTMLDivPosition_FWD_DEFINED__
#define __IHTMLDivPosition_FWD_DEFINED__
typedef interface IHTMLDivPosition IHTMLDivPosition;
#endif

#ifndef __IHTMLFieldSetElement_FWD_DEFINED__
#define __IHTMLFieldSetElement_FWD_DEFINED__
typedef interface IHTMLFieldSetElement IHTMLFieldSetElement;
#endif

#ifndef __IHTMLFieldSetElement2_FWD_DEFINED__
#define __IHTMLFieldSetElement2_FWD_DEFINED__
typedef interface IHTMLFieldSetElement2 IHTMLFieldSetElement2;
#endif

#ifndef __IHTMLLegendElement_FWD_DEFINED__
#define __IHTMLLegendElement_FWD_DEFINED__
typedef interface IHTMLLegendElement IHTMLLegendElement;
#endif

#ifndef __IHTMLLegendElement2_FWD_DEFINED__
#define __IHTMLLegendElement2_FWD_DEFINED__
typedef interface IHTMLLegendElement2 IHTMLLegendElement2;
#endif

#ifndef __DispHTMLDivPosition_FWD_DEFINED__
#define __DispHTMLDivPosition_FWD_DEFINED__
typedef interface DispHTMLDivPosition DispHTMLDivPosition;
#endif

#ifndef __HTMLDivPosition_FWD_DEFINED__
#define __HTMLDivPosition_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDivPosition HTMLDivPosition;
#else
typedef struct HTMLDivPosition HTMLDivPosition;
#endif
#endif

#ifndef __DispHTMLFieldSetElement_FWD_DEFINED__
#define __DispHTMLFieldSetElement_FWD_DEFINED__
typedef interface DispHTMLFieldSetElement DispHTMLFieldSetElement;
#endif

#ifndef __HTMLFieldSetElement_FWD_DEFINED__
#define __HTMLFieldSetElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLFieldSetElement HTMLFieldSetElement;
#else
typedef struct HTMLFieldSetElement HTMLFieldSetElement;
#endif
#endif

#ifndef __DispHTMLLegendElement_FWD_DEFINED__
#define __DispHTMLLegendElement_FWD_DEFINED__
typedef interface DispHTMLLegendElement DispHTMLLegendElement;
#endif

#ifndef __HTMLLegendElement_FWD_DEFINED__
#define __HTMLLegendElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLLegendElement HTMLLegendElement;
#else
typedef struct HTMLLegendElement HTMLLegendElement;
#endif
#endif

#ifndef __IHTMLSpanFlow_FWD_DEFINED__
#define __IHTMLSpanFlow_FWD_DEFINED__
typedef interface IHTMLSpanFlow IHTMLSpanFlow;
#endif

#ifndef __DispHTMLSpanFlow_FWD_DEFINED__
#define __DispHTMLSpanFlow_FWD_DEFINED__
typedef interface DispHTMLSpanFlow DispHTMLSpanFlow;
#endif

#ifndef __HTMLSpanFlow_FWD_DEFINED__
#define __HTMLSpanFlow_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLSpanFlow HTMLSpanFlow;
#else
typedef struct HTMLSpanFlow HTMLSpanFlow;
#endif
#endif

#ifndef __IHTMLFrameSetElement_FWD_DEFINED__
#define __IHTMLFrameSetElement_FWD_DEFINED__
typedef interface IHTMLFrameSetElement IHTMLFrameSetElement;
#endif

#ifndef __IHTMLFrameSetElement2_FWD_DEFINED__
#define __IHTMLFrameSetElement2_FWD_DEFINED__
typedef interface IHTMLFrameSetElement2 IHTMLFrameSetElement2;
#endif

#ifndef __DispHTMLFrameSetSite_FWD_DEFINED__
#define __DispHTMLFrameSetSite_FWD_DEFINED__
typedef interface DispHTMLFrameSetSite DispHTMLFrameSetSite;
#endif

#ifndef __HTMLFrameSetSite_FWD_DEFINED__
#define __HTMLFrameSetSite_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLFrameSetSite HTMLFrameSetSite;
#else
typedef struct HTMLFrameSetSite HTMLFrameSetSite;
#endif
#endif

#ifndef __IHTMLBGsound_FWD_DEFINED__
#define __IHTMLBGsound_FWD_DEFINED__
typedef interface IHTMLBGsound IHTMLBGsound;
#endif

#ifndef __DispHTMLBGsound_FWD_DEFINED__
#define __DispHTMLBGsound_FWD_DEFINED__
typedef interface DispHTMLBGsound DispHTMLBGsound;
#endif

#ifndef __HTMLBGsound_FWD_DEFINED__
#define __HTMLBGsound_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLBGsound HTMLBGsound;
#else
typedef struct HTMLBGsound HTMLBGsound;
#endif
#endif

#ifndef __IHTMLFontNamesCollection_FWD_DEFINED__
#define __IHTMLFontNamesCollection_FWD_DEFINED__
typedef interface IHTMLFontNamesCollection IHTMLFontNamesCollection;
#endif

#ifndef __IHTMLFontSizesCollection_FWD_DEFINED__
#define __IHTMLFontSizesCollection_FWD_DEFINED__
typedef interface IHTMLFontSizesCollection IHTMLFontSizesCollection;
#endif

#ifndef __IHTMLOptionsHolder_FWD_DEFINED__
#define __IHTMLOptionsHolder_FWD_DEFINED__
typedef interface IHTMLOptionsHolder IHTMLOptionsHolder;
#endif

#ifndef __HTMLStyleElementEvents2_FWD_DEFINED__
#define __HTMLStyleElementEvents2_FWD_DEFINED__
typedef interface HTMLStyleElementEvents2 HTMLStyleElementEvents2;
#endif

#ifndef __HTMLStyleElementEvents_FWD_DEFINED__
#define __HTMLStyleElementEvents_FWD_DEFINED__
typedef interface HTMLStyleElementEvents HTMLStyleElementEvents;
#endif

#ifndef __IHTMLStyleElement_FWD_DEFINED__
#define __IHTMLStyleElement_FWD_DEFINED__
typedef interface IHTMLStyleElement IHTMLStyleElement;
#endif

#ifndef __DispHTMLStyleElement_FWD_DEFINED__
#define __DispHTMLStyleElement_FWD_DEFINED__
typedef interface DispHTMLStyleElement DispHTMLStyleElement;
#endif

#ifndef __HTMLStyleElement_FWD_DEFINED__
#define __HTMLStyleElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLStyleElement HTMLStyleElement;
#else
typedef struct HTMLStyleElement HTMLStyleElement;
#endif
#endif

#ifndef __IHTMLStyleFontFace_FWD_DEFINED__
#define __IHTMLStyleFontFace_FWD_DEFINED__
typedef interface IHTMLStyleFontFace IHTMLStyleFontFace;
#endif

#ifndef __HTMLStyleFontFace_FWD_DEFINED__
#define __HTMLStyleFontFace_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLStyleFontFace HTMLStyleFontFace;
#else
typedef struct HTMLStyleFontFace HTMLStyleFontFace;
#endif
#endif

#ifndef __ICSSFilterSite_FWD_DEFINED__
#define __ICSSFilterSite_FWD_DEFINED__
typedef interface ICSSFilterSite ICSSFilterSite;
#endif

#ifndef __IMarkupPointer_FWD_DEFINED__
#define __IMarkupPointer_FWD_DEFINED__
typedef interface IMarkupPointer IMarkupPointer;
#endif

#ifndef __IMarkupContainer_FWD_DEFINED__
#define __IMarkupContainer_FWD_DEFINED__
typedef interface IMarkupContainer IMarkupContainer;
#endif

#ifndef __IMarkupContainer2_FWD_DEFINED__
#define __IMarkupContainer2_FWD_DEFINED__
typedef interface IMarkupContainer2 IMarkupContainer2;
#endif

#ifndef __IHTMLChangeLog_FWD_DEFINED__
#define __IHTMLChangeLog_FWD_DEFINED__
typedef interface IHTMLChangeLog IHTMLChangeLog;
#endif

#ifndef __IHTMLChangeSink_FWD_DEFINED__
#define __IHTMLChangeSink_FWD_DEFINED__
typedef interface IHTMLChangeSink IHTMLChangeSink;
#endif

#ifndef __IActiveIMMApp_FWD_DEFINED__
#define __IActiveIMMApp_FWD_DEFINED__
typedef interface IActiveIMMApp IActiveIMMApp;
#endif

#ifndef __ISegmentList_FWD_DEFINED__
#define __ISegmentList_FWD_DEFINED__
typedef interface ISegmentList ISegmentList;
#endif

#ifndef __ISegmentListIterator_FWD_DEFINED__
#define __ISegmentListIterator_FWD_DEFINED__
typedef interface ISegmentListIterator ISegmentListIterator;
#endif

#ifndef __IHTMLCaret_FWD_DEFINED__
#define __IHTMLCaret_FWD_DEFINED__
typedef interface IHTMLCaret IHTMLCaret;
#endif

#ifndef __ISegment_FWD_DEFINED__
#define __ISegment_FWD_DEFINED__
typedef interface ISegment ISegment;
#endif

#ifndef __IElementSegment_FWD_DEFINED__
#define __IElementSegment_FWD_DEFINED__
typedef interface IElementSegment IElementSegment;
#endif

#ifndef __IHighlightSegment_FWD_DEFINED__
#define __IHighlightSegment_FWD_DEFINED__
typedef interface IHighlightSegment IHighlightSegment;
#endif

#ifndef __IHighlightRenderingServices_FWD_DEFINED__
#define __IHighlightRenderingServices_FWD_DEFINED__
typedef interface IHighlightRenderingServices IHighlightRenderingServices;
#endif

#ifndef __ILineInfo_FWD_DEFINED__
#define __ILineInfo_FWD_DEFINED__
typedef interface ILineInfo ILineInfo;
#endif

#ifndef __IDisplayPointer_FWD_DEFINED__
#define __IDisplayPointer_FWD_DEFINED__
typedef interface IDisplayPointer IDisplayPointer;
#endif

#ifndef __IDisplayServices_FWD_DEFINED__
#define __IDisplayServices_FWD_DEFINED__
typedef interface IDisplayServices IDisplayServices;
#endif

#ifndef __IHtmlDlgSafeHelper_FWD_DEFINED__
#define __IHtmlDlgSafeHelper_FWD_DEFINED__
typedef interface IHtmlDlgSafeHelper IHtmlDlgSafeHelper;
#endif

#ifndef __IBlockFormats_FWD_DEFINED__
#define __IBlockFormats_FWD_DEFINED__
typedef interface IBlockFormats IBlockFormats;
#endif

#ifndef __IFontNames_FWD_DEFINED__
#define __IFontNames_FWD_DEFINED__
typedef interface IFontNames IFontNames;
#endif

#ifndef __ICSSFilter_FWD_DEFINED__
#define __ICSSFilter_FWD_DEFINED__
typedef interface ICSSFilter ICSSFilter;
#endif

#ifndef __ISecureUrlHost_FWD_DEFINED__
#define __ISecureUrlHost_FWD_DEFINED__
typedef interface ISecureUrlHost ISecureUrlHost;
#endif

#ifndef __IMarkupServices_FWD_DEFINED__
#define __IMarkupServices_FWD_DEFINED__
typedef interface IMarkupServices IMarkupServices;
#endif

#ifndef __IMarkupServices2_FWD_DEFINED__
#define __IMarkupServices2_FWD_DEFINED__
typedef interface IMarkupServices2 IMarkupServices2;
#endif

#ifndef __IHTMLChangePlayback_FWD_DEFINED__
#define __IHTMLChangePlayback_FWD_DEFINED__
typedef interface IHTMLChangePlayback IHTMLChangePlayback;
#endif

#ifndef __IMarkupPointer2_FWD_DEFINED__
#define __IMarkupPointer2_FWD_DEFINED__
typedef interface IMarkupPointer2 IMarkupPointer2;
#endif

#ifndef __IMarkupTextFrags_FWD_DEFINED__
#define __IMarkupTextFrags_FWD_DEFINED__
typedef interface IMarkupTextFrags IMarkupTextFrags;
#endif

#ifndef __IXMLGenericParse_FWD_DEFINED__
#define __IXMLGenericParse_FWD_DEFINED__
typedef interface IXMLGenericParse IXMLGenericParse;
#endif

#ifndef __IHTMLEditHost_FWD_DEFINED__
#define __IHTMLEditHost_FWD_DEFINED__
typedef interface IHTMLEditHost IHTMLEditHost;
#endif

#ifndef __IHTMLEditHost2_FWD_DEFINED__
#define __IHTMLEditHost2_FWD_DEFINED__
typedef interface IHTMLEditHost2 IHTMLEditHost2;
#endif

#ifndef __ISequenceNumber_FWD_DEFINED__
#define __ISequenceNumber_FWD_DEFINED__
typedef interface ISequenceNumber ISequenceNumber;
#endif

#ifndef __IIMEServices_FWD_DEFINED__
#define __IIMEServices_FWD_DEFINED__
typedef interface IIMEServices IIMEServices;
#endif

#ifndef __ISelectionServicesListener_FWD_DEFINED__
#define __ISelectionServicesListener_FWD_DEFINED__
typedef interface ISelectionServicesListener ISelectionServicesListener;
#endif

#ifndef __ISelectionServices_FWD_DEFINED__
#define __ISelectionServices_FWD_DEFINED__
typedef interface ISelectionServices ISelectionServices;
#endif

#ifndef __IHTMLEditDesigner_FWD_DEFINED__
#define __IHTMLEditDesigner_FWD_DEFINED__
typedef interface IHTMLEditDesigner IHTMLEditDesigner;
#endif

#ifndef __IHTMLEditServices_FWD_DEFINED__
#define __IHTMLEditServices_FWD_DEFINED__
typedef interface IHTMLEditServices IHTMLEditServices;
#endif

#ifndef __IHTMLEditServices2_FWD_DEFINED__
#define __IHTMLEditServices2_FWD_DEFINED__
typedef interface IHTMLEditServices2 IHTMLEditServices2;
#endif

#ifndef __IHTMLComputedStyle_FWD_DEFINED__
#define __IHTMLComputedStyle_FWD_DEFINED__
typedef interface IHTMLComputedStyle IHTMLComputedStyle;
#endif

#ifndef __HtmlDlgSafeHelper_FWD_DEFINED__
#define __HtmlDlgSafeHelper_FWD_DEFINED__
#ifdef __cplusplus
typedef class HtmlDlgSafeHelper HtmlDlgSafeHelper;
#else
typedef struct HtmlDlgSafeHelper HtmlDlgSafeHelper;
#endif
#endif

#ifndef __BlockFormats_FWD_DEFINED__
#define __BlockFormats_FWD_DEFINED__
#ifdef __cplusplus
typedef class BlockFormats BlockFormats;
#else
typedef struct BlockFormats BlockFormats;
#endif
#endif

#ifndef __FontNames_FWD_DEFINED__
#define __FontNames_FWD_DEFINED__
#ifdef __cplusplus
typedef class FontNames FontNames;
#else
typedef struct FontNames FontNames;
#endif
#endif

#ifndef __HTMLNamespaceEvents_FWD_DEFINED__
#define __HTMLNamespaceEvents_FWD_DEFINED__
typedef interface HTMLNamespaceEvents HTMLNamespaceEvents;
#endif

#ifndef __IHTMLNamespace_FWD_DEFINED__
#define __IHTMLNamespace_FWD_DEFINED__
typedef interface IHTMLNamespace IHTMLNamespace;
#endif

#ifndef __IHTMLNamespaceCollection_FWD_DEFINED__
#define __IHTMLNamespaceCollection_FWD_DEFINED__
typedef interface IHTMLNamespaceCollection IHTMLNamespaceCollection;
#endif

#ifndef __HTMLNamespace_FWD_DEFINED__
#define __HTMLNamespace_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLNamespace HTMLNamespace;
#else
typedef struct HTMLNamespace HTMLNamespace;
#endif
#endif

#ifndef __HTMLNamespaceCollection_FWD_DEFINED__
#define __HTMLNamespaceCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLNamespaceCollection HTMLNamespaceCollection;
#else
typedef struct HTMLNamespaceCollection HTMLNamespaceCollection;
#endif
#endif

#ifndef __IHTMLPainter_FWD_DEFINED__
#define __IHTMLPainter_FWD_DEFINED__
typedef interface IHTMLPainter IHTMLPainter;
#endif

#ifndef __IHTMLPaintSite_FWD_DEFINED__
#define __IHTMLPaintSite_FWD_DEFINED__
typedef interface IHTMLPaintSite IHTMLPaintSite;
#endif

#ifndef __IHTMLPainterEventInfo_FWD_DEFINED__
#define __IHTMLPainterEventInfo_FWD_DEFINED__
typedef interface IHTMLPainterEventInfo IHTMLPainterEventInfo;
#endif

#ifndef __IHTMLPainterOverlay_FWD_DEFINED__
#define __IHTMLPainterOverlay_FWD_DEFINED__
typedef interface IHTMLPainterOverlay IHTMLPainterOverlay;
#endif

#ifndef __IHTMLIPrintCollection_FWD_DEFINED__
#define __IHTMLIPrintCollection_FWD_DEFINED__
typedef interface IHTMLIPrintCollection IHTMLIPrintCollection;
#endif

#ifndef __IEnumPrivacyRecords_FWD_DEFINED__
#define __IEnumPrivacyRecords_FWD_DEFINED__
typedef interface IEnumPrivacyRecords IEnumPrivacyRecords;
#endif

#ifndef __IHTMLDialog_FWD_DEFINED__
#define __IHTMLDialog_FWD_DEFINED__
typedef interface IHTMLDialog IHTMLDialog;
#endif

#ifndef __IHTMLDialog2_FWD_DEFINED__
#define __IHTMLDialog2_FWD_DEFINED__
typedef interface IHTMLDialog2 IHTMLDialog2;
#endif

#ifndef __IHTMLDialog3_FWD_DEFINED__
#define __IHTMLDialog3_FWD_DEFINED__
typedef interface IHTMLDialog3 IHTMLDialog3;
#endif

#ifndef __IHTMLModelessInit_FWD_DEFINED__
#define __IHTMLModelessInit_FWD_DEFINED__
typedef interface IHTMLModelessInit IHTMLModelessInit;
#endif

#ifndef __ThreadDialogProcParam_FWD_DEFINED__
#define __ThreadDialogProcParam_FWD_DEFINED__
#ifdef __cplusplus
typedef class ThreadDialogProcParam ThreadDialogProcParam;
#else
typedef struct ThreadDialogProcParam ThreadDialogProcParam;
#endif
#endif

#ifndef __HTMLDialog_FWD_DEFINED__
#define __HTMLDialog_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDialog HTMLDialog;
#else
typedef struct HTMLDialog HTMLDialog;
#endif
#endif

#ifndef __IHTMLPopup_FWD_DEFINED__
#define __IHTMLPopup_FWD_DEFINED__
typedef interface IHTMLPopup IHTMLPopup;
#endif

#ifndef __DispHTMLPopup_FWD_DEFINED__
#define __DispHTMLPopup_FWD_DEFINED__
typedef interface DispHTMLPopup DispHTMLPopup;
#endif

#ifndef __HTMLPopup_FWD_DEFINED__
#define __HTMLPopup_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLPopup HTMLPopup;
#else
typedef struct HTMLPopup HTMLPopup;
#endif
#endif

#ifndef __IHTMLAppBehavior_FWD_DEFINED__
#define __IHTMLAppBehavior_FWD_DEFINED__
typedef interface IHTMLAppBehavior IHTMLAppBehavior;
#endif

#ifndef __IHTMLAppBehavior2_FWD_DEFINED__
#define __IHTMLAppBehavior2_FWD_DEFINED__
typedef interface IHTMLAppBehavior2 IHTMLAppBehavior2;
#endif

#ifndef __IHTMLAppBehavior3_FWD_DEFINED__
#define __IHTMLAppBehavior3_FWD_DEFINED__
typedef interface IHTMLAppBehavior3 IHTMLAppBehavior3;
#endif

#ifndef __DispHTMLAppBehavior_FWD_DEFINED__
#define __DispHTMLAppBehavior_FWD_DEFINED__
typedef interface DispHTMLAppBehavior DispHTMLAppBehavior;
#endif

#ifndef __HTMLAppBehavior_FWD_DEFINED__
#define __HTMLAppBehavior_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLAppBehavior HTMLAppBehavior;
#else
typedef struct HTMLAppBehavior HTMLAppBehavior;
#endif
#endif

#ifndef __OldHTMLDocument_FWD_DEFINED__
#define __OldHTMLDocument_FWD_DEFINED__
#ifdef __cplusplus
typedef class OldHTMLDocument OldHTMLDocument;
#else
typedef struct OldHTMLDocument OldHTMLDocument;
#endif
#endif

#ifndef __OldHTMLFormElement_FWD_DEFINED__
#define __OldHTMLFormElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class OldHTMLFormElement OldHTMLFormElement;
#else
typedef struct OldHTMLFormElement OldHTMLFormElement;
#endif
#endif

#ifndef __DispIHTMLInputButtonElement_FWD_DEFINED__
#define __DispIHTMLInputButtonElement_FWD_DEFINED__
typedef interface DispIHTMLInputButtonElement DispIHTMLInputButtonElement;
#endif

#ifndef __HTMLInputButtonElement_FWD_DEFINED__
#define __HTMLInputButtonElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLInputButtonElement HTMLInputButtonElement;
#else
typedef struct HTMLInputButtonElement HTMLInputButtonElement;
#endif
#endif

#ifndef __DispIHTMLInputTextElement_FWD_DEFINED__
#define __DispIHTMLInputTextElement_FWD_DEFINED__
typedef interface DispIHTMLInputTextElement DispIHTMLInputTextElement;
#endif

#ifndef __HTMLInputTextElement_FWD_DEFINED__
#define __HTMLInputTextElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLInputTextElement HTMLInputTextElement;
#else
typedef struct HTMLInputTextElement HTMLInputTextElement;
#endif
#endif

#ifndef __DispIHTMLInputFileElement_FWD_DEFINED__
#define __DispIHTMLInputFileElement_FWD_DEFINED__
typedef interface DispIHTMLInputFileElement DispIHTMLInputFileElement;
#endif

#ifndef __HTMLInputFileElement_FWD_DEFINED__
#define __HTMLInputFileElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLInputFileElement HTMLInputFileElement;
#else
typedef struct HTMLInputFileElement HTMLInputFileElement;
#endif
#endif

#ifndef __DispIHTMLOptionButtonElement_FWD_DEFINED__
#define __DispIHTMLOptionButtonElement_FWD_DEFINED__
typedef interface DispIHTMLOptionButtonElement DispIHTMLOptionButtonElement;
#endif

#ifndef __HTMLOptionButtonElement_FWD_DEFINED__
#define __HTMLOptionButtonElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLOptionButtonElement HTMLOptionButtonElement;
#else
typedef struct HTMLOptionButtonElement HTMLOptionButtonElement;
#endif
#endif

#ifndef __DispIHTMLInputImage_FWD_DEFINED__
#define __DispIHTMLInputImage_FWD_DEFINED__
typedef interface DispIHTMLInputImage DispIHTMLInputImage;
#endif

#ifndef __HTMLInputImage_FWD_DEFINED__
#define __HTMLInputImage_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLInputImage HTMLInputImage;
#else
typedef struct HTMLInputImage HTMLInputImage;
#endif
#endif

#ifndef __IElementNamespace_FWD_DEFINED__
#define __IElementNamespace_FWD_DEFINED__
typedef interface IElementNamespace IElementNamespace;
#endif

#ifndef __IElementNamespaceTable_FWD_DEFINED__
#define __IElementNamespaceTable_FWD_DEFINED__
typedef interface IElementNamespaceTable IElementNamespaceTable;
#endif

#ifndef __IElementNamespaceFactory_FWD_DEFINED__
#define __IElementNamespaceFactory_FWD_DEFINED__
typedef interface IElementNamespaceFactory IElementNamespaceFactory;
#endif

#ifndef __IElementNamespaceFactory2_FWD_DEFINED__
#define __IElementNamespaceFactory2_FWD_DEFINED__
typedef interface IElementNamespaceFactory2 IElementNamespaceFactory2;
#endif

#ifndef __IElementNamespaceFactoryCallback_FWD_DEFINED__
#define __IElementNamespaceFactoryCallback_FWD_DEFINED__
typedef interface IElementNamespaceFactoryCallback IElementNamespaceFactoryCallback;
#endif

#ifndef __IElementBehaviorSiteOM2_FWD_DEFINED__
#define __IElementBehaviorSiteOM2_FWD_DEFINED__
typedef interface IElementBehaviorSiteOM2 IElementBehaviorSiteOM2;
#endif

#ifndef __IElementBehaviorCategory_FWD_DEFINED__
#define __IElementBehaviorCategory_FWD_DEFINED__
typedef interface IElementBehaviorCategory IElementBehaviorCategory;
#endif

#ifndef __IElementBehaviorSiteCategory_FWD_DEFINED__
#define __IElementBehaviorSiteCategory_FWD_DEFINED__
typedef interface IElementBehaviorSiteCategory IElementBehaviorSiteCategory;
#endif

#ifndef __IElementBehaviorSubmit_FWD_DEFINED__
#define __IElementBehaviorSubmit_FWD_DEFINED__
typedef interface IElementBehaviorSubmit IElementBehaviorSubmit;
#endif

#ifndef __IElementBehaviorFocus_FWD_DEFINED__
#define __IElementBehaviorFocus_FWD_DEFINED__
typedef interface IElementBehaviorFocus IElementBehaviorFocus;
#endif

#ifndef __IElementBehaviorLayout_FWD_DEFINED__
#define __IElementBehaviorLayout_FWD_DEFINED__
typedef interface IElementBehaviorLayout IElementBehaviorLayout;
#endif

#ifndef __IElementBehaviorLayout2_FWD_DEFINED__
#define __IElementBehaviorLayout2_FWD_DEFINED__
typedef interface IElementBehaviorLayout2 IElementBehaviorLayout2;
#endif

#ifndef __IElementBehaviorSiteLayout_FWD_DEFINED__
#define __IElementBehaviorSiteLayout_FWD_DEFINED__
typedef interface IElementBehaviorSiteLayout IElementBehaviorSiteLayout;
#endif

#ifndef __IElementBehaviorSiteLayout2_FWD_DEFINED__
#define __IElementBehaviorSiteLayout2_FWD_DEFINED__
typedef interface IElementBehaviorSiteLayout2 IElementBehaviorSiteLayout2;
#endif

#ifndef __IHostBehaviorInit_FWD_DEFINED__
#define __IHostBehaviorInit_FWD_DEFINED__
typedef interface IHostBehaviorInit IHostBehaviorInit;
#endif

#include "ocidl.h"
#include "dimm.h"

#ifdef __cplusplus
extern "C" {
#endif

  void *__RPC_API MIDL_user_allocate(size_t);
  void __RPC_API MIDL_user_free(void *);

#include <olectl.h>
  EXTERN_C const GUID CMDSETID_Forms3;
  EXTERN_C const GUID CLSID_MHTMLDocument;
  EXTERN_C const GUID CLSID_HTADocument;
  EXTERN_C const GUID CLSID_HTMLApplication;
  EXTERN_C const GUID CLSID_HTMLPluginDocument;
  DEFINE_GUID(SID_SEditCommandTarget,0x3050f4b5,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);
  DEFINE_GUID(CGID_EditStateCommands,0x3050f4b6,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);
  DEFINE_GUID(SID_SHTMLEditHost,0x3050f6a0,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);
  DEFINE_GUID(SID_SHTMLEditServices,0x3050f7f9,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);
#define SID_SHTMLWindow IID_IHTMLWindow2
#define SID_SElementBehaviorFactory IID_IElementBehaviorFactory

#define COOKIEACTION_NONE 0x00000000
#define COOKIEACTION_ACCEPT 0x00000001
#define COOKIEACTION_REJECT 0x00000002
#define COOKIEACTION_DOWNGRADE 0x00000004
#define COOKIEACTION_LEASH 0x00000008
#define COOKIEACTION_SUPPRESS 0x00000010
#define COOKIEACTION_READ 0x00000020

#define PRIVACY_URLISTOPLEVEL 0x00010000
#define PRIVACY_URLHASCOMPACTPOLICY 0x00020000
#define PRIVACY_URLHASPOSTDATA 0x00080000
#define PRIVACY_URLHASPOLICYREFLINK 0x00100000
#define PRIVACY_URLHASPOLICYREFHEADER 0x00200000
#define PRIVACY_URLHASP3PHEADER 0x00400000

#ifndef _WINGDI_
  typedef struct tagLOGFONTA {
    LONG lfHeight;
    LONG lfWidth;
    LONG lfEscapement;
    LONG lfOrientation;
    LONG lfWeight;
    BYTE lfItalic;
    BYTE lfUnderline;
    BYTE lfStrikeOut;
    BYTE lfCharSet;
    BYTE lfOutPrecision;
    BYTE lfClipPrecision;
    BYTE lfQuality;
    BYTE lfPitchAndFamily;
    CHAR lfFaceName[32 ];
  } LOGFONTA;

  typedef struct tagLOGFONTW {
    LONG lfHeight;
    LONG lfWidth;
    LONG lfEscapement;
    LONG lfOrientation;
    LONG lfWeight;
    BYTE lfItalic;
    BYTE lfUnderline;
    BYTE lfStrikeOut;
    BYTE lfCharSet;
    BYTE lfOutPrecision;
    BYTE lfClipPrecision;
    BYTE lfQuality;
    BYTE lfPitchAndFamily;
    WCHAR lfFaceName[32 ];
  } LOGFONTW;

  typedef LOGFONTA LOGFONT;
#endif

  extern RPC_IF_HANDLE __MIDL_itf_mshtml_0000_v0_0_c_ifspec;
  extern RPC_IF_HANDLE __MIDL_itf_mshtml_0000_v0_0_s_ifspec;

#ifndef __IHTMLFiltersCollection_INTERFACE_DEFINED__
#define __IHTMLFiltersCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFiltersCollection;
  struct IHTMLFiltersCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(VARIANT *pvarIndex,VARIANT *pvarResult) = 0;
  };
  HRESULT WINAPI IHTMLFiltersCollection_get_length_Proxy(IHTMLFiltersCollection *This,long *p);
  void __RPC_STUB IHTMLFiltersCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFiltersCollection_get__newEnum_Proxy(IHTMLFiltersCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLFiltersCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFiltersCollection_item_Proxy(IHTMLFiltersCollection *This,VARIANT *pvarIndex,VARIANT *pvarResult);
  void __RPC_STUB IHTMLFiltersCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __MSHTML_LIBRARY_DEFINED__
#define __MSHTML_LIBRARY_DEFINED__
  typedef enum _htmlDesignMode {
    htmlDesignModeInherit = -2,htmlDesignModeOn = -1,htmlDesignModeOff = 0,htmlDesignMode_Max = 2147483647L
  } htmlDesignMode;

  typedef enum _htmlZOrder {
    htmlZOrderFront = 0,htmlZOrderBack = 1,htmlZOrder_Max = 2147483647L
  } htmlZOrder;

  typedef enum _htmlClear {
    htmlClearNotSet = 0,htmlClearAll = 1,htmlClearLeft = 2,htmlClearRight = 3,htmlClearBoth = 4,htmlClearNone = 5,htmlClear_Max = 2147483647L
  } htmlClear;

  typedef enum _htmlControlAlign {
    htmlControlAlignNotSet = 0,htmlControlAlignLeft = 1,htmlControlAlignCenter = 2,htmlControlAlignRight = 3,htmlControlAlignTextTop = 4,
    htmlControlAlignAbsMiddle = 5,htmlControlAlignBaseline = 6,htmlControlAlignAbsBottom = 7,htmlControlAlignBottom = 8,htmlControlAlignMiddle = 9,
    htmlControlAlignTop = 10,htmlControlAlign_Max = 2147483647L
  } htmlControlAlign;

  typedef enum _htmlBlockAlign {
    htmlBlockAlignNotSet = 0,htmlBlockAlignLeft = 1,htmlBlockAlignCenter = 2,htmlBlockAlignRight = 3,htmlBlockAlignJustify = 4,
    htmlBlockAlign_Max = 2147483647L
  } htmlBlockAlign;

  typedef enum _htmlReadyState {
    htmlReadyStateuninitialized = 0,htmlReadyStateloading = 1,htmlReadyStateloaded = 2,htmlReadyStateinteractive = 3,htmlReadyStatecomplete = 4,
    htmlReadyState_Max = 2147483647L
  } htmlReadyState;

  typedef enum _htmlLoop {
    htmlLoopLoopInfinite = -1,htmlLoop_Max = 2147483647L
  } htmlLoop;

  typedef enum _mediaType {
    mediaTypeNotSet = 0,mediaTypeAll = 511,mediaTypeAural = 1,mediaTypeBraille = 2,mediaTypeEmbossed = 4,mediaTypeHandheld = 8,mediaTypePrint = 16,
    mediaTypeProjection = 32,mediaTypeScreen = 64,mediaTypeTty = 128,mediaTypeTv = 256,mediaType_Max = 2147483647L
  } mediaType;

  typedef enum _styleTextTransform {
    styleTextTransformNotSet = 0,styleTextTransformCapitalize = 1,styleTextTransformLowercase = 2,styleTextTransformUppercase = 3,
    styleTextTransformNone = 4,styleTextTransform_Max = 2147483647L
  } styleTextTransform;

  typedef enum _styleDataRepeat {
    styleDataRepeatNone = 0,styleDataRepeatInner = 1,styleDataRepeat_Max = 2147483647L
  } styleDataRepeat;

  typedef enum _styleOverflow {
    styleOverflowNotSet = 0,styleOverflowAuto = 1,styleOverflowHidden = 2,styleOverflowVisible = 3,styleOverflowScroll = 4,
    styleOverflow_Max = 2147483647L
  } styleOverflow;

  typedef enum _styleTableLayout {
    styleTableLayoutNotSet = 0,styleTableLayoutAuto = 1,styleTableLayoutFixed = 2,styleTableLayout_Max = 2147483647L
  } styleTableLayout;

  typedef enum _styleBorderCollapse {
    styleBorderCollapseNotSet = 0,styleBorderCollapseSeparate = 1,styleBorderCollapseCollapse = 2,styleBorderCollapse_Max = 2147483647L
  } styleBorderCollapse;

  typedef enum _styleFontStyle {
    styleFontStyleNotSet = 0,styleFontStyleItalic = 1,styleFontStyleOblique = 2,styleFontStyleNormal = 3,styleFontStyle_Max = 2147483647L
  } styleFontStyle;

  typedef enum _styleFontVariant {
    styleFontVariantNotSet = 0,styleFontVariantSmallCaps = 1,styleFontVariantNormal = 2,styleFontVariant_Max = 2147483647L
  } styleFontVariant;

  typedef enum _styleBackgroundRepeat {
    styleBackgroundRepeatRepeat = 0,styleBackgroundRepeatRepeatX = 1,styleBackgroundRepeatRepeatY = 2,styleBackgroundRepeatNoRepeat = 3,styleBackgroundRepeatNotSet = 4,styleBackgroundRepeat_Max = 2147483647L
  } styleBackgroundRepeat;

  typedef enum _styleBackgroundAttachment {
    styleBackgroundAttachmentFixed = 0,styleBackgroundAttachmentScroll = 1,styleBackgroundAttachmentNotSet = 2,
    styleBackgroundAttachment_Max = 2147483647L
  } styleBackgroundAttachment;

  typedef enum _styleVerticalAlign {
    styleVerticalAlignAuto = 0,styleVerticalAlignBaseline = 1,styleVerticalAlignSub = 2,styleVerticalAlignSuper = 3,styleVerticalAlignTop = 4,
    styleVerticalAlignTextTop = 5,styleVerticalAlignMiddle = 6,styleVerticalAlignBottom = 7,styleVerticalAlignTextBottom = 8,
    styleVerticalAlignInherit = 9,styleVerticalAlignNotSet = 10,styleVerticalAlign_Max = 2147483647L
  } styleVerticalAlign;

  typedef enum _styleFontWeight {
    styleFontWeightNotSet = 0,styleFontWeight100 = 1,styleFontWeight200 = 2,styleFontWeight300 = 3,styleFontWeight400 = 4,styleFontWeight500 = 5,
    styleFontWeight600 = 6,styleFontWeight700 = 7,styleFontWeight800 = 8,styleFontWeight900 = 9,styleFontWeightNormal = 10,styleFontWeightBold = 11,
    styleFontWeightBolder = 12,styleFontWeightLighter = 13,styleFontWeight_Max = 2147483647L
  } styleFontWeight;

  typedef enum _styleBackgroundPositionX {
    styleBackgroundPositionXNotSet = 0,styleBackgroundPositionXLeft = 1,styleBackgroundPositionXCenter = 2,styleBackgroundPositionXRight = 3,
    styleBackgroundPositionX_Max = 2147483647L
  } styleBackgroundPositionX;

  typedef enum _styleBackgroundPositionY {
    styleBackgroundPositionYNotSet = 0,styleBackgroundPositionYTop = 1,styleBackgroundPositionYCenter = 2,styleBackgroundPositionYBottom = 3,
    styleBackgroundPositionY_Max = 2147483647L
  } styleBackgroundPositionY;

  typedef enum _styleFontSize {
    styleFontSizeXXSmall = 0,styleFontSizeXSmall = 1,styleFontSizeSmall = 2,styleFontSizeMedium = 3,styleFontSizeLarge = 4,styleFontSizeXLarge = 5,
    styleFontSizeXXLarge = 6,styleFontSizeSmaller = 7,styleFontSizeLarger = 8,styleFontSize_Max = 2147483647L
  } styleFontSize;

  typedef enum _styleAuto {
    styleAutoAuto = 0,styleAuto_Max = 2147483647L
  } styleAuto;

  typedef enum _styleNormal {
    styleNormalNormal = 0,styleNormal_Max = 2147483647L
  } styleNormal;

  typedef enum _styleBorderWidth {
    styleBorderWidthThin = 0,styleBorderWidthMedium = 1,styleBorderWidthThick = 2,styleBorderWidth_Max = 2147483647L
  } styleBorderWidth;

  typedef enum _stylePosition {
    stylePositionNotSet = 0,stylePositionstatic = 1,stylePositionrelative = 2,stylePositionabsolute = 3,stylePositionfixed = 4,
    stylePosition_Max = 2147483647L
  } stylePosition;

  typedef enum _styleBorderStyle {
    styleBorderStyleNotSet = 0,styleBorderStyleDotted = 1,styleBorderStyleDashed = 2,styleBorderStyleSolid = 3,styleBorderStyleDouble = 4,
    styleBorderStyleGroove = 5,styleBorderStyleRidge = 6,styleBorderStyleInset = 7,styleBorderStyleOutset = 8,styleBorderStyleWindowInset = 9,
    styleBorderStyleNone = 10,styleBorderStyle_Max = 2147483647L
  } styleBorderStyle;

  typedef enum _styleStyleFloat {
    styleStyleFloatNotSet = 0,styleStyleFloatLeft = 1,styleStyleFloatRight = 2,styleStyleFloatNone = 3,styleStyleFloat_Max = 2147483647L
  } styleStyleFloat;

  typedef enum _styleDisplay {
    styleDisplayNotSet = 0,styleDisplayBlock = 1,styleDisplayInline = 2,styleDisplayListItem = 3,styleDisplayNone = 4,styleDisplayTableHeaderGroup = 5,
    styleDisplayTableFooterGroup = 6,styleDisplayInlineBlock = 7,styleDisplay_Max = 2147483647L
  } styleDisplay;

  typedef enum _styleVisibility {
    styleVisibilityNotSet = 0,styleVisibilityInherit = 1,styleVisibilityVisible = 2,styleVisibilityHidden = 3,styleVisibility_Max = 2147483647L
  } styleVisibility;

  typedef enum _styleListStyleType {
    styleListStyleTypeNotSet = 0,styleListStyleTypeDisc = 1,styleListStyleTypeCircle = 2,styleListStyleTypeSquare = 3,styleListStyleTypeDecimal = 4,
    styleListStyleTypeLowerRoman = 5,styleListStyleTypeUpperRoman = 6,styleListStyleTypeLowerAlpha = 7,styleListStyleTypeUpperAlpha = 8,
    styleListStyleTypeNone = 9,styleListStyleType_Max = 2147483647L
  } styleListStyleType;

  typedef enum _styleListStylePosition {
    styleListStylePositionNotSet = 0,styleListStylePositionInside = 1,styleListStylePositionOutSide = 2,styleListStylePosition_Max = 2147483647L
  } styleListStylePosition;

  typedef enum _styleWhiteSpace {
    styleWhiteSpaceNotSet = 0,styleWhiteSpaceNormal = 1,styleWhiteSpacePre = 2,styleWhiteSpaceNowrap = 3,styleWhiteSpace_Max = 2147483647L
  } styleWhiteSpace;

  typedef enum _stylePageBreak {
    stylePageBreakNotSet = 0,stylePageBreakAuto = 1,stylePageBreakAlways = 2,stylePageBreakLeft = 3,stylePageBreakRight = 4,
    stylePageBreak_Max = 2147483647L
  } stylePageBreak;

  typedef enum _styleCursor {
    styleCursorAuto = 0,styleCursorCrosshair = 1,styleCursorDefault = 2,styleCursorHand = 3,styleCursorMove = 4,styleCursorE_resize = 5,
    styleCursorNe_resize = 6,styleCursorNw_resize = 7,styleCursorN_resize = 8,styleCursorSe_resize = 9,styleCursorSw_resize = 10,
    styleCursorS_resize = 11,styleCursorW_resize = 12,styleCursorText = 13,styleCursorWait = 14,styleCursorHelp = 15,styleCursorPointer = 16,
    styleCursorProgress = 17,styleCursorNot_allowed = 18,styleCursorNo_drop = 19,styleCursorVertical_text = 20,styleCursorall_scroll = 21,
    styleCursorcol_resize = 22,styleCursorrow_resize = 23,styleCursorcustom = 24,styleCursorNotSet = 25,styleCursor_Max = 2147483647L
  } styleCursor;

  typedef enum _styleDir {
    styleDirNotSet = 0,styleDirLeftToRight = 1,styleDirRightToLeft = 2,styleDirInherit = 3,styleDir_Max = 2147483647L
  } styleDir;

  typedef enum _styleBidi {
    styleBidiNotSet = 0,styleBidiNormal = 1,styleBidiEmbed = 2,styleBidiOverride = 3,styleBidiInherit = 4,styleBidi_Max = 2147483647L
  } styleBidi;

  typedef enum _styleImeMode {
    styleImeModeAuto = 0,styleImeModeActive = 1,styleImeModeInactive = 2,styleImeModeDisabled = 3,styleImeModeNotSet = 4,styleImeMode_Max = 2147483647L
  } styleImeMode;

  typedef enum _styleRubyAlign {
    styleRubyAlignNotSet = 0,styleRubyAlignAuto = 1,styleRubyAlignLeft = 2,styleRubyAlignCenter = 3,styleRubyAlignRight = 4,
    styleRubyAlignDistributeLetter = 5,styleRubyAlignDistributeSpace = 6,styleRubyAlignLineEdge = 7,styleRubyAlign_Max = 2147483647L
  } styleRubyAlign;

  typedef enum _styleRubyPosition {
    styleRubyPositionNotSet = 0,styleRubyPositionAbove = 1,styleRubyPositionInline = 2,styleRubyPosition_Max = 2147483647L
  } styleRubyPosition;

  typedef enum _styleRubyOverhang {
    styleRubyOverhangNotSet = 0,styleRubyOverhangAuto = 1,styleRubyOverhangWhitespace = 2,styleRubyOverhangNone = 3,styleRubyOverhang_Max = 2147483647L
  } styleRubyOverhang;

  typedef enum _styleLayoutGridChar {
    styleLayoutGridCharNotSet = 0,styleLayoutGridCharAuto = 1,styleLayoutGridCharNone = 2,styleLayoutGridChar_Max = 2147483647L
  } styleLayoutGridChar;

  typedef enum _styleLayoutGridLine {
    styleLayoutGridLineNotSet = 0,styleLayoutGridLineAuto = 1,styleLayoutGridLineNone = 2,styleLayoutGridLine_Max = 2147483647L
  } styleLayoutGridLine;

  typedef enum _styleLayoutGridMode {
    styleLayoutGridModeNotSet = 0,styleLayoutGridModeChar = 1,styleLayoutGridModeLine = 2,styleLayoutGridModeBoth = 3,styleLayoutGridModeNone = 4,
    styleLayoutGridMode_Max = 2147483647L
  } styleLayoutGridMode;

  typedef enum _styleLayoutGridType {
    styleLayoutGridTypeNotSet = 0,styleLayoutGridTypeLoose = 1,styleLayoutGridTypeStrict = 2,styleLayoutGridTypeFixed = 3,
    styleLayoutGridType_Max = 2147483647L
  } styleLayoutGridType;

  typedef enum _styleLineBreak {
    styleLineBreakNotSet = 0,styleLineBreakNormal = 1,styleLineBreakStrict = 2,styleLineBreak_Max = 2147483647L
  } styleLineBreak;

  typedef enum _styleWordBreak {
    styleWordBreakNotSet = 0,styleWordBreakNormal = 1,styleWordBreakBreakAll = 2,styleWordBreakKeepAll = 3,styleWordBreak_Max = 2147483647L
  } styleWordBreak;

  typedef enum _styleWordWrap {
    styleWordWrapNotSet = 0,styleWordWrapOff = 1,styleWordWrapOn = 2,styleWordWrap_Max = 2147483647L
  } styleWordWrap;

  typedef enum _styleTextJustify {
    styleTextJustifyNotSet = 0,styleTextJustifyInterWord = 1,styleTextJustifyNewspaper = 2,styleTextJustifyDistribute = 3,
    styleTextJustifyDistributeAllLines = 4,styleTextJustifyInterIdeograph = 5,styleTextJustifyInterCluster = 6,styleTextJustifyKashida = 7,
    styleTextJustifyAuto = 8,styleTextJustify_Max = 2147483647L
  } styleTextJustify;

  typedef enum _styleTextAlignLast {
    styleTextAlignLastNotSet = 0,styleTextAlignLastLeft = 1,styleTextAlignLastCenter = 2,styleTextAlignLastRight = 3,styleTextAlignLastJustify = 4,
    styleTextAlignLastAuto = 5,styleTextAlignLast_Max = 2147483647L
  } styleTextAlignLast;

  typedef enum _styleTextJustifyTrim {
    styleTextJustifyTrimNotSet = 0,styleTextJustifyTrimNone = 1,styleTextJustifyTrimPunctuation = 2,styleTextJustifyTrimPunctAndKana = 3,
    styleTextJustifyTrim_Max = 2147483647L
  } styleTextJustifyTrim;

  typedef enum _styleAccelerator {
    styleAcceleratorFalse = 0,styleAcceleratorTrue = 1,styleAccelerator_Max = 2147483647L
  } styleAccelerator;

  typedef enum _styleLayoutFlow {
    styleLayoutFlowHorizontal = 0,styleLayoutFlowVerticalIdeographic = 1,styleLayoutFlowNotSet = 2,styleLayoutFlow_Max = 2147483647L
  } styleLayoutFlow;

  typedef enum _styleWritingMode {
    styleWritingModeLrtb = 0,styleWritingModeTbrl = 1,styleWritingModeNotSet = 2,styleWritingMode_Max = 2147483647L
  } styleWritingMode;

  typedef enum _styleBool {
    styleBoolFalse = 0,styleBoolTrue = 1,styleBool_Max = 2147483647L
  } styleBool;

  typedef enum _styleTextUnderlinePosition {
    styleTextUnderlinePositionBelow = 0,styleTextUnderlinePositionAbove = 1,styleTextUnderlinePositionAuto = 2,styleTextUnderlinePositionNotSet = 3,
    styleTextUnderlinePosition_Max = 2147483647L
  } styleTextUnderlinePosition;

  typedef enum _styleTextOverflow {
    styleTextOverflowClip = 0,styleTextOverflowEllipsis = 1,styleTextOverflowNotSet = 2,styleTextOverflow_Max = 2147483647L
  } styleTextOverflow;

  EXTERN_C const GUID CLSID_CStyle;
  EXTERN_C const GUID CLSID_CRuleStyle;

  typedef enum _styleTextLineThroughStyle {
    styleTextLineThroughStyleUndefined = 0,styleTextLineThroughStyleSingle = 1,styleTextLineThroughStyleDouble = 2,
    styleTextLineThroughStyle_Max = 2147483647L
  } styleTextLineThroughStyle;

  typedef enum _styleTextUnderlineStyle {
    styleTextUnderlineStyleUndefined = 0,styleTextUnderlineStyleSingle = 1,styleTextUnderlineStyleDouble = 2,styleTextUnderlineStyleWords = 3,
    styleTextUnderlineStyleDotted = 4,styleTextUnderlineStyleThick = 5,styleTextUnderlineStyleDash = 6,styleTextUnderlineStyleDotDash = 7,
    styleTextUnderlineStyleDotDotDash = 8,styleTextUnderlineStyleWave = 9,styleTextUnderlineStyleSingleAccounting = 10,
    styleTextUnderlineStyleDoubleAccounting = 11,styleTextUnderlineStyleThickDash = 12,styleTextUnderlineStyle_Max = 2147483647L
  } styleTextUnderlineStyle;

  typedef enum _styleTextEffect {
    styleTextEffectNone = 0,styleTextEffectEmboss = 1,styleTextEffectEngrave = 2,styleTextEffectOutline = 3,styleTextEffect_Max = 2147483647L
  } styleTextEffect;

  typedef enum _styleDefaultTextSelection {
    styleDefaultTextSelectionFalse = 0,styleDefaultTextSelectionTrue = 1,styleDefaultTextSelection_Max = 2147483647L
  } styleDefaultTextSelection;

  typedef enum _styleTextDecoration {
    styleTextDecorationNone = 0,styleTextDecorationUnderline = 1,styleTextDecorationOverline = 2,styleTextDecorationLineThrough = 3,
    styleTextDecorationBlink = 4,styleTextDecoration_Max = 2147483647L
  } styleTextDecoration;

  EXTERN_C const GUID CLSID_CRenderStyle;

  typedef enum _textDecoration {
    textDecorationNone = 0,textDecorationUnderline = 1,textDecorationOverline = 2,textDecorationLineThrough = 3,textDecorationBlink = 4,
    textDecoration_Max = 2147483647L
  } textDecoration;

  EXTERN_C const GUID CLSID_CCurrentStyle;
  EXTERN_C const GUID CLSID_CAttribute;
  EXTERN_C const GUID CLSID_CDOMTextNode;
  EXTERN_C const GUID CLSID_CDOMImplementation;
  EXTERN_C const GUID CLSID_CAttrCollectionator;
  EXTERN_C const GUID CLSID_CDOMChildrenCollection;

  typedef enum _htmlListType {
    htmlListTypeNotSet = 0,htmlListTypeLargeAlpha = 1,htmlListTypeSmallAlpha = 2,htmlListTypeLargeRoman = 3,htmlListTypeSmallRoman = 4,
    htmlListTypeNumbers = 5,htmlListTypeDisc = 6,htmlListTypeCircle = 7,htmlListTypeSquare = 8,htmlListType_Max = 2147483647L
  } htmlListType;

  typedef enum _htmlMethod {
    htmlMethodNotSet = 0,htmlMethodGet = 1,htmlMethodPost = 2,htmlMethod_Max = 2147483647L
  } htmlMethod;

  typedef enum _htmlWrap {
    htmlWrapOff = 1,htmlWrapSoft = 2,htmlWrapHard = 3,htmlWrap_Max = 2147483647L
  } htmlWrap;

  typedef enum _htmlDir {
    htmlDirNotSet = 0,htmlDirLeftToRight = 1,htmlDirRightToLeft = 2,htmlDir_Max = 2147483647L
  } htmlDir;

  typedef enum _htmlEditable {
    htmlEditableInherit = 0,htmlEditableTrue = 1,htmlEditableFalse = 2,htmlEditable_Max = 2147483647L
  } htmlEditable;

  typedef enum _htmlInput {
    htmlInputNotSet = 0,htmlInputButton = 1,htmlInputCheckbox = 2,htmlInputFile = 3,htmlInputHidden = 4,htmlInputImage = 5,htmlInputPassword = 6,
    htmlInputRadio = 7,htmlInputReset = 8,htmlInputSelectOne = 9,htmlInputSelectMultiple = 10,htmlInputSubmit = 11,htmlInputText = 12,
    htmlInputTextarea = 13,htmlInputRichtext = 14,htmlInput_Max = 2147483647L
  } htmlInput;

  typedef enum _htmlEncoding {
    htmlEncodingURL = 0,htmlEncodingMultipart = 1,htmlEncodingText = 2,htmlEncoding_Max = 2147483647L
  } htmlEncoding;

  typedef enum _htmlAdjacency {
    htmlAdjacencyBeforeBegin = 1,htmlAdjacencyAfterBegin = 2,htmlAdjacencyBeforeEnd = 3,htmlAdjacencyAfterEnd = 4,htmlAdjacency_Max = 2147483647L
  } htmlAdjacency;

  typedef enum _htmlTabIndex {
    htmlTabIndexNotSet = -32768,htmlTabIndex_Max = 2147483647L
  } htmlTabIndex;

  typedef enum _htmlComponent {
    htmlComponentClient = 0,htmlComponentSbLeft = 1,htmlComponentSbPageLeft = 2,htmlComponentSbHThumb = 3,htmlComponentSbPageRight = 4,
    htmlComponentSbRight = 5,htmlComponentSbUp = 6,htmlComponentSbPageUp = 7,htmlComponentSbVThumb = 8,htmlComponentSbPageDown = 9,
    htmlComponentSbDown = 10,htmlComponentSbLeft2 = 11,htmlComponentSbPageLeft2 = 12,htmlComponentSbRight2 = 13,htmlComponentSbPageRight2 = 14,
    htmlComponentSbUp2 = 15,htmlComponentSbPageUp2 = 16,htmlComponentSbDown2 = 17,htmlComponentSbPageDown2 = 18,htmlComponentSbTop = 19,
    htmlComponentSbBottom = 20,htmlComponentOutside = 21,htmlComponentGHTopLeft = 22,htmlComponentGHLeft = 23,htmlComponentGHTop = 24,
    htmlComponentGHBottomLeft = 25,htmlComponentGHTopRight = 26,htmlComponentGHBottom = 27,htmlComponentGHRight = 28,htmlComponentGHBottomRight = 29,
    htmlComponent_Max = 2147483647L
  } htmlComponent;

  typedef enum _htmlApplyLocation {
    htmlApplyLocationInside = 0,htmlApplyLocationOutside = 1,htmlApplyLocation_Max = 2147483647L
  } htmlApplyLocation;

  typedef enum _htmlGlyphMode {
    htmlGlyphModeNone = 0,htmlGlyphModeBegin = 1,htmlGlyphModeEnd = 2,htmlGlyphModeBoth = 3,htmlGlyphMode_Max = 2147483647L
  } htmlGlyphMode;

  EXTERN_C const GUID CLSID_CDefaults;
  EXTERN_C const GUID CLSID_CHtmlComponentDD;
  EXTERN_C const GUID CLSID_CHtmlComponentProperty;
  EXTERN_C const GUID CLSID_CHtmlComponentMethod;
  EXTERN_C const GUID CLSID_CHtmlComponentEvent;
  EXTERN_C const GUID CLSID_CHtmlComponentAttach;
  EXTERN_C const GUID CLSID_CHtmlComponentDesc;
  EXTERN_C const GUID CLSID_CPeerUrnCollection;
  EXTERN_C const GUID CLSID_CGenericElement;
  EXTERN_C const GUID CLSID_CStyleSheetRule;
  EXTERN_C const GUID CLSID_CStyleSheetRuleArray;
  EXTERN_C const GUID CLSID_CStyleSheetPage;
  EXTERN_C const GUID CLSID_CStyleSheetPageArray;
  EXTERN_C const GUID CLSID_CStyleSheet;
  EXTERN_C const GUID CLSID_CStyleSheetArray;
  EXTERN_C const GUID CLSID_CLinkElement;

  typedef enum _htmlUnit {
    htmlUnitCharacter = 1,htmlUnitWord = 2,htmlUnitSentence = 3,htmlUnitTextEdit = 6,htmlUnit_Max = 2147483647L
  } htmlUnit;

  typedef enum _htmlEndPoints {
    htmlEndPointsStartToStart = 1,htmlEndPointsStartToEnd = 2,htmlEndPointsEndToStart = 3,htmlEndPointsEndToEnd = 4,htmlEndPoints_Max = 2147483647L
  } htmlEndPoints;

  typedef enum _htmlDirection {
    htmlDirectionForward = 99999,htmlDirectionBackward = -99999,htmlDirection_Max = 2147483647L
  } htmlDirection;

  EXTERN_C const GUID CLSID_CFormElement;

  typedef enum _htmlStart {
    htmlStartfileopen = 0,htmlStartmouseover = 1,htmlStart_Max = 2147483647L
  } htmlStart;

  EXTERN_C const GUID CLSID_CTextElement;
  EXTERN_C const GUID CLSID_CImgElement;
  EXTERN_C const GUID CLSID_CImageElementFactory;

  typedef enum _bodyScroll {
    bodyScrollyes = 1,bodyScrollno = 2,bodyScrollauto = 4,bodyScrolldefault = 3,bodyScroll_Max = 2147483647L
  } bodyScroll;

  EXTERN_C const GUID CLSID_CBodyElement;
  EXTERN_C const GUID CLSID_CFontElement;
  EXTERN_C const GUID CLSID_CAnchorElement;
  EXTERN_C const GUID CLSID_CLabelElement;
  EXTERN_C const GUID CLSID_CListElement;
  EXTERN_C const GUID CLSID_CUListElement;
  EXTERN_C const GUID CLSID_COListElement;
  EXTERN_C const GUID CLSID_CLIElement;
  EXTERN_C const GUID CLSID_CBlockElement;
  EXTERN_C const GUID CLSID_CDivElement;
  EXTERN_C const GUID CLSID_CDDElement;
  EXTERN_C const GUID CLSID_CDTElement;
  EXTERN_C const GUID CLSID_CBRElement;
  EXTERN_C const GUID CLSID_CDListElement;
  EXTERN_C const GUID CLSID_CHRElement;
  EXTERN_C const GUID CLSID_CParaElement;
  EXTERN_C const GUID CLSID_CElementCollection;
  EXTERN_C const GUID CLSID_CHeaderElement;

  typedef enum _htmlSelectType {
    htmlSelectTypeSelectOne = 1,htmlSelectTypeSelectMultiple = 2,htmlSelectType_Max = 2147483647L
  } htmlSelectType;

  EXTERN_C const GUID CLSID_CSelectElement;

  typedef enum _htmlSelection {
    htmlSelectionNone = 0,htmlSelectionText = 1,htmlSelectionControl = 2,htmlSelectionTable = 3,htmlSelection_Max = 2147483647L
  } htmlSelection;

  EXTERN_C const GUID CLSID_COptionElement;
  EXTERN_C const GUID CLSID_COptionElementFactory;
  EXTERN_C const GUID CLSID_CInput;
  EXTERN_C const GUID CLSID_CTextArea;
  EXTERN_C const GUID CLSID_CRichtext;
  EXTERN_C const GUID CLSID_CButton;

  typedef enum _htmlMarqueeBehavior {
    htmlMarqueeBehaviorscroll = 1,htmlMarqueeBehaviorslide = 2,htmlMarqueeBehavioralternate = 3,htmlMarqueeBehavior_Max = 2147483647L
  } htmlMarqueeBehavior;

  typedef enum _htmlMarqueeDirection {
    htmlMarqueeDirectionleft = 1,htmlMarqueeDirectionright = 3,htmlMarqueeDirectionup = 5,htmlMarqueeDirectiondown = 7,
    htmlMarqueeDirection_Max = 2147483647L
  } htmlMarqueeDirection;

  EXTERN_C const GUID CLSID_CMarquee;
  EXTERN_C const GUID CLSID_CHtmlElement;
  EXTERN_C const GUID CLSID_CHeadElement;
  EXTERN_C const GUID CLSID_CTitleElement;
  EXTERN_C const GUID CLSID_CMetaElement;
  EXTERN_C const GUID CLSID_CBaseElement;
  EXTERN_C const GUID CLSID_CIsIndexElement;
  EXTERN_C const GUID CLSID_CNextIdElement;
  EXTERN_C const GUID CLSID_CBaseFontElement;
  EXTERN_C const GUID CLSID_CUnknownElement;
  EXTERN_C const GUID CLSID_COmHistory;
  EXTERN_C const GUID CLSID_CMimeTypes;
  EXTERN_C const GUID CLSID_CPlugins;
  EXTERN_C const GUID CLSID_COpsProfile;
  EXTERN_C const GUID CLSID_COmNavigator;
  EXTERN_C const GUID CLSID_COmLocation;

  typedef enum _htmlPersistState {
    htmlPersistStateNormal = 0,htmlPersistStateFavorite = 1,htmlPersistStateHistory = 2,htmlPersistStateSnapshot = 3,htmlPersistStateUserData = 4,
    htmlPersistState_Max = 2147483647L
  } htmlPersistState;

  typedef enum _htmlDropEffect {
    htmlDropEffectCopy = 0,htmlDropEffectLink = 1,htmlDropEffectMove = 2,htmlDropEffectNone = 3,htmlDropEffect_Max = 2147483647L
  } htmlDropEffect;

  typedef enum _htmlEffectAllowed {
    htmlEffectAllowedCopy = 0,htmlEffectAllowedLink = 1,htmlEffectAllowedMove = 2,htmlEffectAllowedCopyLink = 3,htmlEffectAllowedCopyMove = 4,
    htmlEffectAllowedLinkMove = 5,htmlEffectAllowedAll = 6,htmlEffectAllowedNone = 7,htmlEffectAllowedUninitialized = 8,
    htmlEffectAllowed_Max = 2147483647L
  } htmlEffectAllowed;

  EXTERN_C const GUID CLSID_CEventObj;
  EXTERN_C const GUID CLSID_CFramesCollection;
  EXTERN_C const GUID CLSID_CScreen;
  EXTERN_C const GUID CLSID_CWindow;
  EXTERN_C const GUID CLSID_COmWindowProxy;

  typedef enum _htmlCompatMode {
    htmlCompatModeBackCompat = 0,htmlCompatModeCSS1Compat = 1,htmlCompatMode_Max = 2147483647L
  } htmlCompatMode;

  EXTERN_C const GUID CLSID_CDocument;
  EXTERN_C const GUID CLSID_CScriptlet;

  typedef enum _BoolValue {
    True = 1,False = 0,BoolValue_Max = 2147483647L
  } BoolValue;

  EXTERN_C const GUID CLSID_CPluginSite;
  EXTERN_C const GUID CLSID_CAreasCollection;
  EXTERN_C const GUID CLSID_CMapElement;
  EXTERN_C const GUID CLSID_CAreaElement;

  typedef enum _htmlCaptionAlign {
    htmlCaptionAlignNotSet = 0,htmlCaptionAlignLeft = 1,htmlCaptionAlignCenter = 2,htmlCaptionAlignRight = 3,htmlCaptionAlignJustify = 4,
    htmlCaptionAlignTop = 5,htmlCaptionAlignBottom = 6,htmlCaptionAlign_Max = 2147483647L
  } htmlCaptionAlign;

  typedef enum _htmlCaptionVAlign {
    htmlCaptionVAlignNotSet = 0,htmlCaptionVAlignTop = 1,htmlCaptionVAlignBottom = 2,htmlCaptionVAlign_Max = 2147483647L
  } htmlCaptionVAlign;

  EXTERN_C const GUID CLSID_CTableCaption;
  EXTERN_C const GUID CLSID_CCommentElement;
  EXTERN_C const GUID CLSID_CPhraseElement;
  EXTERN_C const GUID CLSID_CSpanElement;

  typedef enum _htmlFrame {
    htmlFrameNotSet = 0,htmlFramevoid = 1,htmlFrameabove = 2,htmlFramebelow = 3,htmlFramehsides = 4,htmlFramelhs = 5,htmlFramerhs = 6,
    htmlFramevsides = 7,htmlFramebox = 8,htmlFrameborder = 9,htmlFrame_Max = 2147483647L
  } htmlFrame;

  typedef enum _htmlRules {
    htmlRulesNotSet = 0,htmlRulesnone = 1,htmlRulesgroups = 2,htmlRulesrows = 3,htmlRulescols = 4,htmlRulesall = 5,htmlRules_Max = 2147483647L
  } htmlRules;

  typedef enum _htmlCellAlign {
    htmlCellAlignNotSet = 0,htmlCellAlignLeft = 1,htmlCellAlignCenter = 2,htmlCellAlignRight = 3,htmlCellAlignMiddle = htmlCellAlignCenter,
    htmlCellAlign_Max = 2147483647L
  } htmlCellAlign;

  typedef enum _htmlCellVAlign {
    htmlCellVAlignNotSet = 0,htmlCellVAlignTop = 1,htmlCellVAlignMiddle = 2,htmlCellVAlignBottom = 3,htmlCellVAlignBaseline = 4,
    htmlCellVAlignCenter = htmlCellVAlignMiddle,htmlCellVAlign_Max = 2147483647L
  } htmlCellVAlign;

  EXTERN_C const GUID CLSID_CTable;
  EXTERN_C const GUID CLSID_CTableCol;
  EXTERN_C const GUID CLSID_CTableSection;
  EXTERN_C const GUID CLSID_CTableRow;
  EXTERN_C const GUID CLSID_CTableCell;
  EXTERN_C const GUID CLSID_CScriptElement;
  EXTERN_C const GUID CLSID_CNoShowElement;
  EXTERN_C const GUID CLSID_CObjectElement;
  EXTERN_C const GUID CLSID_CParamElement;

  typedef enum _frameScrolling {
    frameScrollingyes = 1,frameScrollingno = 2,frameScrollingauto = 4,frameScrolling_Max = 2147483647L
  } frameScrolling;

  EXTERN_C const GUID CLSID_CFrameSite;
  EXTERN_C const GUID CLSID_CFrameElement;
  EXTERN_C const GUID CLSID_CIFrameElement;
  EXTERN_C const GUID CLSID_C1DElement;
  EXTERN_C const GUID CLSID_CFieldSetElement;
  EXTERN_C const GUID CLSID_CLegendElement;
  EXTERN_C const GUID CLSID_CSpanSite;
  EXTERN_C const GUID CLSID_CFrameSetSite;
  EXTERN_C const GUID CLSID_CBGsound;
  EXTERN_C const GUID CLSID_CStyleElement;
  EXTERN_C const GUID CLSID_CFontFace;

  typedef enum _ELEMENT_CORNER {
    ELEMENT_CORNER_NONE = 0,ELEMENT_CORNER_TOP = 1,ELEMENT_CORNER_LEFT = 2,ELEMENT_CORNER_BOTTOM = 3,ELEMENT_CORNER_RIGHT = 4,
    ELEMENT_CORNER_TOPLEFT = 5,ELEMENT_CORNER_TOPRIGHT = 6,ELEMENT_CORNER_BOTTOMLEFT = 7,ELEMENT_CORNER_BOTTOMRIGHT = 8,ELEMENT_CORNER_Max = 2147483647L
  } ELEMENT_CORNER;

  typedef enum _SECUREURLHOSTVALIDATE_FLAGS {
    SUHV_PROMPTBEFORENO = 0x1,SUHV_SILENTYES = 0x2,SUHV_UNSECURESOURCE = 0x4,SECUREURLHOSTVALIDATE_FLAGS_Max = 2147483647L
  } SECUREURLHOSTVALIDATE_FLAGS;

  typedef enum _POINTER_GRAVITY {
    POINTER_GRAVITY_Left = 0,POINTER_GRAVITY_Right = 1,POINTER_GRAVITY_Max = 2147483647L
  } POINTER_GRAVITY;

  typedef enum _ELEMENT_ADJACENCY {
    ELEM_ADJ_BeforeBegin = 0,ELEM_ADJ_AfterBegin = 1,ELEM_ADJ_BeforeEnd = 2,ELEM_ADJ_AfterEnd = 3,ELEMENT_ADJACENCY_Max = 2147483647L
  } ELEMENT_ADJACENCY;

  typedef enum _MARKUP_CONTEXT_TYPE {
    CONTEXT_TYPE_None = 0,CONTEXT_TYPE_Text = 1,CONTEXT_TYPE_EnterScope = 2,CONTEXT_TYPE_ExitScope = 3,CONTEXT_TYPE_NoScope = 4,
    MARKUP_CONTEXT_TYPE_Max = 2147483647L
  } MARKUP_CONTEXT_TYPE;

  typedef enum _FINDTEXT_FLAGS {
    FINDTEXT_BACKWARDS = 0x1,FINDTEXT_WHOLEWORD = 0x2,FINDTEXT_MATCHCASE = 0x4,FINDTEXT_RAW = 0x20000,FINDTEXT_MATCHDIAC = 0x20000000,
    FINDTEXT_MATCHKASHIDA = 0x40000000,FINDTEXT_MATCHALEFHAMZA = 0x80000000,FINDTEXT_FLAGS_Max = 2147483647L
  } FINDTEXT_FLAGS;

  typedef enum _MOVEUNIT_ACTION {
    MOVEUNIT_PREVCHAR = 0,MOVEUNIT_NEXTCHAR = 1,MOVEUNIT_PREVCLUSTERBEGIN = 2,MOVEUNIT_NEXTCLUSTERBEGIN = 3,MOVEUNIT_PREVCLUSTEREND = 4,
    MOVEUNIT_NEXTCLUSTEREND = 5,MOVEUNIT_PREVWORDBEGIN = 6,MOVEUNIT_NEXTWORDBEGIN = 7,MOVEUNIT_PREVWORDEND = 8,MOVEUNIT_NEXTWORDEND = 9,
    MOVEUNIT_PREVPROOFWORD = 10,MOVEUNIT_NEXTPROOFWORD = 11,MOVEUNIT_NEXTURLBEGIN = 12,MOVEUNIT_PREVURLBEGIN = 13,MOVEUNIT_NEXTURLEND = 14,
    MOVEUNIT_PREVURLEND = 15,MOVEUNIT_PREVSENTENCE = 16,MOVEUNIT_NEXTSENTENCE = 17,MOVEUNIT_PREVBLOCK = 18,MOVEUNIT_NEXTBLOCK = 19,
    MOVEUNIT_ACTION_Max = 2147483647L
  } MOVEUNIT_ACTION;

  typedef enum _PARSE_FLAGS {
    PARSE_ABSOLUTIFYIE40URLS = 0x1,PARSE_FLAGS_Max = 2147483647L
  } PARSE_FLAGS;

  typedef enum _ELEMENT_TAG_ID {
    TAGID_NULL = 0,TAGID_UNKNOWN = 1,TAGID_A = 2,TAGID_ACRONYM = 3,TAGID_ADDRESS = 4,TAGID_APPLET = 5,TAGID_AREA = 6,TAGID_B = 7,TAGID_BASE = 8,
    TAGID_BASEFONT = 9,TAGID_BDO = 10,TAGID_BGSOUND = 11,TAGID_BIG = 12,TAGID_BLINK = 13,TAGID_BLOCKQUOTE = 14,TAGID_BODY = 15,TAGID_BR = 16,
    TAGID_BUTTON = 17,TAGID_CAPTION = 18,TAGID_CENTER = 19,TAGID_CITE = 20,TAGID_CODE = 21,TAGID_COL = 22,TAGID_COLGROUP = 23,TAGID_COMMENT = 24,
    TAGID_COMMENT_RAW = 25,TAGID_DD = 26,TAGID_DEL = 27,TAGID_DFN = 28,TAGID_DIR = 29,TAGID_DIV = 30,TAGID_DL = 31,TAGID_DT = 32,TAGID_EM = 33,
    TAGID_EMBED = 34,TAGID_FIELDSET = 35,TAGID_FONT = 36,TAGID_FORM = 37,TAGID_FRAME = 38,TAGID_FRAMESET = 39,TAGID_GENERIC = 40,TAGID_H1 = 41,
    TAGID_H2 = 42,TAGID_H3 = 43,TAGID_H4 = 44,TAGID_H5 = 45,TAGID_H6 = 46,TAGID_HEAD = 47,TAGID_HR = 48,TAGID_HTML = 49,TAGID_I = 50,TAGID_IFRAME = 51,
    TAGID_IMG = 52,TAGID_INPUT = 53,TAGID_INS = 54,TAGID_KBD = 55,TAGID_LABEL = 56,TAGID_LEGEND = 57,TAGID_LI = 58,TAGID_LINK = 59,TAGID_LISTING = 60,
    TAGID_MAP = 61,TAGID_MARQUEE = 62,TAGID_MENU = 63,TAGID_META = 64,TAGID_NEXTID = 65,TAGID_NOBR = 66,TAGID_NOEMBED = 67,TAGID_NOFRAMES = 68,
    TAGID_NOSCRIPT = 69,TAGID_OBJECT = 70,TAGID_OL = 71,TAGID_OPTION = 72,TAGID_P = 73,TAGID_PARAM = 74,TAGID_PLAINTEXT = 75,TAGID_PRE = 76,
    TAGID_Q = 77,TAGID_RP = 78,TAGID_RT = 79,TAGID_RUBY = 80,TAGID_S = 81,TAGID_SAMP = 82,TAGID_SCRIPT = 83,TAGID_SELECT = 84,TAGID_SMALL = 85,
    TAGID_SPAN = 86,TAGID_STRIKE = 87,TAGID_STRONG = 88,TAGID_STYLE = 89,TAGID_SUB = 90,TAGID_SUP = 91,TAGID_TABLE = 92,TAGID_TBODY = 93,TAGID_TC = 94,
    TAGID_TD = 95,TAGID_TEXTAREA = 96,TAGID_TFOOT = 97,TAGID_TH = 98,TAGID_THEAD = 99,TAGID_TITLE = 100,TAGID_TR = 101,TAGID_TT = 102,TAGID_U = 103,
    TAGID_UL = 104,TAGID_VAR = 105,TAGID_WBR = 106,TAGID_XMP = 107,TAGID_ROOT = 108,TAGID_OPTGROUP = 109,TAGID_COUNT = 110,
    TAGID_LAST_PREDEFINED = 10000,ELEMENT_TAG_ID_Max = 2147483647L
  } ELEMENT_TAG_ID;

  typedef enum _SELECTION_TYPE {
    SELECTION_TYPE_None = 0,SELECTION_TYPE_Caret = 1,SELECTION_TYPE_Text = 2,SELECTION_TYPE_Control = 3,SELECTION_TYPE_Max = 2147483647L
  } SELECTION_TYPE;

  typedef enum _SAVE_SEGMENTS_FLAGS {
    SAVE_SEGMENTS_NoIE4SelectionCompat = 0x1,SAVE_SEGMENTS_FLAGS_Max = 2147483647L
  } SAVE_SEGMENTS_FLAGS;

  typedef enum _CARET_DIRECTION {
    CARET_DIRECTION_INDETERMINATE = 0,CARET_DIRECTION_SAME = 1,CARET_DIRECTION_BACKWARD = 2,CARET_DIRECTION_FORWARD = 3,
    CARET_DIRECTION_Max = 2147483647L
  } CARET_DIRECTION;

  typedef enum _LINE_DIRECTION {
    LINE_DIRECTION_RightToLeft = 1,LINE_DIRECTION_LeftToRight = 2,LINE_DIRECTION_Max = 2147483647L
  } LINE_DIRECTION;

  typedef enum _HT_OPTIONS {
    HT_OPT_AllowAfterEOL = 0x1,HT_OPTIONS_Max = 2147483647L
  } HT_OPTIONS;

  typedef enum _HT_RESULTS {
    HT_RESULTS_Glyph = 0x1,HT_RESULTS_Max = 2147483647L
  } HT_RESULTS;

  typedef enum _DISPLAY_MOVEUNIT {
    DISPLAY_MOVEUNIT_PreviousLine = 1,DISPLAY_MOVEUNIT_NextLine = 2,DISPLAY_MOVEUNIT_CurrentLineStart = 3,DISPLAY_MOVEUNIT_CurrentLineEnd = 4,
    DISPLAY_MOVEUNIT_TopOfWindow = 5,DISPLAY_MOVEUNIT_BottomOfWindow = 6,DISPLAY_MOVEUNIT_Max = 2147483647L
  } DISPLAY_MOVEUNIT;

  typedef enum _DISPLAY_GRAVITY {
    DISPLAY_GRAVITY_PreviousLine = 1,DISPLAY_GRAVITY_NextLine = 2,DISPLAY_GRAVITY_Max = 2147483647L
  } DISPLAY_GRAVITY;

  typedef enum _DISPLAY_BREAK {
    DISPLAY_BREAK_None = 0,DISPLAY_BREAK_Block = 0x1,DISPLAY_BREAK_Break = 0x2,DISPLAY_BREAK_Max = 2147483647L
  } DISPLAY_BREAK;

  typedef enum _COORD_SYSTEM {
    COORD_SYSTEM_GLOBAL = 0,COORD_SYSTEM_PARENT = 1,COORD_SYSTEM_CONTAINER = 2,COORD_SYSTEM_CONTENT = 3,COORD_SYSTEM_FRAME = 4,COORD_SYSTEM_Max = 2147483647L
  } COORD_SYSTEM;

  EXTERN_C const GUID CLSID_HtmlDlgSafeHelper;
  EXTERN_C const GUID CLSID_BlockFormats;
  EXTERN_C const GUID CLSID_FontNames;
  EXTERN_C const GUID CLSID_CHTMLNamespace;
  EXTERN_C const GUID CLSID_CHTMLNamespaceCollection;

  typedef enum _HTML_PAINTER {
    HTMLPAINTER_OPAQUE = 0x1,HTMLPAINTER_TRANSPARENT = 0x2,HTMLPAINTER_ALPHA = 0x4,HTMLPAINTER_COMPLEX = 0x8,HTMLPAINTER_OVERLAY = 0x10,
    HTMLPAINTER_HITTEST = 0x20,HTMLPAINTER_SURFACE = 0x100,HTMLPAINTER_3DSURFACE = 0x200,HTMLPAINTER_NOBAND = 0x400,HTMLPAINTER_NODC = 0x1000,
    HTMLPAINTER_NOPHYSICALCLIP = 0x2000,HTMLPAINTER_NOSAVEDC = 0x4000,HTMLPAINTER_SUPPORTS_XFORM = 0x8000,HTMLPAINTER_EXPAND = 0x10000,
    HTMLPAINTER_NOSCROLLBITS = 0x20000,HTML_PAINTER_Max = 2147483647L
  } HTML_PAINTER;

  typedef enum _HTML_PAINT_ZORDER {
    HTMLPAINT_ZORDER_NONE = 0,HTMLPAINT_ZORDER_REPLACE_ALL = 1,HTMLPAINT_ZORDER_REPLACE_CONTENT = 2,HTMLPAINT_ZORDER_REPLACE_BACKGROUND = 3,
    HTMLPAINT_ZORDER_BELOW_CONTENT = 4,HTMLPAINT_ZORDER_BELOW_FLOW = 5,HTMLPAINT_ZORDER_ABOVE_FLOW = 6,HTMLPAINT_ZORDER_ABOVE_CONTENT = 7,
    HTMLPAINT_ZORDER_WINDOW_TOP = 8,HTML_PAINT_ZORDER_Max = 2147483647L
  } HTML_PAINT_ZORDER;

  typedef enum _HTML_PAINT_DRAW_FLAGS {
    HTMLPAINT_DRAW_UPDATEREGION = 0x1,HTMLPAINT_DRAW_USE_XFORM = 0x2,HTML_PAINT_DRAW_FLAGS_Max = 2147483647L
  } HTML_PAINT_DRAW_FLAGS;

  typedef enum _HTML_PAINT_EVENT_FLAGS {
    HTMLPAINT_EVENT_TARGET = 0x1,HTMLPAINT_EVENT_SETCURSOR = 0x2,HTML_PAINT_EVENT_FLAGS_Max = 2147483647L
  } HTML_PAINT_EVENT_FLAGS;

  typedef enum _HTML_PAINT_DRAW_INFO_FLAGS {
    HTMLPAINT_DRAWINFO_VIEWPORT = 0x1,HTMLPAINT_DRAWINFO_UPDATEREGION = 0x2,HTMLPAINT_DRAWINFO_XFORM = 0x4,HTML_PAINT_DRAW_INFO_FLAGS_Max = 2147483647L
  } HTML_PAINT_DRAW_INFO_FLAGS;

  typedef struct _HTML_PAINTER_INFO {
    LONG lFlags;
    LONG lZOrder;
    IID iidDrawObject;
    RECT rcExpand;
  } HTML_PAINTER_INFO;

  typedef struct _HTML_PAINT_XFORM {
    FLOAT eM11;
    FLOAT eM12;
    FLOAT eM21;
    FLOAT eM22;
    FLOAT eDx;
    FLOAT eDy;
  } HTML_PAINT_XFORM;

  typedef struct _HTML_PAINT_DRAW_INFO {
    RECT rcViewport;
    HRGN hrgnUpdate;
    HTML_PAINT_XFORM xform;
  } HTML_PAINT_DRAW_INFO;

  typedef enum _HTMLDlgFlag {
    HTMLDlgFlagNo = 0,HTMLDlgFlagOff = 0,HTMLDlgFlag0 = 0,HTMLDlgFlagYes = 1,HTMLDlgFlagOn = 1,HTMLDlgFlag1 = 1,HTMLDlgFlagNotSet = -1,
    HTMLDlgFlag_Max = 2147483647L
  } HTMLDlgFlag;

  typedef enum _HTMLDlgBorder {
    HTMLDlgBorderThin = 0,HTMLDlgBorderThick = 0x40000L,HTMLDlgBorder_Max = 2147483647L
  } HTMLDlgBorder;

  typedef enum _HTMLDlgEdge {
    HTMLDlgEdgeSunken = 0,HTMLDlgEdgeRaised = 16,HTMLDlgEdge_Max = 2147483647L
  } HTMLDlgEdge;

  typedef enum _HTMLDlgCenter {
    HTMLDlgCenterNo = 0,HTMLDlgCenterOff = 0,HTMLDlgCenter0 = 0,HTMLDlgCenterYes = 1,HTMLDlgCenterOn = 1,HTMLDlgCenter1 = 1,HTMLDlgCenterParent = 1,
    HTMLDlgCenterDesktop = 2,HTMLDlgCenter_Max = 2147483647L
  } HTMLDlgCenter;

  EXTERN_C const GUID CLSID_CThreadDialogProcParam;
  EXTERN_C const GUID CLSID_CHTMLDlg;
  EXTERN_C const GUID CLSID_CHTMLPopup;

  typedef enum _HTMLAppFlag {
    HTMLAppFlagNo = 0,HTMLAppFlagOff = 0,HTMLAppFlag0 = 0,HTMLAppFlagYes = 1,HTMLAppFlagOn = 1,HTMLAppFlag1 = 1,HTMLAppFlag_Max = 2147483647L
  } HTMLAppFlag;

  typedef enum _HTMLMinimizeFlag {
    HTMLMinimizeFlagNo = 0,HTMLMinimizeFlagYes = 0x20000L,HTMLMinimizeFlag_Max = 2147483647L
  } HTMLMinimizeFlag;

  typedef enum _HTMLMaximizeFlag {
    HTMLMaximizeFlagNo = 0,HTMLMaximizeFlagYes = 0x10000L,HTMLMaximizeFlag_Max = 2147483647L
  } HTMLMaximizeFlag;

  typedef enum _HTMLCaptionFlag {
    HTMLCaptionFlagNo = 0,HTMLCaptionFlagYes = 0xc00000L,HTMLCaptionFlag_Max = 2147483647L
  } HTMLCaptionFlag;

  typedef enum _HTMLSysMenuFlag {
    HTMLSysMenuFlagNo = 0,HTMLSysMenuFlagYes = 0x80000L,HTMLSysMenuFlag_Max = 2147483647L
  } HTMLSysMenuFlag;

  typedef enum _HTMLBorder {
    HTMLBorderNone = 0,HTMLBorderThick = 0x40000L,HTMLBorderDialog = 0x400000L,HTMLBorderThin = 0x800000L,HTMLBorder_Max = 2147483647L
  } HTMLBorder;

  typedef enum _HTMLBorderStyle {
    HTMLBorderStyleNormal = 0,HTMLBorderStyleRaised = 0x100L,HTMLBorderStyleSunken = 0x200L,HTMLBorderStylecombined = 0x300L,
    HTMLBorderStyleStatic = 0x20000L,HTMLBorderStyle_Max = 2147483647L
  } HTMLBorderStyle;

  typedef enum _HTMLWindowState {
    HTMLWindowStateNormal = 1,HTMLWindowStateMaximize = 3,HTMLWindowStateMinimize = 6,HTMLWindowState_Max = 2147483647L
  } HTMLWindowState;

  EXTERN_C const GUID CLSID_CAppBehavior;

  typedef enum _BEHAVIOR_EVENT {
    BEHAVIOREVENT_FIRST = 0,BEHAVIOREVENT_CONTENTREADY = 0,BEHAVIOREVENT_DOCUMENTREADY = 1,BEHAVIOREVENT_APPLYSTYLE = 2,
    BEHAVIOREVENT_DOCUMENTCONTEXTCHANGE = 3,BEHAVIOREVENT_CONTENTSAVE = 4,BEHAVIOREVENT_LAST = 4,BEHAVIOR_EVENT_Max = 2147483647L
  } BEHAVIOR_EVENT;

  typedef enum _BEHAVIOR_EVENT_FLAGS {
    BEHAVIOREVENTFLAGS_BUBBLE = 1,BEHAVIOREVENTFLAGS_STANDARDADDITIVE = 2,BEHAVIOR_EVENT_FLAGS_Max = 2147483647L
  } BEHAVIOR_EVENT_FLAGS;

  typedef enum _BEHAVIOR_RENDER_INFO {
    BEHAVIORRENDERINFO_BEFOREBACKGROUND = 0x1,BEHAVIORRENDERINFO_AFTERBACKGROUND = 0x2,BEHAVIORRENDERINFO_BEFORECONTENT = 0x4,
    BEHAVIORRENDERINFO_AFTERCONTENT = 0x8,BEHAVIORRENDERINFO_AFTERFOREGROUND = 0x20,BEHAVIORRENDERINFO_ABOVECONTENT = 0x28,
    BEHAVIORRENDERINFO_ALLLAYERS = 0xff,BEHAVIORRENDERINFO_DISABLEBACKGROUND = 0x100,BEHAVIORRENDERINFO_DISABLENEGATIVEZ = 0x200,
    BEHAVIORRENDERINFO_DISABLECONTENT = 0x400,BEHAVIORRENDERINFO_DISABLEPOSITIVEZ = 0x800,BEHAVIORRENDERINFO_DISABLEALLLAYERS = 0xf00,
    BEHAVIORRENDERINFO_HITTESTING = 0x1000,BEHAVIORRENDERINFO_SURFACE = 0x100000,BEHAVIORRENDERINFO_3DSURFACE = 0x200000,
    BEHAVIOR_RENDER_INFO_Max = 2147483647L
  } BEHAVIOR_RENDER_INFO;

  typedef enum _BEHAVIOR_RELATION {
    BEHAVIOR_FIRSTRELATION = 0,BEHAVIOR_SAMEELEMENT = 0,BEHAVIOR_PARENT = 1,BEHAVIOR_CHILD = 2,BEHAVIOR_SIBLING = 3,
    BEHAVIOR_LASTRELATION = 3,
    BEHAVIOR_RELATION_Max = 2147483647L
  } BEHAVIOR_RELATION;

  typedef enum _BEHAVIOR_LAYOUT_INFO {
    BEHAVIORLAYOUTINFO_FULLDELEGATION = 0x1,BEHAVIORLAYOUTINFO_MODIFYNATURAL = 0x2,BEHAVIORLAYOUTINFO_MAPSIZE = 0x4,
    BEHAVIOR_LAYOUT_INFO_Max = 2147483647L
  } BEHAVIOR_LAYOUT_INFO;

  typedef enum _BEHAVIOR_LAYOUT_MODE {
    BEHAVIORLAYOUTMODE_NATURAL = 0x1,BEHAVIORLAYOUTMODE_MINWIDTH = 0x2,BEHAVIORLAYOUTMODE_MAXWIDTH = 0x4,BEHAVIORLAYOUTMODE_MEDIA_RESOLUTION = 0x4000,
    BEHAVIORLAYOUTMODE_FINAL_PERCENT = 0x8000,BEHAVIOR_LAYOUT_MODE_Max = 2147483647L
  } BEHAVIOR_LAYOUT_MODE;

  typedef enum _ELEMENTDESCRIPTOR_FLAGS {
    ELEMENTDESCRIPTORFLAGS_LITERAL = 1,ELEMENTDESCRIPTORFLAGS_NESTED_LITERAL = 2,ELEMENTDESCRIPTOR_FLAGS_Max = 2147483647L
  } ELEMENTDESCRIPTOR_FLAGS;

  typedef enum _ELEMENTNAMESPACE_FLAGS {
    ELEMENTNAMESPACEFLAGS_ALLOWANYTAG = 0x1,ELEMENTNAMESPACEFLAGS_QUERYFORUNKNOWNTAGS = 0x2,ELEMENTNAMESPACE_FLAGS_Max = 2147483647L
  } ELEMENTNAMESPACE_FLAGS;

  EXTERN_C const IID LIBID_MSHTML;
#ifndef __IHTMLEventObj_INTERFACE_DEFINED__
#define __IHTMLEventObj_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEventObj;
  struct IHTMLEventObj : public IDispatch {
  public:
    virtual HRESULT WINAPI get_srcElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI get_altKey(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_ctrlKey(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_shiftKey(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_returnValue(VARIANT v) = 0;
    virtual HRESULT WINAPI get_returnValue(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_cancelBubble(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_cancelBubble(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_fromElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI get_toElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI put_keyCode(long v) = 0;
    virtual HRESULT WINAPI get_keyCode(long *p) = 0;
    virtual HRESULT WINAPI get_button(long *p) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI get_qualifier(BSTR *p) = 0;
    virtual HRESULT WINAPI get_reason(long *p) = 0;
    virtual HRESULT WINAPI get_x(long *p) = 0;
    virtual HRESULT WINAPI get_y(long *p) = 0;
    virtual HRESULT WINAPI get_clientX(long *p) = 0;
    virtual HRESULT WINAPI get_clientY(long *p) = 0;
    virtual HRESULT WINAPI get_offsetX(long *p) = 0;
    virtual HRESULT WINAPI get_offsetY(long *p) = 0;
    virtual HRESULT WINAPI get_screenX(long *p) = 0;
    virtual HRESULT WINAPI get_screenY(long *p) = 0;
    virtual HRESULT WINAPI get_srcFilter(IDispatch **p) = 0;
  };
  HRESULT WINAPI IHTMLEventObj_get_srcElement_Proxy(IHTMLEventObj *This,IHTMLElement **p);
  void __RPC_STUB IHTMLEventObj_get_srcElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_altKey_Proxy(IHTMLEventObj *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj_get_altKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_ctrlKey_Proxy(IHTMLEventObj *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj_get_ctrlKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_shiftKey_Proxy(IHTMLEventObj *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj_get_shiftKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_put_returnValue_Proxy(IHTMLEventObj *This,VARIANT v);
  void __RPC_STUB IHTMLEventObj_put_returnValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_returnValue_Proxy(IHTMLEventObj *This,VARIANT *p);
  void __RPC_STUB IHTMLEventObj_get_returnValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_put_cancelBubble_Proxy(IHTMLEventObj *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLEventObj_put_cancelBubble_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_cancelBubble_Proxy(IHTMLEventObj *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj_get_cancelBubble_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_fromElement_Proxy(IHTMLEventObj *This,IHTMLElement **p);
  void __RPC_STUB IHTMLEventObj_get_fromElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_toElement_Proxy(IHTMLEventObj *This,IHTMLElement **p);
  void __RPC_STUB IHTMLEventObj_get_toElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_put_keyCode_Proxy(IHTMLEventObj *This,long v);
  void __RPC_STUB IHTMLEventObj_put_keyCode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_keyCode_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_keyCode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_button_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_button_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_type_Proxy(IHTMLEventObj *This,BSTR *p);
  void __RPC_STUB IHTMLEventObj_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_qualifier_Proxy(IHTMLEventObj *This,BSTR *p);
  void __RPC_STUB IHTMLEventObj_get_qualifier_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_reason_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_reason_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_x_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_x_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_y_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_y_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_clientX_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_clientX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_clientY_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_clientY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_offsetX_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_offsetX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_offsetY_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_offsetY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_screenX_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_screenX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_screenY_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_screenY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_srcFilter_Proxy(IHTMLEventObj *This,IDispatch **p);
  void __RPC_STUB IHTMLEventObj_get_srcFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorSite_INTERFACE_DEFINED__
#define __IElementBehaviorSite_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorSite;
  struct IElementBehaviorSite : public IUnknown {
  public:
    virtual HRESULT WINAPI GetElement(IHTMLElement **ppElement) = 0;
    virtual HRESULT WINAPI RegisterNotification(LONG lEvent) = 0;
  };
  HRESULT WINAPI IElementBehaviorSite_GetElement_Proxy(IElementBehaviorSite *This,IHTMLElement **ppElement);
  void __RPC_STUB IElementBehaviorSite_GetElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSite_RegisterNotification_Proxy(IElementBehaviorSite *This,LONG lEvent);
  void __RPC_STUB IElementBehaviorSite_RegisterNotification_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehavior_INTERFACE_DEFINED__
#define __IElementBehavior_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehavior;
  struct IElementBehavior : public IUnknown {
  public:
    virtual HRESULT WINAPI Init(IElementBehaviorSite *pBehaviorSite) = 0;
    virtual HRESULT WINAPI Notify(LONG lEvent,VARIANT *pVar) = 0;
    virtual HRESULT WINAPI Detach(void) = 0;
  };
  HRESULT WINAPI IElementBehavior_Init_Proxy(IElementBehavior *This,IElementBehaviorSite *pBehaviorSite);
  void __RPC_STUB IElementBehavior_Init_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehavior_Notify_Proxy(IElementBehavior *This,LONG lEvent,VARIANT *pVar);
  void __RPC_STUB IElementBehavior_Notify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehavior_Detach_Proxy(IElementBehavior *This);
  void __RPC_STUB IElementBehavior_Detach_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorFactory_INTERFACE_DEFINED__
#define __IElementBehaviorFactory_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorFactory;
  struct IElementBehaviorFactory : public IUnknown {
  public:
    virtual HRESULT WINAPI FindBehavior(BSTR bstrBehavior,BSTR bstrBehaviorUrl,IElementBehaviorSite *pSite,IElementBehavior **ppBehavior) = 0;
  };
  HRESULT WINAPI IElementBehaviorFactory_FindBehavior_Proxy(IElementBehaviorFactory *This,BSTR bstrBehavior,BSTR bstrBehaviorUrl,IElementBehaviorSite *pSite,IElementBehavior **ppBehavior);
  void __RPC_STUB IElementBehaviorFactory_FindBehavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorSiteOM_INTERFACE_DEFINED__
#define __IElementBehaviorSiteOM_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorSiteOM;
  struct IElementBehaviorSiteOM : public IUnknown {
  public:
    virtual HRESULT WINAPI RegisterEvent(LPOLESTR pchEvent,LONG lFlags,LONG *plCookie) = 0;
    virtual HRESULT WINAPI GetEventCookie(LPOLESTR pchEvent,LONG *plCookie) = 0;
    virtual HRESULT WINAPI FireEvent(LONG lCookie,IHTMLEventObj *pEventObject) = 0;
    virtual HRESULT WINAPI CreateEventObject(IHTMLEventObj **ppEventObject) = 0;
    virtual HRESULT WINAPI RegisterName(LPOLESTR pchName) = 0;
    virtual HRESULT WINAPI RegisterUrn(LPOLESTR pchUrn) = 0;
  };
  HRESULT WINAPI IElementBehaviorSiteOM_RegisterEvent_Proxy(IElementBehaviorSiteOM *This,LPOLESTR pchEvent,LONG lFlags,LONG *plCookie);
  void __RPC_STUB IElementBehaviorSiteOM_RegisterEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSiteOM_GetEventCookie_Proxy(IElementBehaviorSiteOM *This,LPOLESTR pchEvent,LONG *plCookie);
  void __RPC_STUB IElementBehaviorSiteOM_GetEventCookie_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSiteOM_FireEvent_Proxy(IElementBehaviorSiteOM *This,LONG lCookie,IHTMLEventObj *pEventObject);
  void __RPC_STUB IElementBehaviorSiteOM_FireEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSiteOM_CreateEventObject_Proxy(IElementBehaviorSiteOM *This,IHTMLEventObj **ppEventObject);
  void __RPC_STUB IElementBehaviorSiteOM_CreateEventObject_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSiteOM_RegisterName_Proxy(IElementBehaviorSiteOM *This,LPOLESTR pchName);
  void __RPC_STUB IElementBehaviorSiteOM_RegisterName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSiteOM_RegisterUrn_Proxy(IElementBehaviorSiteOM *This,LPOLESTR pchUrn);
  void __RPC_STUB IElementBehaviorSiteOM_RegisterUrn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorRender_INTERFACE_DEFINED__
#define __IElementBehaviorRender_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorRender;
  struct IElementBehaviorRender : public IUnknown {
  public:
    virtual HRESULT WINAPI Draw(HDC hdc,LONG lLayer,RECT *pRect,IUnknown *pReserved) = 0;
    virtual HRESULT WINAPI GetRenderInfo(LONG *plRenderInfo) = 0;
    virtual HRESULT WINAPI HitTestPoint(POINT *pPoint,IUnknown *pReserved,WINBOOL *pbHit) = 0;
  };
  HRESULT WINAPI IElementBehaviorRender_Draw_Proxy(IElementBehaviorRender *This,HDC hdc,LONG lLayer,RECT *pRect,IUnknown *pReserved);
  void __RPC_STUB IElementBehaviorRender_Draw_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorRender_GetRenderInfo_Proxy(IElementBehaviorRender *This,LONG *plRenderInfo);
  void __RPC_STUB IElementBehaviorRender_GetRenderInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorRender_HitTestPoint_Proxy(IElementBehaviorRender *This,POINT *pPoint,IUnknown *pReserved,WINBOOL *pbHit);
  void __RPC_STUB IElementBehaviorRender_HitTestPoint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorSiteRender_INTERFACE_DEFINED__
#define __IElementBehaviorSiteRender_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorSiteRender;
  struct IElementBehaviorSiteRender : public IUnknown {
  public:
    virtual HRESULT WINAPI Invalidate(RECT *pRect) = 0;
    virtual HRESULT WINAPI InvalidateRenderInfo(void) = 0;
    virtual HRESULT WINAPI InvalidateStyle(void) = 0;
  };
  HRESULT WINAPI IElementBehaviorSiteRender_Invalidate_Proxy(IElementBehaviorSiteRender *This,RECT *pRect);
  void __RPC_STUB IElementBehaviorSiteRender_Invalidate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSiteRender_InvalidateRenderInfo_Proxy(IElementBehaviorSiteRender *This);
  void __RPC_STUB IElementBehaviorSiteRender_InvalidateRenderInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSiteRender_InvalidateStyle_Proxy(IElementBehaviorSiteRender *This);
  void __RPC_STUB IElementBehaviorSiteRender_InvalidateStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLStyle_INTERFACE_DEFINED__
#define __IHTMLStyle_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyle;
  struct IHTMLStyle : public IDispatch {
  public:
    virtual HRESULT WINAPI put_fontFamily(BSTR v) = 0;
    virtual HRESULT WINAPI get_fontFamily(BSTR *p) = 0;
    virtual HRESULT WINAPI put_fontStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_fontStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_fontVariant(BSTR v) = 0;
    virtual HRESULT WINAPI get_fontVariant(BSTR *p) = 0;
    virtual HRESULT WINAPI put_fontWeight(BSTR v) = 0;
    virtual HRESULT WINAPI get_fontWeight(BSTR *p) = 0;
    virtual HRESULT WINAPI put_fontSize(VARIANT v) = 0;
    virtual HRESULT WINAPI get_fontSize(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_font(BSTR v) = 0;
    virtual HRESULT WINAPI get_font(BSTR *p) = 0;
    virtual HRESULT WINAPI put_color(VARIANT v) = 0;
    virtual HRESULT WINAPI get_color(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_background(BSTR v) = 0;
    virtual HRESULT WINAPI get_background(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_backgroundColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_backgroundImage(BSTR v) = 0;
    virtual HRESULT WINAPI get_backgroundImage(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundRepeat(BSTR v) = 0;
    virtual HRESULT WINAPI get_backgroundRepeat(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundAttachment(BSTR v) = 0;
    virtual HRESULT WINAPI get_backgroundAttachment(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundPosition(BSTR v) = 0;
    virtual HRESULT WINAPI get_backgroundPosition(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundPositionX(VARIANT v) = 0;
    virtual HRESULT WINAPI get_backgroundPositionX(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_backgroundPositionY(VARIANT v) = 0;
    virtual HRESULT WINAPI get_backgroundPositionY(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_wordSpacing(VARIANT v) = 0;
    virtual HRESULT WINAPI get_wordSpacing(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_letterSpacing(VARIANT v) = 0;
    virtual HRESULT WINAPI get_letterSpacing(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_textDecoration(BSTR v) = 0;
    virtual HRESULT WINAPI get_textDecoration(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textDecorationNone(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationNone(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_textDecorationUnderline(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationUnderline(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_textDecorationOverline(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationOverline(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_textDecorationLineThrough(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationLineThrough(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_textDecorationBlink(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationBlink(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_verticalAlign(VARIANT v) = 0;
    virtual HRESULT WINAPI get_verticalAlign(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_textTransform(BSTR v) = 0;
    virtual HRESULT WINAPI get_textTransform(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textAlign(BSTR v) = 0;
    virtual HRESULT WINAPI get_textAlign(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textIndent(VARIANT v) = 0;
    virtual HRESULT WINAPI get_textIndent(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_lineHeight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_lineHeight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginTop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginTop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginRight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginRight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginBottom(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginBottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginLeft(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginLeft(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_margin(BSTR v) = 0;
    virtual HRESULT WINAPI get_margin(BSTR *p) = 0;
    virtual HRESULT WINAPI put_paddingTop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_paddingTop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_paddingRight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_paddingRight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_paddingBottom(VARIANT v) = 0;
    virtual HRESULT WINAPI get_paddingBottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_paddingLeft(VARIANT v) = 0;
    virtual HRESULT WINAPI get_paddingLeft(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_padding(BSTR v) = 0;
    virtual HRESULT WINAPI get_padding(BSTR *p) = 0;
    virtual HRESULT WINAPI put_border(BSTR v) = 0;
    virtual HRESULT WINAPI get_border(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderTop(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderTop(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderRight(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderRight(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderBottom(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderBottom(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderLeft(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderLeft(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderColor(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderColor(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderTopColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderTopColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderRightColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderRightColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderBottomColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderBottomColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderLeftColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderLeftColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderWidth(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderWidth(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderTopWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderTopWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderRightWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderRightWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderBottomWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderBottomWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderLeftWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderLeftWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderTopStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderTopStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderRightStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderRightStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderBottomStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderBottomStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderLeftStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderLeftStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_styleFloat(BSTR v) = 0;
    virtual HRESULT WINAPI get_styleFloat(BSTR *p) = 0;
    virtual HRESULT WINAPI put_clear(BSTR v) = 0;
    virtual HRESULT WINAPI get_clear(BSTR *p) = 0;
    virtual HRESULT WINAPI put_display(BSTR v) = 0;
    virtual HRESULT WINAPI get_display(BSTR *p) = 0;
    virtual HRESULT WINAPI put_visibility(BSTR v) = 0;
    virtual HRESULT WINAPI get_visibility(BSTR *p) = 0;
    virtual HRESULT WINAPI put_listStyleType(BSTR v) = 0;
    virtual HRESULT WINAPI get_listStyleType(BSTR *p) = 0;
    virtual HRESULT WINAPI put_listStylePosition(BSTR v) = 0;
    virtual HRESULT WINAPI get_listStylePosition(BSTR *p) = 0;
    virtual HRESULT WINAPI put_listStyleImage(BSTR v) = 0;
    virtual HRESULT WINAPI get_listStyleImage(BSTR *p) = 0;
    virtual HRESULT WINAPI put_listStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_listStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_whiteSpace(BSTR v) = 0;
    virtual HRESULT WINAPI get_whiteSpace(BSTR *p) = 0;
    virtual HRESULT WINAPI put_top(VARIANT v) = 0;
    virtual HRESULT WINAPI get_top(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_left(VARIANT v) = 0;
    virtual HRESULT WINAPI get_left(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_position(BSTR *p) = 0;
    virtual HRESULT WINAPI put_zIndex(VARIANT v) = 0;
    virtual HRESULT WINAPI get_zIndex(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_overflow(BSTR v) = 0;
    virtual HRESULT WINAPI get_overflow(BSTR *p) = 0;
    virtual HRESULT WINAPI put_pageBreakBefore(BSTR v) = 0;
    virtual HRESULT WINAPI get_pageBreakBefore(BSTR *p) = 0;
    virtual HRESULT WINAPI put_pageBreakAfter(BSTR v) = 0;
    virtual HRESULT WINAPI get_pageBreakAfter(BSTR *p) = 0;
    virtual HRESULT WINAPI put_cssText(BSTR v) = 0;
    virtual HRESULT WINAPI get_cssText(BSTR *p) = 0;
    virtual HRESULT WINAPI put_pixelTop(long v) = 0;
    virtual HRESULT WINAPI get_pixelTop(long *p) = 0;
    virtual HRESULT WINAPI put_pixelLeft(long v) = 0;
    virtual HRESULT WINAPI get_pixelLeft(long *p) = 0;
    virtual HRESULT WINAPI put_pixelWidth(long v) = 0;
    virtual HRESULT WINAPI get_pixelWidth(long *p) = 0;
    virtual HRESULT WINAPI put_pixelHeight(long v) = 0;
    virtual HRESULT WINAPI get_pixelHeight(long *p) = 0;
    virtual HRESULT WINAPI put_posTop(float v) = 0;
    virtual HRESULT WINAPI get_posTop(float *p) = 0;
    virtual HRESULT WINAPI put_posLeft(float v) = 0;
    virtual HRESULT WINAPI get_posLeft(float *p) = 0;
    virtual HRESULT WINAPI put_posWidth(float v) = 0;
    virtual HRESULT WINAPI get_posWidth(float *p) = 0;
    virtual HRESULT WINAPI put_posHeight(float v) = 0;
    virtual HRESULT WINAPI get_posHeight(float *p) = 0;
    virtual HRESULT WINAPI put_cursor(BSTR v) = 0;
    virtual HRESULT WINAPI get_cursor(BSTR *p) = 0;
    virtual HRESULT WINAPI put_clip(BSTR v) = 0;
    virtual HRESULT WINAPI get_clip(BSTR *p) = 0;
    virtual HRESULT WINAPI put_filter(BSTR v) = 0;
    virtual HRESULT WINAPI get_filter(BSTR *p) = 0;
    virtual HRESULT WINAPI setAttribute(BSTR strAttributeName,VARIANT AttributeValue,LONG lFlags = 1) = 0;
    virtual HRESULT WINAPI getAttribute(BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue) = 0;
    virtual HRESULT WINAPI removeAttribute(BSTR strAttributeName,LONG lFlags,VARIANT_BOOL *pfSuccess) = 0;
    virtual HRESULT WINAPI toString(BSTR *String) = 0;
  };
  HRESULT WINAPI IHTMLStyle_put_fontFamily_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_fontFamily_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_fontFamily_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_fontFamily_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_fontStyle_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_fontStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_fontStyle_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_fontStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_fontVariant_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_fontVariant_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_fontVariant_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_fontVariant_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_fontWeight_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_fontWeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_fontWeight_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_fontWeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_fontSize_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_fontSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_fontSize_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_fontSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_font_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_font_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_font_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_font_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_color_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_color_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_background_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_background_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_backgroundColor_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_backgroundColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_backgroundColor_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_backgroundColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_backgroundImage_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_backgroundImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_backgroundImage_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_backgroundImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_backgroundRepeat_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_backgroundRepeat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_backgroundRepeat_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_backgroundRepeat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_backgroundAttachment_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_backgroundAttachment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_backgroundAttachment_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_backgroundAttachment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_backgroundPosition_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_backgroundPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_backgroundPosition_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_backgroundPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_backgroundPositionX_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_backgroundPositionX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_backgroundPositionX_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_backgroundPositionX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_backgroundPositionY_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_backgroundPositionY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_backgroundPositionY_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_backgroundPositionY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_wordSpacing_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_wordSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_wordSpacing_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_wordSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_letterSpacing_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_letterSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_letterSpacing_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_letterSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_textDecoration_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_textDecoration_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_textDecoration_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_textDecoration_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_textDecorationNone_Proxy(IHTMLStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLStyle_put_textDecorationNone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_textDecorationNone_Proxy(IHTMLStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLStyle_get_textDecorationNone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_textDecorationUnderline_Proxy(IHTMLStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLStyle_put_textDecorationUnderline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_textDecorationUnderline_Proxy(IHTMLStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLStyle_get_textDecorationUnderline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_textDecorationOverline_Proxy(IHTMLStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLStyle_put_textDecorationOverline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_textDecorationOverline_Proxy(IHTMLStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLStyle_get_textDecorationOverline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_textDecorationLineThrough_Proxy(IHTMLStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLStyle_put_textDecorationLineThrough_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_textDecorationLineThrough_Proxy(IHTMLStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLStyle_get_textDecorationLineThrough_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_textDecorationBlink_Proxy(IHTMLStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLStyle_put_textDecorationBlink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_textDecorationBlink_Proxy(IHTMLStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLStyle_get_textDecorationBlink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_verticalAlign_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_verticalAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_verticalAlign_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_verticalAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_textTransform_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_textTransform_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_textTransform_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_textTransform_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_textAlign_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_textAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_textAlign_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_textAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_textIndent_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_textIndent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_textIndent_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_textIndent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_lineHeight_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_lineHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_lineHeight_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_lineHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_marginTop_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_marginTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_marginTop_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_marginTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_marginRight_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_marginRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_marginRight_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_marginRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_marginBottom_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_marginBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_marginBottom_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_marginBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_marginLeft_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_marginLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_marginLeft_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_marginLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_margin_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_margin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_margin_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_margin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_paddingTop_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_paddingTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_paddingTop_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_paddingTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_paddingRight_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_paddingRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_paddingRight_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_paddingRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_paddingBottom_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_paddingBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_paddingBottom_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_paddingBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_paddingLeft_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_paddingLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_paddingLeft_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_paddingLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_padding_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_padding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_padding_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_padding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_border_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_border_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderTop_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderTop_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderRight_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderRight_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderBottom_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderBottom_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderLeft_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderLeft_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderColor_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderColor_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderTopColor_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_borderTopColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderTopColor_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_borderTopColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderRightColor_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_borderRightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderRightColor_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_borderRightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderBottomColor_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_borderBottomColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderBottomColor_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_borderBottomColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderLeftColor_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_borderLeftColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderLeftColor_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_borderLeftColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderWidth_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderWidth_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderTopWidth_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_borderTopWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderTopWidth_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_borderTopWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderRightWidth_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_borderRightWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderRightWidth_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_borderRightWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderBottomWidth_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_borderBottomWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderBottomWidth_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_borderBottomWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderLeftWidth_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_borderLeftWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderLeftWidth_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_borderLeftWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderStyle_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderStyle_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderTopStyle_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderTopStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderTopStyle_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderTopStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderRightStyle_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderRightStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderRightStyle_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderRightStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderBottomStyle_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderBottomStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderBottomStyle_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderBottomStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderLeftStyle_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderLeftStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderLeftStyle_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderLeftStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_width_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_width_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_height_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_height_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_styleFloat_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_styleFloat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_styleFloat_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_styleFloat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_clear_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_clear_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_display_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_display_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_display_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_display_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_visibility_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_visibility_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_visibility_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_visibility_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_listStyleType_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_listStyleType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_listStyleType_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_listStyleType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_listStylePosition_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_listStylePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_listStylePosition_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_listStylePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_listStyleImage_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_listStyleImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_listStyleImage_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_listStyleImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_listStyle_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_listStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_listStyle_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_listStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_whiteSpace_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_whiteSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_whiteSpace_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_whiteSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_top_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_top_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_top_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_top_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_left_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_left_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_left_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_left_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_position_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_position_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_zIndex_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_zIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_zIndex_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_zIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_overflow_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_overflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_overflow_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_overflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_pageBreakBefore_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_pageBreakBefore_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_pageBreakBefore_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_pageBreakBefore_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_pageBreakAfter_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_pageBreakAfter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_pageBreakAfter_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_pageBreakAfter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_cssText_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_cssText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_cssText_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_cssText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_pixelTop_Proxy(IHTMLStyle *This,long v);
  void __RPC_STUB IHTMLStyle_put_pixelTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_pixelTop_Proxy(IHTMLStyle *This,long *p);
  void __RPC_STUB IHTMLStyle_get_pixelTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_pixelLeft_Proxy(IHTMLStyle *This,long v);
  void __RPC_STUB IHTMLStyle_put_pixelLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_pixelLeft_Proxy(IHTMLStyle *This,long *p);
  void __RPC_STUB IHTMLStyle_get_pixelLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_pixelWidth_Proxy(IHTMLStyle *This,long v);
  void __RPC_STUB IHTMLStyle_put_pixelWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_pixelWidth_Proxy(IHTMLStyle *This,long *p);
  void __RPC_STUB IHTMLStyle_get_pixelWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_pixelHeight_Proxy(IHTMLStyle *This,long v);
  void __RPC_STUB IHTMLStyle_put_pixelHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_pixelHeight_Proxy(IHTMLStyle *This,long *p);
  void __RPC_STUB IHTMLStyle_get_pixelHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_posTop_Proxy(IHTMLStyle *This,float v);
  void __RPC_STUB IHTMLStyle_put_posTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_posTop_Proxy(IHTMLStyle *This,float *p);
  void __RPC_STUB IHTMLStyle_get_posTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_posLeft_Proxy(IHTMLStyle *This,float v);
  void __RPC_STUB IHTMLStyle_put_posLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_posLeft_Proxy(IHTMLStyle *This,float *p);
  void __RPC_STUB IHTMLStyle_get_posLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_posWidth_Proxy(IHTMLStyle *This,float v);
  void __RPC_STUB IHTMLStyle_put_posWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_posWidth_Proxy(IHTMLStyle *This,float *p);
  void __RPC_STUB IHTMLStyle_get_posWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_posHeight_Proxy(IHTMLStyle *This,float v);
  void __RPC_STUB IHTMLStyle_put_posHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_posHeight_Proxy(IHTMLStyle *This,float *p);
  void __RPC_STUB IHTMLStyle_get_posHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_cursor_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_cursor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_cursor_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_cursor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_clip_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_clip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_clip_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_clip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_filter_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_filter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_filter_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_filter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_setAttribute_Proxy(IHTMLStyle *This,BSTR strAttributeName,VARIANT AttributeValue,LONG lFlags);
  void __RPC_STUB IHTMLStyle_setAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_getAttribute_Proxy(IHTMLStyle *This,BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue);
  void __RPC_STUB IHTMLStyle_getAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_removeAttribute_Proxy(IHTMLStyle *This,BSTR strAttributeName,LONG lFlags,VARIANT_BOOL *pfSuccess);
  void __RPC_STUB IHTMLStyle_removeAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_toString_Proxy(IHTMLStyle *This,BSTR *String);
  void __RPC_STUB IHTMLStyle_toString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLStyle2_INTERFACE_DEFINED__
#define __IHTMLStyle2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyle2;
  struct IHTMLStyle2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_tableLayout(BSTR v) = 0;
    virtual HRESULT WINAPI get_tableLayout(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderCollapse(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderCollapse(BSTR *p) = 0;
    virtual HRESULT WINAPI put_direction(BSTR v) = 0;
    virtual HRESULT WINAPI get_direction(BSTR *p) = 0;
    virtual HRESULT WINAPI put_behavior(BSTR v) = 0;
    virtual HRESULT WINAPI get_behavior(BSTR *p) = 0;
    virtual HRESULT WINAPI setExpression(BSTR propname,BSTR expression,BSTR language = L"") = 0;
    virtual HRESULT WINAPI getExpression(BSTR propname,VARIANT *expression) = 0;
    virtual HRESULT WINAPI removeExpression(BSTR propname,VARIANT_BOOL *pfSuccess) = 0;
    virtual HRESULT WINAPI put_position(BSTR v) = 0;
    virtual HRESULT WINAPI get_position(BSTR *p) = 0;
    virtual HRESULT WINAPI put_unicodeBidi(BSTR v) = 0;
    virtual HRESULT WINAPI get_unicodeBidi(BSTR *p) = 0;
    virtual HRESULT WINAPI put_bottom(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_right(VARIANT v) = 0;
    virtual HRESULT WINAPI get_right(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_pixelBottom(long v) = 0;
    virtual HRESULT WINAPI get_pixelBottom(long *p) = 0;
    virtual HRESULT WINAPI put_pixelRight(long v) = 0;
    virtual HRESULT WINAPI get_pixelRight(long *p) = 0;
    virtual HRESULT WINAPI put_posBottom(float v) = 0;
    virtual HRESULT WINAPI get_posBottom(float *p) = 0;
    virtual HRESULT WINAPI put_posRight(float v) = 0;
    virtual HRESULT WINAPI get_posRight(float *p) = 0;
    virtual HRESULT WINAPI put_imeMode(BSTR v) = 0;
    virtual HRESULT WINAPI get_imeMode(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rubyAlign(BSTR v) = 0;
    virtual HRESULT WINAPI get_rubyAlign(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rubyPosition(BSTR v) = 0;
    virtual HRESULT WINAPI get_rubyPosition(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rubyOverhang(BSTR v) = 0;
    virtual HRESULT WINAPI get_rubyOverhang(BSTR *p) = 0;
    virtual HRESULT WINAPI put_layoutGridChar(VARIANT v) = 0;
    virtual HRESULT WINAPI get_layoutGridChar(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_layoutGridLine(VARIANT v) = 0;
    virtual HRESULT WINAPI get_layoutGridLine(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_layoutGridMode(BSTR v) = 0;
    virtual HRESULT WINAPI get_layoutGridMode(BSTR *p) = 0;
    virtual HRESULT WINAPI put_layoutGridType(BSTR v) = 0;
    virtual HRESULT WINAPI get_layoutGridType(BSTR *p) = 0;
    virtual HRESULT WINAPI put_layoutGrid(BSTR v) = 0;
    virtual HRESULT WINAPI get_layoutGrid(BSTR *p) = 0;
    virtual HRESULT WINAPI put_wordBreak(BSTR v) = 0;
    virtual HRESULT WINAPI get_wordBreak(BSTR *p) = 0;
    virtual HRESULT WINAPI put_lineBreak(BSTR v) = 0;
    virtual HRESULT WINAPI get_lineBreak(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textJustify(BSTR v) = 0;
    virtual HRESULT WINAPI get_textJustify(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textJustifyTrim(BSTR v) = 0;
    virtual HRESULT WINAPI get_textJustifyTrim(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textKashida(VARIANT v) = 0;
    virtual HRESULT WINAPI get_textKashida(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_textAutospace(BSTR v) = 0;
    virtual HRESULT WINAPI get_textAutospace(BSTR *p) = 0;
    virtual HRESULT WINAPI put_overflowX(BSTR v) = 0;
    virtual HRESULT WINAPI get_overflowX(BSTR *p) = 0;
    virtual HRESULT WINAPI put_overflowY(BSTR v) = 0;
    virtual HRESULT WINAPI get_overflowY(BSTR *p) = 0;
    virtual HRESULT WINAPI put_accelerator(BSTR v) = 0;
    virtual HRESULT WINAPI get_accelerator(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLStyle2_put_tableLayout_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_tableLayout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_tableLayout_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_tableLayout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_borderCollapse_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_borderCollapse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_borderCollapse_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_borderCollapse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_direction_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_direction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_direction_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_direction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_behavior_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_behavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_behavior_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_behavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_setExpression_Proxy(IHTMLStyle2 *This,BSTR propname,BSTR expression,BSTR language);
  void __RPC_STUB IHTMLStyle2_setExpression_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_getExpression_Proxy(IHTMLStyle2 *This,BSTR propname,VARIANT *expression);
  void __RPC_STUB IHTMLStyle2_getExpression_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_removeExpression_Proxy(IHTMLStyle2 *This,BSTR propname,VARIANT_BOOL *pfSuccess);
  void __RPC_STUB IHTMLStyle2_removeExpression_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_position_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_position_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_position_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_position_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_unicodeBidi_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_unicodeBidi_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_unicodeBidi_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_unicodeBidi_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_bottom_Proxy(IHTMLStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle2_put_bottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_bottom_Proxy(IHTMLStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle2_get_bottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_right_Proxy(IHTMLStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle2_put_right_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_right_Proxy(IHTMLStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle2_get_right_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_pixelBottom_Proxy(IHTMLStyle2 *This,long v);
  void __RPC_STUB IHTMLStyle2_put_pixelBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_pixelBottom_Proxy(IHTMLStyle2 *This,long *p);
  void __RPC_STUB IHTMLStyle2_get_pixelBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_pixelRight_Proxy(IHTMLStyle2 *This,long v);
  void __RPC_STUB IHTMLStyle2_put_pixelRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_pixelRight_Proxy(IHTMLStyle2 *This,long *p);
  void __RPC_STUB IHTMLStyle2_get_pixelRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_posBottom_Proxy(IHTMLStyle2 *This,float v);
  void __RPC_STUB IHTMLStyle2_put_posBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_posBottom_Proxy(IHTMLStyle2 *This,float *p);
  void __RPC_STUB IHTMLStyle2_get_posBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_posRight_Proxy(IHTMLStyle2 *This,float v);
  void __RPC_STUB IHTMLStyle2_put_posRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_posRight_Proxy(IHTMLStyle2 *This,float *p);
  void __RPC_STUB IHTMLStyle2_get_posRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_imeMode_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_imeMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_imeMode_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_imeMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_rubyAlign_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_rubyAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_rubyAlign_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_rubyAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_rubyPosition_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_rubyPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_rubyPosition_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_rubyPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_rubyOverhang_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_rubyOverhang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_rubyOverhang_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_rubyOverhang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_layoutGridChar_Proxy(IHTMLStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle2_put_layoutGridChar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_layoutGridChar_Proxy(IHTMLStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle2_get_layoutGridChar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_layoutGridLine_Proxy(IHTMLStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle2_put_layoutGridLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_layoutGridLine_Proxy(IHTMLStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle2_get_layoutGridLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_layoutGridMode_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_layoutGridMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_layoutGridMode_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_layoutGridMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_layoutGridType_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_layoutGridType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_layoutGridType_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_layoutGridType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_layoutGrid_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_layoutGrid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_layoutGrid_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_layoutGrid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_wordBreak_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_wordBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_wordBreak_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_wordBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_lineBreak_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_lineBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_lineBreak_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_lineBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_textJustify_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_textJustify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_textJustify_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_textJustify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_textJustifyTrim_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_textJustifyTrim_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_textJustifyTrim_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_textJustifyTrim_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_textKashida_Proxy(IHTMLStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle2_put_textKashida_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_textKashida_Proxy(IHTMLStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle2_get_textKashida_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_textAutospace_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_textAutospace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_textAutospace_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_textAutospace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_overflowX_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_overflowX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_overflowX_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_overflowX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_overflowY_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_overflowY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_overflowY_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_overflowY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_accelerator_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_accelerator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_accelerator_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_accelerator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLStyle3_INTERFACE_DEFINED__
#define __IHTMLStyle3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyle3;
  struct IHTMLStyle3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_layoutFlow(BSTR v) = 0;
    virtual HRESULT WINAPI get_layoutFlow(BSTR *p) = 0;
    virtual HRESULT WINAPI put_zoom(VARIANT v) = 0;
    virtual HRESULT WINAPI get_zoom(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_wordWrap(BSTR v) = 0;
    virtual HRESULT WINAPI get_wordWrap(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textUnderlinePosition(BSTR v) = 0;
    virtual HRESULT WINAPI get_textUnderlinePosition(BSTR *p) = 0;
    virtual HRESULT WINAPI put_scrollbarBaseColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarBaseColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarFaceColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarFaceColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbar3dLightColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbar3dLightColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarShadowColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarShadowColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarHighlightColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarHighlightColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarDarkShadowColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarDarkShadowColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarArrowColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarArrowColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarTrackColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarTrackColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_writingMode(BSTR v) = 0;
    virtual HRESULT WINAPI get_writingMode(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textAlignLast(BSTR v) = 0;
    virtual HRESULT WINAPI get_textAlignLast(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textKashidaSpace(VARIANT v) = 0;
    virtual HRESULT WINAPI get_textKashidaSpace(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLStyle3_put_layoutFlow_Proxy(IHTMLStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLStyle3_put_layoutFlow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_layoutFlow_Proxy(IHTMLStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle3_get_layoutFlow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_zoom_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_zoom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_zoom_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_zoom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_wordWrap_Proxy(IHTMLStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLStyle3_put_wordWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_wordWrap_Proxy(IHTMLStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle3_get_wordWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_textUnderlinePosition_Proxy(IHTMLStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLStyle3_put_textUnderlinePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_textUnderlinePosition_Proxy(IHTMLStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle3_get_textUnderlinePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_scrollbarBaseColor_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_scrollbarBaseColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_scrollbarBaseColor_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_scrollbarBaseColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_scrollbarFaceColor_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_scrollbarFaceColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_scrollbarFaceColor_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_scrollbarFaceColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_scrollbar3dLightColor_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_scrollbar3dLightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_scrollbar3dLightColor_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_scrollbar3dLightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_scrollbarShadowColor_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_scrollbarShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_scrollbarShadowColor_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_scrollbarShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_scrollbarHighlightColor_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_scrollbarHighlightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_scrollbarHighlightColor_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_scrollbarHighlightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_scrollbarDarkShadowColor_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_scrollbarDarkShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_scrollbarDarkShadowColor_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_scrollbarDarkShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_scrollbarArrowColor_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_scrollbarArrowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_scrollbarArrowColor_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_scrollbarArrowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_scrollbarTrackColor_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_scrollbarTrackColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_scrollbarTrackColor_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_scrollbarTrackColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_writingMode_Proxy(IHTMLStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLStyle3_put_writingMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_writingMode_Proxy(IHTMLStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle3_get_writingMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_textAlignLast_Proxy(IHTMLStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLStyle3_put_textAlignLast_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_textAlignLast_Proxy(IHTMLStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle3_get_textAlignLast_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_textKashidaSpace_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_textKashidaSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_textKashidaSpace_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_textKashidaSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLStyle4_INTERFACE_DEFINED__
#define __IHTMLStyle4_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyle4;
  struct IHTMLStyle4 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_textOverflow(BSTR v) = 0;
    virtual HRESULT WINAPI get_textOverflow(BSTR *p) = 0;
    virtual HRESULT WINAPI put_minHeight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_minHeight(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLStyle4_put_textOverflow_Proxy(IHTMLStyle4 *This,BSTR v);
  void __RPC_STUB IHTMLStyle4_put_textOverflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle4_get_textOverflow_Proxy(IHTMLStyle4 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle4_get_textOverflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle4_put_minHeight_Proxy(IHTMLStyle4 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle4_put_minHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle4_get_minHeight_Proxy(IHTMLStyle4 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle4_get_minHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLRuleStyle_INTERFACE_DEFINED__
#define __IHTMLRuleStyle_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLRuleStyle;
  struct IHTMLRuleStyle : public IDispatch {
  public:
    virtual HRESULT WINAPI put_fontFamily(BSTR v) = 0;
    virtual HRESULT WINAPI get_fontFamily(BSTR *p) = 0;
    virtual HRESULT WINAPI put_fontStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_fontStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_fontVariant(BSTR v) = 0;
    virtual HRESULT WINAPI get_fontVariant(BSTR *p) = 0;
    virtual HRESULT WINAPI put_fontWeight(BSTR v) = 0;
    virtual HRESULT WINAPI get_fontWeight(BSTR *p) = 0;
    virtual HRESULT WINAPI put_fontSize(VARIANT v) = 0;
    virtual HRESULT WINAPI get_fontSize(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_font(BSTR v) = 0;
    virtual HRESULT WINAPI get_font(BSTR *p) = 0;
    virtual HRESULT WINAPI put_color(VARIANT v) = 0;
    virtual HRESULT WINAPI get_color(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_background(BSTR v) = 0;
    virtual HRESULT WINAPI get_background(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_backgroundColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_backgroundImage(BSTR v) = 0;
    virtual HRESULT WINAPI get_backgroundImage(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundRepeat(BSTR v) = 0;
    virtual HRESULT WINAPI get_backgroundRepeat(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundAttachment(BSTR v) = 0;
    virtual HRESULT WINAPI get_backgroundAttachment(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundPosition(BSTR v) = 0;
    virtual HRESULT WINAPI get_backgroundPosition(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundPositionX(VARIANT v) = 0;
    virtual HRESULT WINAPI get_backgroundPositionX(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_backgroundPositionY(VARIANT v) = 0;
    virtual HRESULT WINAPI get_backgroundPositionY(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_wordSpacing(VARIANT v) = 0;
    virtual HRESULT WINAPI get_wordSpacing(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_letterSpacing(VARIANT v) = 0;
    virtual HRESULT WINAPI get_letterSpacing(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_textDecoration(BSTR v) = 0;
    virtual HRESULT WINAPI get_textDecoration(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textDecorationNone(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationNone(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_textDecorationUnderline(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationUnderline(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_textDecorationOverline(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationOverline(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_textDecorationLineThrough(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationLineThrough(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_textDecorationBlink(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationBlink(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_verticalAlign(VARIANT v) = 0;
    virtual HRESULT WINAPI get_verticalAlign(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_textTransform(BSTR v) = 0;
    virtual HRESULT WINAPI get_textTransform(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textAlign(BSTR v) = 0;
    virtual HRESULT WINAPI get_textAlign(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textIndent(VARIANT v) = 0;
    virtual HRESULT WINAPI get_textIndent(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_lineHeight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_lineHeight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginTop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginTop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginRight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginRight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginBottom(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginBottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginLeft(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginLeft(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_margin(BSTR v) = 0;
    virtual HRESULT WINAPI get_margin(BSTR *p) = 0;
    virtual HRESULT WINAPI put_paddingTop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_paddingTop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_paddingRight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_paddingRight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_paddingBottom(VARIANT v) = 0;
    virtual HRESULT WINAPI get_paddingBottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_paddingLeft(VARIANT v) = 0;
    virtual HRESULT WINAPI get_paddingLeft(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_padding(BSTR v) = 0;
    virtual HRESULT WINAPI get_padding(BSTR *p) = 0;
    virtual HRESULT WINAPI put_border(BSTR v) = 0;
    virtual HRESULT WINAPI get_border(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderTop(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderTop(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderRight(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderRight(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderBottom(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderBottom(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderLeft(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderLeft(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderColor(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderColor(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderTopColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderTopColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderRightColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderRightColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderBottomColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderBottomColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderLeftColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderLeftColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderWidth(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderWidth(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderTopWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderTopWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderRightWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderRightWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderBottomWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderBottomWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderLeftWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderLeftWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderTopStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderTopStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderRightStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderRightStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderBottomStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderBottomStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderLeftStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderLeftStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_styleFloat(BSTR v) = 0;
    virtual HRESULT WINAPI get_styleFloat(BSTR *p) = 0;
    virtual HRESULT WINAPI put_clear(BSTR v) = 0;
    virtual HRESULT WINAPI get_clear(BSTR *p) = 0;
    virtual HRESULT WINAPI put_display(BSTR v) = 0;
    virtual HRESULT WINAPI get_display(BSTR *p) = 0;
    virtual HRESULT WINAPI put_visibility(BSTR v) = 0;
    virtual HRESULT WINAPI get_visibility(BSTR *p) = 0;
    virtual HRESULT WINAPI put_listStyleType(BSTR v) = 0;
    virtual HRESULT WINAPI get_listStyleType(BSTR *p) = 0;
    virtual HRESULT WINAPI put_listStylePosition(BSTR v) = 0;
    virtual HRESULT WINAPI get_listStylePosition(BSTR *p) = 0;
    virtual HRESULT WINAPI put_listStyleImage(BSTR v) = 0;
    virtual HRESULT WINAPI get_listStyleImage(BSTR *p) = 0;
    virtual HRESULT WINAPI put_listStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_listStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_whiteSpace(BSTR v) = 0;
    virtual HRESULT WINAPI get_whiteSpace(BSTR *p) = 0;
    virtual HRESULT WINAPI put_top(VARIANT v) = 0;
    virtual HRESULT WINAPI get_top(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_left(VARIANT v) = 0;
    virtual HRESULT WINAPI get_left(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_position(BSTR *p) = 0;
    virtual HRESULT WINAPI put_zIndex(VARIANT v) = 0;
    virtual HRESULT WINAPI get_zIndex(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_overflow(BSTR v) = 0;
    virtual HRESULT WINAPI get_overflow(BSTR *p) = 0;
    virtual HRESULT WINAPI put_pageBreakBefore(BSTR v) = 0;
    virtual HRESULT WINAPI get_pageBreakBefore(BSTR *p) = 0;
    virtual HRESULT WINAPI put_pageBreakAfter(BSTR v) = 0;
    virtual HRESULT WINAPI get_pageBreakAfter(BSTR *p) = 0;
    virtual HRESULT WINAPI put_cssText(BSTR v) = 0;
    virtual HRESULT WINAPI get_cssText(BSTR *p) = 0;
    virtual HRESULT WINAPI put_cursor(BSTR v) = 0;
    virtual HRESULT WINAPI get_cursor(BSTR *p) = 0;
    virtual HRESULT WINAPI put_clip(BSTR v) = 0;
    virtual HRESULT WINAPI get_clip(BSTR *p) = 0;
    virtual HRESULT WINAPI put_filter(BSTR v) = 0;
    virtual HRESULT WINAPI get_filter(BSTR *p) = 0;
    virtual HRESULT WINAPI setAttribute(BSTR strAttributeName,VARIANT AttributeValue,LONG lFlags = 1) = 0;
    virtual HRESULT WINAPI getAttribute(BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue) = 0;
    virtual HRESULT WINAPI removeAttribute(BSTR strAttributeName,LONG lFlags,VARIANT_BOOL *pfSuccess) = 0;
  };
  HRESULT WINAPI IHTMLRuleStyle_put_fontFamily_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_fontFamily_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_fontFamily_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_fontFamily_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_fontStyle_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_fontStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_fontStyle_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_fontStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_fontVariant_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_fontVariant_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_fontVariant_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_fontVariant_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_fontWeight_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_fontWeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_fontWeight_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_fontWeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_fontSize_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_fontSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_fontSize_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_fontSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_font_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_font_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_font_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_font_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_color_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_color_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_background_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_background_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_backgroundColor_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_backgroundColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_backgroundColor_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_backgroundColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_backgroundImage_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_backgroundImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_backgroundImage_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_backgroundImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_backgroundRepeat_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_backgroundRepeat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_backgroundRepeat_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_backgroundRepeat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_backgroundAttachment_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_backgroundAttachment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_backgroundAttachment_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_backgroundAttachment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_backgroundPosition_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_backgroundPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_backgroundPosition_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_backgroundPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_backgroundPositionX_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_backgroundPositionX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_backgroundPositionX_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_backgroundPositionX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_backgroundPositionY_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_backgroundPositionY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_backgroundPositionY_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_backgroundPositionY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_wordSpacing_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_wordSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_wordSpacing_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_wordSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_letterSpacing_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_letterSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_letterSpacing_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_letterSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_textDecoration_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_textDecoration_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_textDecoration_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_textDecoration_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_textDecorationNone_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLRuleStyle_put_textDecorationNone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_textDecorationNone_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLRuleStyle_get_textDecorationNone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_textDecorationUnderline_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLRuleStyle_put_textDecorationUnderline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_textDecorationUnderline_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLRuleStyle_get_textDecorationUnderline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_textDecorationOverline_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLRuleStyle_put_textDecorationOverline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_textDecorationOverline_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLRuleStyle_get_textDecorationOverline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_textDecorationLineThrough_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLRuleStyle_put_textDecorationLineThrough_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_textDecorationLineThrough_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLRuleStyle_get_textDecorationLineThrough_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_textDecorationBlink_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLRuleStyle_put_textDecorationBlink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_textDecorationBlink_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLRuleStyle_get_textDecorationBlink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_verticalAlign_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_verticalAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_verticalAlign_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_verticalAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_textTransform_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_textTransform_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_textTransform_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_textTransform_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_textAlign_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_textAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_textAlign_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_textAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_textIndent_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_textIndent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_textIndent_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_textIndent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_lineHeight_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_lineHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_lineHeight_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_lineHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_marginTop_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_marginTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_marginTop_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_marginTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_marginRight_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_marginRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_marginRight_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_marginRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_marginBottom_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_marginBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_marginBottom_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_marginBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_marginLeft_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_marginLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_marginLeft_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_marginLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_margin_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_margin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_margin_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_margin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_paddingTop_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_paddingTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_paddingTop_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_paddingTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_paddingRight_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_paddingRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_paddingRight_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_paddingRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_paddingBottom_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_paddingBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_paddingBottom_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_paddingBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_paddingLeft_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_paddingLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_paddingLeft_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_paddingLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_padding_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_padding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_padding_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_padding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_border_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_border_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderTop_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderTop_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderRight_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderRight_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderBottom_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderBottom_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderLeft_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderLeft_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderColor_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderColor_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderTopColor_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_borderTopColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderTopColor_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderTopColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderRightColor_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_borderRightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderRightColor_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderRightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderBottomColor_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_borderBottomColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderBottomColor_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderBottomColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderLeftColor_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_borderLeftColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderLeftColor_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderLeftColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderWidth_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderWidth_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderTopWidth_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_borderTopWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderTopWidth_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderTopWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderRightWidth_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_borderRightWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderRightWidth_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderRightWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderBottomWidth_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_borderBottomWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderBottomWidth_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderBottomWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderLeftWidth_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_borderLeftWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderLeftWidth_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderLeftWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderStyle_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderStyle_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderTopStyle_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderTopStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderTopStyle_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderTopStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderRightStyle_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderRightStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderRightStyle_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderRightStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderBottomStyle_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderBottomStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderBottomStyle_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderBottomStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderLeftStyle_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderLeftStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderLeftStyle_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderLeftStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_width_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_width_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_height_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_height_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_styleFloat_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_styleFloat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_styleFloat_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_styleFloat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_clear_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_clear_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_display_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_display_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_display_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_display_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_visibility_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_visibility_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_visibility_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_visibility_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_listStyleType_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_listStyleType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_listStyleType_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_listStyleType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_listStylePosition_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_listStylePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_listStylePosition_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_listStylePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_listStyleImage_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_listStyleImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_listStyleImage_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_listStyleImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_listStyle_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_listStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_listStyle_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_listStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_whiteSpace_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_whiteSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_whiteSpace_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_whiteSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_top_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_top_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_top_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_top_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_left_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_left_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_left_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_left_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_position_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_position_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_zIndex_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_zIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_zIndex_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_zIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_overflow_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_overflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_overflow_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_overflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_pageBreakBefore_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_pageBreakBefore_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_pageBreakBefore_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_pageBreakBefore_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_pageBreakAfter_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_pageBreakAfter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_pageBreakAfter_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_pageBreakAfter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_cssText_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_cssText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_cssText_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_cssText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_cursor_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_cursor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_cursor_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_cursor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_clip_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_clip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_clip_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_clip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_filter_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_filter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_filter_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_filter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_setAttribute_Proxy(IHTMLRuleStyle *This,BSTR strAttributeName,VARIANT AttributeValue,LONG lFlags);
  void __RPC_STUB IHTMLRuleStyle_setAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_getAttribute_Proxy(IHTMLRuleStyle *This,BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue);
  void __RPC_STUB IHTMLRuleStyle_getAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_removeAttribute_Proxy(IHTMLRuleStyle *This,BSTR strAttributeName,LONG lFlags,VARIANT_BOOL *pfSuccess);
  void __RPC_STUB IHTMLRuleStyle_removeAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLRuleStyle2_INTERFACE_DEFINED__
#define __IHTMLRuleStyle2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLRuleStyle2;
  struct IHTMLRuleStyle2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_tableLayout(BSTR v) = 0;
    virtual HRESULT WINAPI get_tableLayout(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderCollapse(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderCollapse(BSTR *p) = 0;
    virtual HRESULT WINAPI put_direction(BSTR v) = 0;
    virtual HRESULT WINAPI get_direction(BSTR *p) = 0;
    virtual HRESULT WINAPI put_behavior(BSTR v) = 0;
    virtual HRESULT WINAPI get_behavior(BSTR *p) = 0;
    virtual HRESULT WINAPI put_position(BSTR v) = 0;
    virtual HRESULT WINAPI get_position(BSTR *p) = 0;
    virtual HRESULT WINAPI put_unicodeBidi(BSTR v) = 0;
    virtual HRESULT WINAPI get_unicodeBidi(BSTR *p) = 0;
    virtual HRESULT WINAPI put_bottom(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_right(VARIANT v) = 0;
    virtual HRESULT WINAPI get_right(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_pixelBottom(long v) = 0;
    virtual HRESULT WINAPI get_pixelBottom(long *p) = 0;
    virtual HRESULT WINAPI put_pixelRight(long v) = 0;
    virtual HRESULT WINAPI get_pixelRight(long *p) = 0;
    virtual HRESULT WINAPI put_posBottom(float v) = 0;
    virtual HRESULT WINAPI get_posBottom(float *p) = 0;
    virtual HRESULT WINAPI put_posRight(float v) = 0;
    virtual HRESULT WINAPI get_posRight(float *p) = 0;
    virtual HRESULT WINAPI put_imeMode(BSTR v) = 0;
    virtual HRESULT WINAPI get_imeMode(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rubyAlign(BSTR v) = 0;
    virtual HRESULT WINAPI get_rubyAlign(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rubyPosition(BSTR v) = 0;
    virtual HRESULT WINAPI get_rubyPosition(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rubyOverhang(BSTR v) = 0;
    virtual HRESULT WINAPI get_rubyOverhang(BSTR *p) = 0;
    virtual HRESULT WINAPI put_layoutGridChar(VARIANT v) = 0;
    virtual HRESULT WINAPI get_layoutGridChar(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_layoutGridLine(VARIANT v) = 0;
    virtual HRESULT WINAPI get_layoutGridLine(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_layoutGridMode(BSTR v) = 0;
    virtual HRESULT WINAPI get_layoutGridMode(BSTR *p) = 0;
    virtual HRESULT WINAPI put_layoutGridType(BSTR v) = 0;
    virtual HRESULT WINAPI get_layoutGridType(BSTR *p) = 0;
    virtual HRESULT WINAPI put_layoutGrid(BSTR v) = 0;
    virtual HRESULT WINAPI get_layoutGrid(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textAutospace(BSTR v) = 0;
    virtual HRESULT WINAPI get_textAutospace(BSTR *p) = 0;
    virtual HRESULT WINAPI put_wordBreak(BSTR v) = 0;
    virtual HRESULT WINAPI get_wordBreak(BSTR *p) = 0;
    virtual HRESULT WINAPI put_lineBreak(BSTR v) = 0;
    virtual HRESULT WINAPI get_lineBreak(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textJustify(BSTR v) = 0;
    virtual HRESULT WINAPI get_textJustify(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textJustifyTrim(BSTR v) = 0;
    virtual HRESULT WINAPI get_textJustifyTrim(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textKashida(VARIANT v) = 0;
    virtual HRESULT WINAPI get_textKashida(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_overflowX(BSTR v) = 0;
    virtual HRESULT WINAPI get_overflowX(BSTR *p) = 0;
    virtual HRESULT WINAPI put_overflowY(BSTR v) = 0;
    virtual HRESULT WINAPI get_overflowY(BSTR *p) = 0;
    virtual HRESULT WINAPI put_accelerator(BSTR v) = 0;
    virtual HRESULT WINAPI get_accelerator(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLRuleStyle2_put_tableLayout_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_tableLayout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_tableLayout_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_tableLayout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_borderCollapse_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_borderCollapse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_borderCollapse_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_borderCollapse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_direction_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_direction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_direction_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_direction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_behavior_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_behavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_behavior_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_behavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_position_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_position_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_position_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_position_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_unicodeBidi_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_unicodeBidi_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_unicodeBidi_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_unicodeBidi_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_bottom_Proxy(IHTMLRuleStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle2_put_bottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_bottom_Proxy(IHTMLRuleStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle2_get_bottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_right_Proxy(IHTMLRuleStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle2_put_right_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_right_Proxy(IHTMLRuleStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle2_get_right_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_pixelBottom_Proxy(IHTMLRuleStyle2 *This,long v);
  void __RPC_STUB IHTMLRuleStyle2_put_pixelBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_pixelBottom_Proxy(IHTMLRuleStyle2 *This,long *p);
  void __RPC_STUB IHTMLRuleStyle2_get_pixelBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_pixelRight_Proxy(IHTMLRuleStyle2 *This,long v);
  void __RPC_STUB IHTMLRuleStyle2_put_pixelRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_pixelRight_Proxy(IHTMLRuleStyle2 *This,long *p);
  void __RPC_STUB IHTMLRuleStyle2_get_pixelRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_posBottom_Proxy(IHTMLRuleStyle2 *This,float v);
  void __RPC_STUB IHTMLRuleStyle2_put_posBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_posBottom_Proxy(IHTMLRuleStyle2 *This,float *p);
  void __RPC_STUB IHTMLRuleStyle2_get_posBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_posRight_Proxy(IHTMLRuleStyle2 *This,float v);
  void __RPC_STUB IHTMLRuleStyle2_put_posRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_posRight_Proxy(IHTMLRuleStyle2 *This,float *p);
  void __RPC_STUB IHTMLRuleStyle2_get_posRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_imeMode_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_imeMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_imeMode_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_imeMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_rubyAlign_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_rubyAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_rubyAlign_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_rubyAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_rubyPosition_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_rubyPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_rubyPosition_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_rubyPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_rubyOverhang_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_rubyOverhang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_rubyOverhang_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_rubyOverhang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_layoutGridChar_Proxy(IHTMLRuleStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle2_put_layoutGridChar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_layoutGridChar_Proxy(IHTMLRuleStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle2_get_layoutGridChar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_layoutGridLine_Proxy(IHTMLRuleStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle2_put_layoutGridLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_layoutGridLine_Proxy(IHTMLRuleStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle2_get_layoutGridLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_layoutGridMode_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_layoutGridMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_layoutGridMode_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_layoutGridMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_layoutGridType_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_layoutGridType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_layoutGridType_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_layoutGridType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_layoutGrid_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_layoutGrid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_layoutGrid_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_layoutGrid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_textAutospace_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_textAutospace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_textAutospace_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_textAutospace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_wordBreak_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_wordBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_wordBreak_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_wordBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_lineBreak_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_lineBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_lineBreak_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_lineBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_textJustify_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_textJustify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_textJustify_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_textJustify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_textJustifyTrim_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_textJustifyTrim_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_textJustifyTrim_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_textJustifyTrim_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_textKashida_Proxy(IHTMLRuleStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle2_put_textKashida_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_textKashida_Proxy(IHTMLRuleStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle2_get_textKashida_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_overflowX_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_overflowX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_overflowX_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_overflowX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_overflowY_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_overflowY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_overflowY_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_overflowY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_accelerator_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_accelerator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_accelerator_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_accelerator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLRuleStyle3_INTERFACE_DEFINED__
#define __IHTMLRuleStyle3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLRuleStyle3;
  struct IHTMLRuleStyle3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_layoutFlow(BSTR v) = 0;
    virtual HRESULT WINAPI get_layoutFlow(BSTR *p) = 0;
    virtual HRESULT WINAPI put_zoom(VARIANT v) = 0;
    virtual HRESULT WINAPI get_zoom(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_wordWrap(BSTR v) = 0;
    virtual HRESULT WINAPI get_wordWrap(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textUnderlinePosition(BSTR v) = 0;
    virtual HRESULT WINAPI get_textUnderlinePosition(BSTR *p) = 0;
    virtual HRESULT WINAPI put_scrollbarBaseColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarBaseColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarFaceColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarFaceColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbar3dLightColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbar3dLightColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarShadowColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarShadowColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarHighlightColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarHighlightColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarDarkShadowColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarDarkShadowColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarArrowColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarArrowColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarTrackColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarTrackColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_writingMode(BSTR v) = 0;
    virtual HRESULT WINAPI get_writingMode(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textAlignLast(BSTR v) = 0;
    virtual HRESULT WINAPI get_textAlignLast(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textKashidaSpace(VARIANT v) = 0;
    virtual HRESULT WINAPI get_textKashidaSpace(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLRuleStyle3_put_layoutFlow_Proxy(IHTMLRuleStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle3_put_layoutFlow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_layoutFlow_Proxy(IHTMLRuleStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle3_get_layoutFlow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_zoom_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_zoom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_zoom_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_zoom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_wordWrap_Proxy(IHTMLRuleStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle3_put_wordWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_wordWrap_Proxy(IHTMLRuleStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle3_get_wordWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_textUnderlinePosition_Proxy(IHTMLRuleStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle3_put_textUnderlinePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_textUnderlinePosition_Proxy(IHTMLRuleStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle3_get_textUnderlinePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_scrollbarBaseColor_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_scrollbarBaseColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_scrollbarBaseColor_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_scrollbarBaseColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_scrollbarFaceColor_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_scrollbarFaceColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_scrollbarFaceColor_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_scrollbarFaceColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_scrollbar3dLightColor_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_scrollbar3dLightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_scrollbar3dLightColor_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_scrollbar3dLightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_scrollbarShadowColor_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_scrollbarShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_scrollbarShadowColor_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_scrollbarShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_scrollbarHighlightColor_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_scrollbarHighlightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_scrollbarHighlightColor_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_scrollbarHighlightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_scrollbarDarkShadowColor_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_scrollbarDarkShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_scrollbarDarkShadowColor_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_scrollbarDarkShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_scrollbarArrowColor_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_scrollbarArrowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_scrollbarArrowColor_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_scrollbarArrowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_scrollbarTrackColor_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_scrollbarTrackColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_scrollbarTrackColor_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_scrollbarTrackColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_writingMode_Proxy(IHTMLRuleStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle3_put_writingMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_writingMode_Proxy(IHTMLRuleStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle3_get_writingMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_textAlignLast_Proxy(IHTMLRuleStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle3_put_textAlignLast_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_textAlignLast_Proxy(IHTMLRuleStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle3_get_textAlignLast_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_textKashidaSpace_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_textKashidaSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_textKashidaSpace_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_textKashidaSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLRuleStyle4_INTERFACE_DEFINED__
#define __IHTMLRuleStyle4_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLRuleStyle4;
  struct IHTMLRuleStyle4 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_textOverflow(BSTR v) = 0;
    virtual HRESULT WINAPI get_textOverflow(BSTR *p) = 0;
    virtual HRESULT WINAPI put_minHeight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_minHeight(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLRuleStyle4_put_textOverflow_Proxy(IHTMLRuleStyle4 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle4_put_textOverflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle4_get_textOverflow_Proxy(IHTMLRuleStyle4 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle4_get_textOverflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle4_put_minHeight_Proxy(IHTMLRuleStyle4 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle4_put_minHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle4_get_minHeight_Proxy(IHTMLRuleStyle4 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle4_get_minHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLStyle_DISPINTERFACE_DEFINED__
#define __DispHTMLStyle_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLStyle;
  struct DispHTMLStyle : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLStyle;
#ifdef __cplusplus
  class HTMLStyle;
#endif

#ifndef __DispHTMLRuleStyle_DISPINTERFACE_DEFINED__
#define __DispHTMLRuleStyle_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLRuleStyle;
  struct DispHTMLRuleStyle : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLRuleStyle;
#ifdef __cplusplus
  class HTMLRuleStyle;
#endif

#ifndef __IHTMLRenderStyle_INTERFACE_DEFINED__
#define __IHTMLRenderStyle_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLRenderStyle;
  struct IHTMLRenderStyle : public IDispatch {
  public:
    virtual HRESULT WINAPI put_textLineThroughStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_textLineThroughStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textUnderlineStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_textUnderlineStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textEffect(BSTR v) = 0;
    virtual HRESULT WINAPI get_textEffect(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_textColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_textBackgroundColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_textBackgroundColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_textDecorationColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_textDecorationColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_renderingPriority(long v) = 0;
    virtual HRESULT WINAPI get_renderingPriority(long *p) = 0;
    virtual HRESULT WINAPI put_defaultTextSelection(BSTR v) = 0;
    virtual HRESULT WINAPI get_defaultTextSelection(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textDecoration(BSTR v) = 0;
    virtual HRESULT WINAPI get_textDecoration(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLRenderStyle_put_textLineThroughStyle_Proxy(IHTMLRenderStyle *This,BSTR v);
  void __RPC_STUB IHTMLRenderStyle_put_textLineThroughStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_get_textLineThroughStyle_Proxy(IHTMLRenderStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRenderStyle_get_textLineThroughStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_put_textUnderlineStyle_Proxy(IHTMLRenderStyle *This,BSTR v);
  void __RPC_STUB IHTMLRenderStyle_put_textUnderlineStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_get_textUnderlineStyle_Proxy(IHTMLRenderStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRenderStyle_get_textUnderlineStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_put_textEffect_Proxy(IHTMLRenderStyle *This,BSTR v);
  void __RPC_STUB IHTMLRenderStyle_put_textEffect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_get_textEffect_Proxy(IHTMLRenderStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRenderStyle_get_textEffect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_put_textColor_Proxy(IHTMLRenderStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRenderStyle_put_textColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_get_textColor_Proxy(IHTMLRenderStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRenderStyle_get_textColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_put_textBackgroundColor_Proxy(IHTMLRenderStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRenderStyle_put_textBackgroundColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_get_textBackgroundColor_Proxy(IHTMLRenderStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRenderStyle_get_textBackgroundColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_put_textDecorationColor_Proxy(IHTMLRenderStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRenderStyle_put_textDecorationColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_get_textDecorationColor_Proxy(IHTMLRenderStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRenderStyle_get_textDecorationColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_put_renderingPriority_Proxy(IHTMLRenderStyle *This,long v);
  void __RPC_STUB IHTMLRenderStyle_put_renderingPriority_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_get_renderingPriority_Proxy(IHTMLRenderStyle *This,long *p);
  void __RPC_STUB IHTMLRenderStyle_get_renderingPriority_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_put_defaultTextSelection_Proxy(IHTMLRenderStyle *This,BSTR v);
  void __RPC_STUB IHTMLRenderStyle_put_defaultTextSelection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_get_defaultTextSelection_Proxy(IHTMLRenderStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRenderStyle_get_defaultTextSelection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_put_textDecoration_Proxy(IHTMLRenderStyle *This,BSTR v);
  void __RPC_STUB IHTMLRenderStyle_put_textDecoration_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_get_textDecoration_Proxy(IHTMLRenderStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRenderStyle_get_textDecoration_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLRenderStyle_DISPINTERFACE_DEFINED__
#define __DispHTMLRenderStyle_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLRenderStyle;
  struct DispHTMLRenderStyle : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLRenderStyle;
#ifdef __cplusplus
  class HTMLRenderStyle;
#endif

#ifndef __IHTMLCurrentStyle_INTERFACE_DEFINED__
#define __IHTMLCurrentStyle_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLCurrentStyle;
  struct IHTMLCurrentStyle : public IDispatch {
  public:
    virtual HRESULT WINAPI get_position(BSTR *p) = 0;
    virtual HRESULT WINAPI get_styleFloat(BSTR *p) = 0;
    virtual HRESULT WINAPI get_color(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_backgroundColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_fontFamily(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fontStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fontVariant(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fontWeight(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_fontSize(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_backgroundImage(BSTR *p) = 0;
    virtual HRESULT WINAPI get_backgroundPositionX(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_backgroundPositionY(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_backgroundRepeat(BSTR *p) = 0;
    virtual HRESULT WINAPI get_borderLeftColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_borderTopColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_borderRightColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_borderBottomColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_borderTopStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI get_borderRightStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI get_borderBottomStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI get_borderLeftStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI get_borderTopWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_borderRightWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_borderBottomWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_borderLeftWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_left(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_top(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_paddingLeft(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_paddingTop(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_paddingRight(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_paddingBottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_textAlign(BSTR *p) = 0;
    virtual HRESULT WINAPI get_textDecoration(BSTR *p) = 0;
    virtual HRESULT WINAPI get_display(BSTR *p) = 0;
    virtual HRESULT WINAPI get_visibility(BSTR *p) = 0;
    virtual HRESULT WINAPI get_zIndex(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_letterSpacing(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_lineHeight(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_textIndent(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_verticalAlign(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_backgroundAttachment(BSTR *p) = 0;
    virtual HRESULT WINAPI get_marginTop(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_marginRight(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_marginBottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_marginLeft(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_clear(BSTR *p) = 0;
    virtual HRESULT WINAPI get_listStyleType(BSTR *p) = 0;
    virtual HRESULT WINAPI get_listStylePosition(BSTR *p) = 0;
    virtual HRESULT WINAPI get_listStyleImage(BSTR *p) = 0;
    virtual HRESULT WINAPI get_clipTop(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_clipRight(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_clipBottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_clipLeft(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_overflow(BSTR *p) = 0;
    virtual HRESULT WINAPI get_pageBreakBefore(BSTR *p) = 0;
    virtual HRESULT WINAPI get_pageBreakAfter(BSTR *p) = 0;
    virtual HRESULT WINAPI get_cursor(BSTR *p) = 0;
    virtual HRESULT WINAPI get_tableLayout(BSTR *p) = 0;
    virtual HRESULT WINAPI get_borderCollapse(BSTR *p) = 0;
    virtual HRESULT WINAPI get_direction(BSTR *p) = 0;
    virtual HRESULT WINAPI get_behavior(BSTR *p) = 0;
    virtual HRESULT WINAPI getAttribute(BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue) = 0;
    virtual HRESULT WINAPI get_unicodeBidi(BSTR *p) = 0;
    virtual HRESULT WINAPI get_right(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_bottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_imeMode(BSTR *p) = 0;
    virtual HRESULT WINAPI get_rubyAlign(BSTR *p) = 0;
    virtual HRESULT WINAPI get_rubyPosition(BSTR *p) = 0;
    virtual HRESULT WINAPI get_rubyOverhang(BSTR *p) = 0;
    virtual HRESULT WINAPI get_textAutospace(BSTR *p) = 0;
    virtual HRESULT WINAPI get_lineBreak(BSTR *p) = 0;
    virtual HRESULT WINAPI get_wordBreak(BSTR *p) = 0;
    virtual HRESULT WINAPI get_textJustify(BSTR *p) = 0;
    virtual HRESULT WINAPI get_textJustifyTrim(BSTR *p) = 0;
    virtual HRESULT WINAPI get_textKashida(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_blockDirection(BSTR *p) = 0;
    virtual HRESULT WINAPI get_layoutGridChar(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_layoutGridLine(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_layoutGridMode(BSTR *p) = 0;
    virtual HRESULT WINAPI get_layoutGridType(BSTR *p) = 0;
    virtual HRESULT WINAPI get_borderStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI get_borderColor(BSTR *p) = 0;
    virtual HRESULT WINAPI get_borderWidth(BSTR *p) = 0;
    virtual HRESULT WINAPI get_padding(BSTR *p) = 0;
    virtual HRESULT WINAPI get_margin(BSTR *p) = 0;
    virtual HRESULT WINAPI get_accelerator(BSTR *p) = 0;
    virtual HRESULT WINAPI get_overflowX(BSTR *p) = 0;
    virtual HRESULT WINAPI get_overflowY(BSTR *p) = 0;
    virtual HRESULT WINAPI get_textTransform(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLCurrentStyle_get_position_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_position_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_styleFloat_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_styleFloat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_color_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_backgroundColor_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_backgroundColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_fontFamily_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_fontFamily_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_fontStyle_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_fontStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_fontVariant_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_fontVariant_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_fontWeight_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_fontWeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_fontSize_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_fontSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_backgroundImage_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_backgroundImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_backgroundPositionX_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_backgroundPositionX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_backgroundPositionY_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_backgroundPositionY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_backgroundRepeat_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_backgroundRepeat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderLeftColor_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderLeftColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderTopColor_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderTopColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderRightColor_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderRightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderBottomColor_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderBottomColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderTopStyle_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderTopStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderRightStyle_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderRightStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderBottomStyle_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderBottomStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderLeftStyle_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderLeftStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderTopWidth_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderTopWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderRightWidth_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderRightWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderBottomWidth_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderBottomWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderLeftWidth_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderLeftWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_left_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_left_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_top_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_top_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_width_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_height_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_paddingLeft_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_paddingLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_paddingTop_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_paddingTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_paddingRight_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_paddingRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_paddingBottom_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_paddingBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_textAlign_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_textAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_textDecoration_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_textDecoration_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_display_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_display_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_visibility_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_visibility_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_zIndex_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_zIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_letterSpacing_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_letterSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_lineHeight_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_lineHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_textIndent_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_textIndent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_verticalAlign_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_verticalAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_backgroundAttachment_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_backgroundAttachment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_marginTop_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_marginTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_marginRight_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_marginRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_marginBottom_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_marginBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_marginLeft_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_marginLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_clear_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_listStyleType_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_listStyleType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_listStylePosition_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_listStylePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_listStyleImage_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_listStyleImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_clipTop_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_clipTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_clipRight_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_clipRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_clipBottom_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_clipBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_clipLeft_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_clipLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_overflow_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_overflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_pageBreakBefore_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_pageBreakBefore_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_pageBreakAfter_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_pageBreakAfter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_cursor_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_cursor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_tableLayout_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_tableLayout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderCollapse_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderCollapse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_direction_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_direction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_behavior_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_behavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_getAttribute_Proxy(IHTMLCurrentStyle *This,BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue);
  void __RPC_STUB IHTMLCurrentStyle_getAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_unicodeBidi_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_unicodeBidi_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_right_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_right_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_bottom_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_bottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_imeMode_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_imeMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_rubyAlign_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_rubyAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_rubyPosition_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_rubyPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_rubyOverhang_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_rubyOverhang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_textAutospace_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_textAutospace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_lineBreak_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_lineBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_wordBreak_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_wordBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_textJustify_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_textJustify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_textJustifyTrim_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_textJustifyTrim_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_textKashida_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_textKashida_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_blockDirection_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_blockDirection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_layoutGridChar_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_layoutGridChar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_layoutGridLine_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_layoutGridLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_layoutGridMode_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_layoutGridMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_layoutGridType_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_layoutGridType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderStyle_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderColor_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderWidth_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_padding_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_padding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_margin_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_margin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_accelerator_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_accelerator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_overflowX_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_overflowX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_overflowY_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_overflowY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_textTransform_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_textTransform_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLCurrentStyle2_INTERFACE_DEFINED__
#define __IHTMLCurrentStyle2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLCurrentStyle2;
  struct IHTMLCurrentStyle2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_layoutFlow(BSTR *p) = 0;
    virtual HRESULT WINAPI get_wordWrap(BSTR *p) = 0;
    virtual HRESULT WINAPI get_textUnderlinePosition(BSTR *p) = 0;
    virtual HRESULT WINAPI get_hasLayout(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_scrollbarBaseColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_scrollbarFaceColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_scrollbar3dLightColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_scrollbarShadowColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_scrollbarHighlightColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_scrollbarDarkShadowColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_scrollbarArrowColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_scrollbarTrackColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_writingMode(BSTR *p) = 0;
    virtual HRESULT WINAPI get_zoom(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_filter(BSTR *p) = 0;
    virtual HRESULT WINAPI get_textAlignLast(BSTR *p) = 0;
    virtual HRESULT WINAPI get_textKashidaSpace(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_isBlock(VARIANT_BOOL *p) = 0;
  };
  HRESULT WINAPI IHTMLCurrentStyle2_get_layoutFlow_Proxy(IHTMLCurrentStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_layoutFlow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_wordWrap_Proxy(IHTMLCurrentStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_wordWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_textUnderlinePosition_Proxy(IHTMLCurrentStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_textUnderlinePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_hasLayout_Proxy(IHTMLCurrentStyle2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_hasLayout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_scrollbarBaseColor_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_scrollbarBaseColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_scrollbarFaceColor_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_scrollbarFaceColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_scrollbar3dLightColor_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_scrollbar3dLightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_scrollbarShadowColor_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_scrollbarShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_scrollbarHighlightColor_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_scrollbarHighlightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_scrollbarDarkShadowColor_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_scrollbarDarkShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_scrollbarArrowColor_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_scrollbarArrowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_scrollbarTrackColor_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_scrollbarTrackColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_writingMode_Proxy(IHTMLCurrentStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_writingMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_zoom_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_zoom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_filter_Proxy(IHTMLCurrentStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_filter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_textAlignLast_Proxy(IHTMLCurrentStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_textAlignLast_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_textKashidaSpace_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_textKashidaSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_isBlock_Proxy(IHTMLCurrentStyle2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_isBlock_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLCurrentStyle3_INTERFACE_DEFINED__
#define __IHTMLCurrentStyle3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLCurrentStyle3;
  struct IHTMLCurrentStyle3 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_textOverflow(BSTR *p) = 0;
    virtual HRESULT WINAPI get_minHeight(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_wordSpacing(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_whiteSpace(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLCurrentStyle3_get_textOverflow_Proxy(IHTMLCurrentStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle3_get_textOverflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle3_get_minHeight_Proxy(IHTMLCurrentStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle3_get_minHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle3_get_wordSpacing_Proxy(IHTMLCurrentStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle3_get_wordSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle3_get_whiteSpace_Proxy(IHTMLCurrentStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle3_get_whiteSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLCurrentStyle_DISPINTERFACE_DEFINED__
#define __DispHTMLCurrentStyle_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLCurrentStyle;
  struct DispHTMLCurrentStyle : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLCurrentStyle;
#ifdef __cplusplus
  class HTMLCurrentStyle;
#endif

#ifndef __IHTMLElement_INTERFACE_DEFINED__
#define __IHTMLElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLElement;
  struct IHTMLElement : public IDispatch {
  public:
    virtual HRESULT WINAPI setAttribute(BSTR strAttributeName,VARIANT AttributeValue,LONG lFlags = 1) = 0;
    virtual HRESULT WINAPI getAttribute(BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue) = 0;
    virtual HRESULT WINAPI removeAttribute(BSTR strAttributeName,LONG lFlags,VARIANT_BOOL *pfSuccess) = 0;
    virtual HRESULT WINAPI put_className(BSTR v) = 0;
    virtual HRESULT WINAPI get_className(BSTR *p) = 0;
    virtual HRESULT WINAPI put_id(BSTR v) = 0;
    virtual HRESULT WINAPI get_id(BSTR *p) = 0;
    virtual HRESULT WINAPI get_tagName(BSTR *p) = 0;
    virtual HRESULT WINAPI get_parentElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI get_style(IHTMLStyle **p) = 0;
    virtual HRESULT WINAPI put_onhelp(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onhelp(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onclick(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onclick(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondblclick(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondblclick(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onkeydown(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onkeydown(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onkeyup(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onkeyup(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onkeypress(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onkeypress(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmouseout(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmouseout(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmouseover(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmouseover(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmousemove(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmousemove(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmousedown(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmousedown(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmouseup(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmouseup(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_document(IDispatch **p) = 0;
    virtual HRESULT WINAPI put_title(BSTR v) = 0;
    virtual HRESULT WINAPI get_title(BSTR *p) = 0;
    virtual HRESULT WINAPI put_language(BSTR v) = 0;
    virtual HRESULT WINAPI get_language(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onselectstart(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onselectstart(VARIANT *p) = 0;
    virtual HRESULT WINAPI scrollIntoView(VARIANT varargStart) = 0;
    virtual HRESULT WINAPI contains(IHTMLElement *pChild,VARIANT_BOOL *pfResult) = 0;
    virtual HRESULT WINAPI get_sourceIndex(long *p) = 0;
    virtual HRESULT WINAPI get_recordNumber(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_lang(BSTR v) = 0;
    virtual HRESULT WINAPI get_lang(BSTR *p) = 0;
    virtual HRESULT WINAPI get_offsetLeft(long *p) = 0;
    virtual HRESULT WINAPI get_offsetTop(long *p) = 0;
    virtual HRESULT WINAPI get_offsetWidth(long *p) = 0;
    virtual HRESULT WINAPI get_offsetHeight(long *p) = 0;
    virtual HRESULT WINAPI get_offsetParent(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI put_innerHTML(BSTR v) = 0;
    virtual HRESULT WINAPI get_innerHTML(BSTR *p) = 0;
    virtual HRESULT WINAPI put_innerText(BSTR v) = 0;
    virtual HRESULT WINAPI get_innerText(BSTR *p) = 0;
    virtual HRESULT WINAPI put_outerHTML(BSTR v) = 0;
    virtual HRESULT WINAPI get_outerHTML(BSTR *p) = 0;
    virtual HRESULT WINAPI put_outerText(BSTR v) = 0;
    virtual HRESULT WINAPI get_outerText(BSTR *p) = 0;
    virtual HRESULT WINAPI insertAdjacentHTML(BSTR where,BSTR html) = 0;
    virtual HRESULT WINAPI insertAdjacentText(BSTR where,BSTR text) = 0;
    virtual HRESULT WINAPI get_parentTextEdit(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI get_isTextEdit(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI click(void) = 0;
    virtual HRESULT WINAPI get_filters(IHTMLFiltersCollection **p) = 0;
    virtual HRESULT WINAPI put_ondragstart(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondragstart(VARIANT *p) = 0;
    virtual HRESULT WINAPI toString(BSTR *String) = 0;
    virtual HRESULT WINAPI put_onbeforeupdate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeupdate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onafterupdate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onafterupdate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onerrorupdate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerrorupdate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onrowexit(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onrowexit(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onrowenter(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onrowenter(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondatasetchanged(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondatasetchanged(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondataavailable(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondataavailable(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondatasetcomplete(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondatasetcomplete(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onfilterchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfilterchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_children(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_all(IDispatch **p) = 0;
  };
  HRESULT WINAPI IHTMLElement_setAttribute_Proxy(IHTMLElement *This,BSTR strAttributeName,VARIANT AttributeValue,LONG lFlags);
  void __RPC_STUB IHTMLElement_setAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_getAttribute_Proxy(IHTMLElement *This,BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue);
  void __RPC_STUB IHTMLElement_getAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_removeAttribute_Proxy(IHTMLElement *This,BSTR strAttributeName,LONG lFlags,VARIANT_BOOL *pfSuccess);
  void __RPC_STUB IHTMLElement_removeAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_className_Proxy(IHTMLElement *This,BSTR v);
  void __RPC_STUB IHTMLElement_put_className_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_className_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_className_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_id_Proxy(IHTMLElement *This,BSTR v);
  void __RPC_STUB IHTMLElement_put_id_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_id_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_id_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_tagName_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_tagName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_parentElement_Proxy(IHTMLElement *This,IHTMLElement **p);
  void __RPC_STUB IHTMLElement_get_parentElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_style_Proxy(IHTMLElement *This,IHTMLStyle **p);
  void __RPC_STUB IHTMLElement_get_style_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onhelp_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onhelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onhelp_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onhelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onclick_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onclick_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onclick_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onclick_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_ondblclick_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_ondblclick_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_ondblclick_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_ondblclick_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onkeydown_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onkeydown_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onkeydown_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onkeydown_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onkeyup_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onkeyup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onkeyup_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onkeyup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onkeypress_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onkeypress_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onkeypress_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onkeypress_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onmouseout_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onmouseout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onmouseout_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onmouseout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onmouseover_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onmouseover_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onmouseover_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onmouseover_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onmousemove_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onmousemove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onmousemove_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onmousemove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onmousedown_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onmousedown_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onmousedown_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onmousedown_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onmouseup_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onmouseup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onmouseup_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onmouseup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_document_Proxy(IHTMLElement *This,IDispatch **p);
  void __RPC_STUB IHTMLElement_get_document_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_title_Proxy(IHTMLElement *This,BSTR v);
  void __RPC_STUB IHTMLElement_put_title_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_title_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_title_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_language_Proxy(IHTMLElement *This,BSTR v);
  void __RPC_STUB IHTMLElement_put_language_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_language_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_language_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onselectstart_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onselectstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onselectstart_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onselectstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_scrollIntoView_Proxy(IHTMLElement *This,VARIANT varargStart);
  void __RPC_STUB IHTMLElement_scrollIntoView_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_contains_Proxy(IHTMLElement *This,IHTMLElement *pChild,VARIANT_BOOL *pfResult);
  void __RPC_STUB IHTMLElement_contains_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_sourceIndex_Proxy(IHTMLElement *This,long *p);
  void __RPC_STUB IHTMLElement_get_sourceIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_recordNumber_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_recordNumber_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_lang_Proxy(IHTMLElement *This,BSTR v);
  void __RPC_STUB IHTMLElement_put_lang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_lang_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_lang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_offsetLeft_Proxy(IHTMLElement *This,long *p);
  void __RPC_STUB IHTMLElement_get_offsetLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_offsetTop_Proxy(IHTMLElement *This,long *p);
  void __RPC_STUB IHTMLElement_get_offsetTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_offsetWidth_Proxy(IHTMLElement *This,long *p);
  void __RPC_STUB IHTMLElement_get_offsetWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_offsetHeight_Proxy(IHTMLElement *This,long *p);
  void __RPC_STUB IHTMLElement_get_offsetHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_offsetParent_Proxy(IHTMLElement *This,IHTMLElement **p);
  void __RPC_STUB IHTMLElement_get_offsetParent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_innerHTML_Proxy(IHTMLElement *This,BSTR v);
  void __RPC_STUB IHTMLElement_put_innerHTML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_innerHTML_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_innerHTML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_innerText_Proxy(IHTMLElement *This,BSTR v);
  void __RPC_STUB IHTMLElement_put_innerText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_innerText_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_innerText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_outerHTML_Proxy(IHTMLElement *This,BSTR v);
  void __RPC_STUB IHTMLElement_put_outerHTML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_outerHTML_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_outerHTML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_outerText_Proxy(IHTMLElement *This,BSTR v);
  void __RPC_STUB IHTMLElement_put_outerText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_outerText_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_outerText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_insertAdjacentHTML_Proxy(IHTMLElement *This,BSTR where,BSTR html);
  void __RPC_STUB IHTMLElement_insertAdjacentHTML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_insertAdjacentText_Proxy(IHTMLElement *This,BSTR where,BSTR text);
  void __RPC_STUB IHTMLElement_insertAdjacentText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_parentTextEdit_Proxy(IHTMLElement *This,IHTMLElement **p);
  void __RPC_STUB IHTMLElement_get_parentTextEdit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_isTextEdit_Proxy(IHTMLElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElement_get_isTextEdit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_click_Proxy(IHTMLElement *This);
  void __RPC_STUB IHTMLElement_click_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_filters_Proxy(IHTMLElement *This,IHTMLFiltersCollection **p);
  void __RPC_STUB IHTMLElement_get_filters_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_ondragstart_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_ondragstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_ondragstart_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_ondragstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_toString_Proxy(IHTMLElement *This,BSTR *String);
  void __RPC_STUB IHTMLElement_toString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onbeforeupdate_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onbeforeupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onbeforeupdate_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onbeforeupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onafterupdate_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onafterupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onafterupdate_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onafterupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onerrorupdate_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onerrorupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onerrorupdate_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onerrorupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onrowexit_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onrowexit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onrowexit_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onrowexit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onrowenter_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onrowenter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onrowenter_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onrowenter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_ondatasetchanged_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_ondatasetchanged_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_ondatasetchanged_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_ondatasetchanged_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_ondataavailable_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_ondataavailable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_ondataavailable_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_ondataavailable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_ondatasetcomplete_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_ondatasetcomplete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_ondatasetcomplete_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_ondatasetcomplete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onfilterchange_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onfilterchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onfilterchange_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onfilterchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_children_Proxy(IHTMLElement *This,IDispatch **p);
  void __RPC_STUB IHTMLElement_get_children_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_all_Proxy(IHTMLElement *This,IDispatch **p);
  void __RPC_STUB IHTMLElement_get_all_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLRect_INTERFACE_DEFINED__
#define __IHTMLRect_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLRect;
  struct IHTMLRect : public IDispatch {
  public:
    virtual HRESULT WINAPI put_left(long v) = 0;
    virtual HRESULT WINAPI get_left(long *p) = 0;
    virtual HRESULT WINAPI put_top(long v) = 0;
    virtual HRESULT WINAPI get_top(long *p) = 0;
    virtual HRESULT WINAPI put_right(long v) = 0;
    virtual HRESULT WINAPI get_right(long *p) = 0;
    virtual HRESULT WINAPI put_bottom(long v) = 0;
    virtual HRESULT WINAPI get_bottom(long *p) = 0;
  };
  HRESULT WINAPI IHTMLRect_put_left_Proxy(IHTMLRect *This,long v);
  void __RPC_STUB IHTMLRect_put_left_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRect_get_left_Proxy(IHTMLRect *This,long *p);
  void __RPC_STUB IHTMLRect_get_left_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRect_put_top_Proxy(IHTMLRect *This,long v);
  void __RPC_STUB IHTMLRect_put_top_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRect_get_top_Proxy(IHTMLRect *This,long *p);
  void __RPC_STUB IHTMLRect_get_top_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRect_put_right_Proxy(IHTMLRect *This,long v);
  void __RPC_STUB IHTMLRect_put_right_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRect_get_right_Proxy(IHTMLRect *This,long *p);
  void __RPC_STUB IHTMLRect_get_right_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRect_put_bottom_Proxy(IHTMLRect *This,long v);
  void __RPC_STUB IHTMLRect_put_bottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRect_get_bottom_Proxy(IHTMLRect *This,long *p);
  void __RPC_STUB IHTMLRect_get_bottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLRectCollection_INTERFACE_DEFINED__
#define __IHTMLRectCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLRectCollection;
  struct IHTMLRectCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(VARIANT *pvarIndex,VARIANT *pvarResult) = 0;
  };
  HRESULT WINAPI IHTMLRectCollection_get_length_Proxy(IHTMLRectCollection *This,long *p);
  void __RPC_STUB IHTMLRectCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRectCollection_get__newEnum_Proxy(IHTMLRectCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLRectCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRectCollection_item_Proxy(IHTMLRectCollection *This,VARIANT *pvarIndex,VARIANT *pvarResult);
  void __RPC_STUB IHTMLRectCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDOMNode_INTERFACE_DEFINED__
#define __IHTMLDOMNode_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDOMNode;
  struct IHTMLDOMNode : public IDispatch {
  public:
    virtual HRESULT WINAPI get_nodeType(long *p) = 0;
    virtual HRESULT WINAPI get_parentNode(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI hasChildNodes(VARIANT_BOOL *fChildren) = 0;
    virtual HRESULT WINAPI get_childNodes(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_attributes(IDispatch **p) = 0;
    virtual HRESULT WINAPI insertBefore(IHTMLDOMNode *newChild,VARIANT refChild,IHTMLDOMNode **node) = 0;
    virtual HRESULT WINAPI removeChild(IHTMLDOMNode *oldChild,IHTMLDOMNode **node) = 0;
    virtual HRESULT WINAPI replaceChild(IHTMLDOMNode *newChild,IHTMLDOMNode *oldChild,IHTMLDOMNode **node) = 0;
    virtual HRESULT WINAPI cloneNode(VARIANT_BOOL fDeep,IHTMLDOMNode **clonedNode) = 0;
    virtual HRESULT WINAPI removeNode(VARIANT_BOOL fDeep,IHTMLDOMNode **removed) = 0;
    virtual HRESULT WINAPI swapNode(IHTMLDOMNode *otherNode,IHTMLDOMNode **swappedNode) = 0;
    virtual HRESULT WINAPI replaceNode(IHTMLDOMNode *replacement,IHTMLDOMNode **replaced) = 0;
    virtual HRESULT WINAPI appendChild(IHTMLDOMNode *newChild,IHTMLDOMNode **node) = 0;
    virtual HRESULT WINAPI get_nodeName(BSTR *p) = 0;
    virtual HRESULT WINAPI put_nodeValue(VARIANT v) = 0;
    virtual HRESULT WINAPI get_nodeValue(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_firstChild(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI get_lastChild(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI get_previousSibling(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI get_nextSibling(IHTMLDOMNode **p) = 0;
  };
  HRESULT WINAPI IHTMLDOMNode_get_nodeType_Proxy(IHTMLDOMNode *This,long *p);
  void __RPC_STUB IHTMLDOMNode_get_nodeType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_get_parentNode_Proxy(IHTMLDOMNode *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMNode_get_parentNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_hasChildNodes_Proxy(IHTMLDOMNode *This,VARIANT_BOOL *fChildren);
  void __RPC_STUB IHTMLDOMNode_hasChildNodes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_get_childNodes_Proxy(IHTMLDOMNode *This,IDispatch **p);
  void __RPC_STUB IHTMLDOMNode_get_childNodes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_get_attributes_Proxy(IHTMLDOMNode *This,IDispatch **p);
  void __RPC_STUB IHTMLDOMNode_get_attributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_insertBefore_Proxy(IHTMLDOMNode *This,IHTMLDOMNode *newChild,VARIANT refChild,IHTMLDOMNode **node);
  void __RPC_STUB IHTMLDOMNode_insertBefore_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_removeChild_Proxy(IHTMLDOMNode *This,IHTMLDOMNode *oldChild,IHTMLDOMNode **node);
  void __RPC_STUB IHTMLDOMNode_removeChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_replaceChild_Proxy(IHTMLDOMNode *This,IHTMLDOMNode *newChild,IHTMLDOMNode *oldChild,IHTMLDOMNode **node);
  void __RPC_STUB IHTMLDOMNode_replaceChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_cloneNode_Proxy(IHTMLDOMNode *This,VARIANT_BOOL fDeep,IHTMLDOMNode **clonedNode);
  void __RPC_STUB IHTMLDOMNode_cloneNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_removeNode_Proxy(IHTMLDOMNode *This,VARIANT_BOOL fDeep,IHTMLDOMNode **removed);
  void __RPC_STUB IHTMLDOMNode_removeNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_swapNode_Proxy(IHTMLDOMNode *This,IHTMLDOMNode *otherNode,IHTMLDOMNode **swappedNode);
  void __RPC_STUB IHTMLDOMNode_swapNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_replaceNode_Proxy(IHTMLDOMNode *This,IHTMLDOMNode *replacement,IHTMLDOMNode **replaced);
  void __RPC_STUB IHTMLDOMNode_replaceNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_appendChild_Proxy(IHTMLDOMNode *This,IHTMLDOMNode *newChild,IHTMLDOMNode **node);
  void __RPC_STUB IHTMLDOMNode_appendChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_get_nodeName_Proxy(IHTMLDOMNode *This,BSTR *p);
  void __RPC_STUB IHTMLDOMNode_get_nodeName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_put_nodeValue_Proxy(IHTMLDOMNode *This,VARIANT v);
  void __RPC_STUB IHTMLDOMNode_put_nodeValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_get_nodeValue_Proxy(IHTMLDOMNode *This,VARIANT *p);
  void __RPC_STUB IHTMLDOMNode_get_nodeValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_get_firstChild_Proxy(IHTMLDOMNode *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMNode_get_firstChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_get_lastChild_Proxy(IHTMLDOMNode *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMNode_get_lastChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_get_previousSibling_Proxy(IHTMLDOMNode *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMNode_get_previousSibling_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_get_nextSibling_Proxy(IHTMLDOMNode *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMNode_get_nextSibling_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDOMNode2_INTERFACE_DEFINED__
#define __IHTMLDOMNode2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDOMNode2;
  struct IHTMLDOMNode2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_ownerDocument(IDispatch **p) = 0;
  };
  HRESULT WINAPI IHTMLDOMNode2_get_ownerDocument_Proxy(IHTMLDOMNode2 *This,IDispatch **p);
  void __RPC_STUB IHTMLDOMNode2_get_ownerDocument_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDOMAttribute_INTERFACE_DEFINED__
#define __IHTMLDOMAttribute_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDOMAttribute;
  struct IHTMLDOMAttribute : public IDispatch {
  public:
    virtual HRESULT WINAPI get_nodeName(BSTR *p) = 0;
    virtual HRESULT WINAPI put_nodeValue(VARIANT v) = 0;
    virtual HRESULT WINAPI get_nodeValue(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_specified(VARIANT_BOOL *p) = 0;
  };
  HRESULT WINAPI IHTMLDOMAttribute_get_nodeName_Proxy(IHTMLDOMAttribute *This,BSTR *p);
  void __RPC_STUB IHTMLDOMAttribute_get_nodeName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute_put_nodeValue_Proxy(IHTMLDOMAttribute *This,VARIANT v);
  void __RPC_STUB IHTMLDOMAttribute_put_nodeValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute_get_nodeValue_Proxy(IHTMLDOMAttribute *This,VARIANT *p);
  void __RPC_STUB IHTMLDOMAttribute_get_nodeValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute_get_specified_Proxy(IHTMLDOMAttribute *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLDOMAttribute_get_specified_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDOMAttribute2_INTERFACE_DEFINED__
#define __IHTMLDOMAttribute2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDOMAttribute2;
  struct IHTMLDOMAttribute2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI get_expando(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_nodeType(long *p) = 0;
    virtual HRESULT WINAPI get_parentNode(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI get_childNodes(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_firstChild(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI get_lastChild(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI get_previousSibling(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI get_nextSibling(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI get_attributes(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_ownerDocument(IDispatch **p) = 0;
    virtual HRESULT WINAPI insertBefore(IHTMLDOMNode *newChild,VARIANT refChild,IHTMLDOMNode **node) = 0;
    virtual HRESULT WINAPI replaceChild(IHTMLDOMNode *newChild,IHTMLDOMNode *oldChild,IHTMLDOMNode **node) = 0;
    virtual HRESULT WINAPI removeChild(IHTMLDOMNode *oldChild,IHTMLDOMNode **node) = 0;
    virtual HRESULT WINAPI appendChild(IHTMLDOMNode *newChild,IHTMLDOMNode **node) = 0;
    virtual HRESULT WINAPI hasChildNodes(VARIANT_BOOL *fChildren) = 0;
    virtual HRESULT WINAPI cloneNode(VARIANT_BOOL fDeep,IHTMLDOMAttribute **clonedNode) = 0;
  };
  HRESULT WINAPI IHTMLDOMAttribute2_get_name_Proxy(IHTMLDOMAttribute2 *This,BSTR *p);
  void __RPC_STUB IHTMLDOMAttribute2_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_put_value_Proxy(IHTMLDOMAttribute2 *This,BSTR v);
  void __RPC_STUB IHTMLDOMAttribute2_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_value_Proxy(IHTMLDOMAttribute2 *This,BSTR *p);
  void __RPC_STUB IHTMLDOMAttribute2_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_expando_Proxy(IHTMLDOMAttribute2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLDOMAttribute2_get_expando_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_nodeType_Proxy(IHTMLDOMAttribute2 *This,long *p);
  void __RPC_STUB IHTMLDOMAttribute2_get_nodeType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_parentNode_Proxy(IHTMLDOMAttribute2 *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMAttribute2_get_parentNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_childNodes_Proxy(IHTMLDOMAttribute2 *This,IDispatch **p);
  void __RPC_STUB IHTMLDOMAttribute2_get_childNodes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_firstChild_Proxy(IHTMLDOMAttribute2 *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMAttribute2_get_firstChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_lastChild_Proxy(IHTMLDOMAttribute2 *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMAttribute2_get_lastChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_previousSibling_Proxy(IHTMLDOMAttribute2 *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMAttribute2_get_previousSibling_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_nextSibling_Proxy(IHTMLDOMAttribute2 *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMAttribute2_get_nextSibling_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_attributes_Proxy(IHTMLDOMAttribute2 *This,IDispatch **p);
  void __RPC_STUB IHTMLDOMAttribute2_get_attributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_ownerDocument_Proxy(IHTMLDOMAttribute2 *This,IDispatch **p);
  void __RPC_STUB IHTMLDOMAttribute2_get_ownerDocument_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_insertBefore_Proxy(IHTMLDOMAttribute2 *This,IHTMLDOMNode *newChild,VARIANT refChild,IHTMLDOMNode **node);
  void __RPC_STUB IHTMLDOMAttribute2_insertBefore_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_replaceChild_Proxy(IHTMLDOMAttribute2 *This,IHTMLDOMNode *newChild,IHTMLDOMNode *oldChild,IHTMLDOMNode **node);
  void __RPC_STUB IHTMLDOMAttribute2_replaceChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_removeChild_Proxy(IHTMLDOMAttribute2 *This,IHTMLDOMNode *oldChild,IHTMLDOMNode **node);
  void __RPC_STUB IHTMLDOMAttribute2_removeChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_appendChild_Proxy(IHTMLDOMAttribute2 *This,IHTMLDOMNode *newChild,IHTMLDOMNode **node);
  void __RPC_STUB IHTMLDOMAttribute2_appendChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_hasChildNodes_Proxy(IHTMLDOMAttribute2 *This,VARIANT_BOOL *fChildren);
  void __RPC_STUB IHTMLDOMAttribute2_hasChildNodes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_cloneNode_Proxy(IHTMLDOMAttribute2 *This,VARIANT_BOOL fDeep,IHTMLDOMAttribute **clonedNode);
  void __RPC_STUB IHTMLDOMAttribute2_cloneNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDOMTextNode_INTERFACE_DEFINED__
#define __IHTMLDOMTextNode_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDOMTextNode;
  struct IHTMLDOMTextNode : public IDispatch {
  public:
    virtual HRESULT WINAPI put_data(BSTR v) = 0;
    virtual HRESULT WINAPI get_data(BSTR *p) = 0;
    virtual HRESULT WINAPI toString(BSTR *String) = 0;
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI splitText(long offset,IHTMLDOMNode **pRetNode) = 0;
  };
  HRESULT WINAPI IHTMLDOMTextNode_put_data_Proxy(IHTMLDOMTextNode *This,BSTR v);
  void __RPC_STUB IHTMLDOMTextNode_put_data_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMTextNode_get_data_Proxy(IHTMLDOMTextNode *This,BSTR *p);
  void __RPC_STUB IHTMLDOMTextNode_get_data_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMTextNode_toString_Proxy(IHTMLDOMTextNode *This,BSTR *String);
  void __RPC_STUB IHTMLDOMTextNode_toString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMTextNode_get_length_Proxy(IHTMLDOMTextNode *This,long *p);
  void __RPC_STUB IHTMLDOMTextNode_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMTextNode_splitText_Proxy(IHTMLDOMTextNode *This,long offset,IHTMLDOMNode **pRetNode);
  void __RPC_STUB IHTMLDOMTextNode_splitText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDOMTextNode2_INTERFACE_DEFINED__
#define __IHTMLDOMTextNode2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDOMTextNode2;
  struct IHTMLDOMTextNode2 : public IDispatch {
  public:
    virtual HRESULT WINAPI substringData(long offset,long Count,BSTR *pbstrsubString) = 0;
    virtual HRESULT WINAPI appendData(BSTR bstrstring) = 0;
    virtual HRESULT WINAPI insertData(long offset,BSTR bstrstring) = 0;
    virtual HRESULT WINAPI deleteData(long offset,long Count) = 0;
    virtual HRESULT WINAPI replaceData(long offset,long Count,BSTR bstrstring) = 0;
  };
  HRESULT WINAPI IHTMLDOMTextNode2_substringData_Proxy(IHTMLDOMTextNode2 *This,long offset,long Count,BSTR *pbstrsubString);
  void __RPC_STUB IHTMLDOMTextNode2_substringData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMTextNode2_appendData_Proxy(IHTMLDOMTextNode2 *This,BSTR bstrstring);
  void __RPC_STUB IHTMLDOMTextNode2_appendData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMTextNode2_insertData_Proxy(IHTMLDOMTextNode2 *This,long offset,BSTR bstrstring);
  void __RPC_STUB IHTMLDOMTextNode2_insertData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMTextNode2_deleteData_Proxy(IHTMLDOMTextNode2 *This,long offset,long Count);
  void __RPC_STUB IHTMLDOMTextNode2_deleteData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMTextNode2_replaceData_Proxy(IHTMLDOMTextNode2 *This,long offset,long Count,BSTR bstrstring);
  void __RPC_STUB IHTMLDOMTextNode2_replaceData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDOMImplementation_INTERFACE_DEFINED__
#define __IHTMLDOMImplementation_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDOMImplementation;
  struct IHTMLDOMImplementation : public IDispatch {
  public:
    virtual HRESULT WINAPI hasFeature(BSTR bstrfeature,VARIANT version,VARIANT_BOOL *pfHasFeature) = 0;
  };
  HRESULT WINAPI IHTMLDOMImplementation_hasFeature_Proxy(IHTMLDOMImplementation *This,BSTR bstrfeature,VARIANT version,VARIANT_BOOL *pfHasFeature);
  void __RPC_STUB IHTMLDOMImplementation_hasFeature_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLDOMAttribute_DISPINTERFACE_DEFINED__
#define __DispHTMLDOMAttribute_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDOMAttribute;
  struct DispHTMLDOMAttribute : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLDOMAttribute;
#ifdef __cplusplus
  class HTMLDOMAttribute;
#endif

#ifndef __DispHTMLDOMTextNode_DISPINTERFACE_DEFINED__
#define __DispHTMLDOMTextNode_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDOMTextNode;
  struct DispHTMLDOMTextNode : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLDOMTextNode;
#ifdef __cplusplus
  class HTMLDOMTextNode;
#endif

#ifndef __DispHTMLDOMImplementation_DISPINTERFACE_DEFINED__
#define __DispHTMLDOMImplementation_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDOMImplementation;
  struct DispHTMLDOMImplementation : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLDOMImplementation;
#ifdef __cplusplus
  class HTMLDOMImplementation;
#endif

#ifndef __IHTMLAttributeCollection_INTERFACE_DEFINED__
#define __IHTMLAttributeCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAttributeCollection;
  struct IHTMLAttributeCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(VARIANT *name,IDispatch **pdisp) = 0;
  };
  HRESULT WINAPI IHTMLAttributeCollection_get_length_Proxy(IHTMLAttributeCollection *This,long *p);
  void __RPC_STUB IHTMLAttributeCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAttributeCollection_get__newEnum_Proxy(IHTMLAttributeCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLAttributeCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAttributeCollection_item_Proxy(IHTMLAttributeCollection *This,VARIANT *name,IDispatch **pdisp);
  void __RPC_STUB IHTMLAttributeCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLAttributeCollection2_INTERFACE_DEFINED__
#define __IHTMLAttributeCollection2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAttributeCollection2;
  struct IHTMLAttributeCollection2 : public IDispatch {
  public:
    virtual HRESULT WINAPI getNamedItem(BSTR bstrName,IHTMLDOMAttribute **newretNode) = 0;
    virtual HRESULT WINAPI setNamedItem(IHTMLDOMAttribute *ppNode,IHTMLDOMAttribute **newretNode) = 0;
    virtual HRESULT WINAPI removeNamedItem(BSTR bstrName,IHTMLDOMAttribute **newretNode) = 0;
  };
  HRESULT WINAPI IHTMLAttributeCollection2_getNamedItem_Proxy(IHTMLAttributeCollection2 *This,BSTR bstrName,IHTMLDOMAttribute **newretNode);
  void __RPC_STUB IHTMLAttributeCollection2_getNamedItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAttributeCollection2_setNamedItem_Proxy(IHTMLAttributeCollection2 *This,IHTMLDOMAttribute *ppNode,IHTMLDOMAttribute **newretNode);
  void __RPC_STUB IHTMLAttributeCollection2_setNamedItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAttributeCollection2_removeNamedItem_Proxy(IHTMLAttributeCollection2 *This,BSTR bstrName,IHTMLDOMAttribute **newretNode);
  void __RPC_STUB IHTMLAttributeCollection2_removeNamedItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDOMChildrenCollection_INTERFACE_DEFINED__
#define __IHTMLDOMChildrenCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDOMChildrenCollection;
  struct IHTMLDOMChildrenCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(long index,IDispatch **ppItem) = 0;
  };
  HRESULT WINAPI IHTMLDOMChildrenCollection_get_length_Proxy(IHTMLDOMChildrenCollection *This,long *p);
  void __RPC_STUB IHTMLDOMChildrenCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMChildrenCollection_get__newEnum_Proxy(IHTMLDOMChildrenCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLDOMChildrenCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMChildrenCollection_item_Proxy(IHTMLDOMChildrenCollection *This,long index,IDispatch **ppItem);
  void __RPC_STUB IHTMLDOMChildrenCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLAttributeCollection_DISPINTERFACE_DEFINED__
#define __DispHTMLAttributeCollection_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLAttributeCollection;
  struct DispHTMLAttributeCollection : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLAttributeCollection;
#ifdef __cplusplus
  class HTMLAttributeCollection;
#endif

#ifndef __DispDOMChildrenCollection_DISPINTERFACE_DEFINED__
#define __DispDOMChildrenCollection_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispDOMChildrenCollection;
  struct DispDOMChildrenCollection : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_DOMChildrenCollection;
#ifdef __cplusplus
  class DOMChildrenCollection;
#endif

#ifndef __HTMLElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLElementEvents2;
  struct HTMLElementEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLElementEvents;
  struct HTMLElementEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLElementCollection_INTERFACE_DEFINED__
#define __IHTMLElementCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLElementCollection;
  struct IHTMLElementCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI toString(BSTR *String) = 0;
    virtual HRESULT WINAPI put_length(long v) = 0;
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(VARIANT name,VARIANT index,IDispatch **pdisp) = 0;
    virtual HRESULT WINAPI tags(VARIANT tagName,IDispatch **pdisp) = 0;
  };
  HRESULT WINAPI IHTMLElementCollection_toString_Proxy(IHTMLElementCollection *This,BSTR *String);
  void __RPC_STUB IHTMLElementCollection_toString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementCollection_put_length_Proxy(IHTMLElementCollection *This,long v);
  void __RPC_STUB IHTMLElementCollection_put_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementCollection_get_length_Proxy(IHTMLElementCollection *This,long *p);
  void __RPC_STUB IHTMLElementCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementCollection_get__newEnum_Proxy(IHTMLElementCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLElementCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementCollection_item_Proxy(IHTMLElementCollection *This,VARIANT name,VARIANT index,IDispatch **pdisp);
  void __RPC_STUB IHTMLElementCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementCollection_tags_Proxy(IHTMLElementCollection *This,VARIANT tagName,IDispatch **pdisp);
  void __RPC_STUB IHTMLElementCollection_tags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLElement2_INTERFACE_DEFINED__
#define __IHTMLElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLElement2;
  struct IHTMLElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_scopeName(BSTR *p) = 0;
    virtual HRESULT WINAPI setCapture(VARIANT_BOOL containerCapture = -1) = 0;
    virtual HRESULT WINAPI releaseCapture(void) = 0;
    virtual HRESULT WINAPI put_onlosecapture(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onlosecapture(VARIANT *p) = 0;
    virtual HRESULT WINAPI componentFromPoint(long x,long y,BSTR *component) = 0;
    virtual HRESULT WINAPI doScroll(VARIANT component) = 0;
    virtual HRESULT WINAPI put_onscroll(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onscroll(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondrag(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondrag(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondragend(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondragend(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondragenter(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondragenter(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondragover(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondragover(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondragleave(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondragleave(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondrop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondrop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onbeforecut(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforecut(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_oncut(VARIANT v) = 0;
    virtual HRESULT WINAPI get_oncut(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onbeforecopy(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforecopy(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_oncopy(VARIANT v) = 0;
    virtual HRESULT WINAPI get_oncopy(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onbeforepaste(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforepaste(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onpaste(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onpaste(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_currentStyle(IHTMLCurrentStyle **p) = 0;
    virtual HRESULT WINAPI put_onpropertychange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onpropertychange(VARIANT *p) = 0;
    virtual HRESULT WINAPI getClientRects(IHTMLRectCollection **pRectCol) = 0;
    virtual HRESULT WINAPI getBoundingClientRect(IHTMLRect **pRect) = 0;
    virtual HRESULT WINAPI setExpression(BSTR propname,BSTR expression,BSTR language = L"") = 0;
    virtual HRESULT WINAPI getExpression(BSTR propname,VARIANT *expression) = 0;
    virtual HRESULT WINAPI removeExpression(BSTR propname,VARIANT_BOOL *pfSuccess) = 0;
    virtual HRESULT WINAPI put_tabIndex(short v) = 0;
    virtual HRESULT WINAPI get_tabIndex(short *p) = 0;
    virtual HRESULT WINAPI focus(void) = 0;
    virtual HRESULT WINAPI put_accessKey(BSTR v) = 0;
    virtual HRESULT WINAPI get_accessKey(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onblur(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onblur(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onfocus(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfocus(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onresize(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onresize(VARIANT *p) = 0;
    virtual HRESULT WINAPI blur(void) = 0;
    virtual HRESULT WINAPI addFilter(IUnknown *pUnk) = 0;
    virtual HRESULT WINAPI removeFilter(IUnknown *pUnk) = 0;
    virtual HRESULT WINAPI get_clientHeight(long *p) = 0;
    virtual HRESULT WINAPI get_clientWidth(long *p) = 0;
    virtual HRESULT WINAPI get_clientTop(long *p) = 0;
    virtual HRESULT WINAPI get_clientLeft(long *p) = 0;
    virtual HRESULT WINAPI attachEvent(BSTR event,IDispatch *pDisp,VARIANT_BOOL *pfResult) = 0;
    virtual HRESULT WINAPI detachEvent(BSTR event,IDispatch *pDisp) = 0;
    virtual HRESULT WINAPI get_readyState(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onreadystatechange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onreadystatechange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onrowsdelete(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onrowsdelete(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onrowsinserted(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onrowsinserted(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_oncellchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_oncellchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_dir(BSTR v) = 0;
    virtual HRESULT WINAPI get_dir(BSTR *p) = 0;
    virtual HRESULT WINAPI createControlRange(IDispatch **range) = 0;
    virtual HRESULT WINAPI get_scrollHeight(long *p) = 0;
    virtual HRESULT WINAPI get_scrollWidth(long *p) = 0;
    virtual HRESULT WINAPI put_scrollTop(long v) = 0;
    virtual HRESULT WINAPI get_scrollTop(long *p) = 0;
    virtual HRESULT WINAPI put_scrollLeft(long v) = 0;
    virtual HRESULT WINAPI get_scrollLeft(long *p) = 0;
    virtual HRESULT WINAPI clearAttributes(void) = 0;
    virtual HRESULT WINAPI mergeAttributes(IHTMLElement *mergeThis) = 0;
    virtual HRESULT WINAPI put_oncontextmenu(VARIANT v) = 0;
    virtual HRESULT WINAPI get_oncontextmenu(VARIANT *p) = 0;
    virtual HRESULT WINAPI insertAdjacentElement(BSTR where,IHTMLElement *insertedElement,IHTMLElement **inserted) = 0;
    virtual HRESULT WINAPI applyElement(IHTMLElement *apply,BSTR where,IHTMLElement **applied) = 0;
    virtual HRESULT WINAPI getAdjacentText(BSTR where,BSTR *text) = 0;
    virtual HRESULT WINAPI replaceAdjacentText(BSTR where,BSTR newText,BSTR *oldText) = 0;
    virtual HRESULT WINAPI get_canHaveChildren(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI addBehavior(BSTR bstrUrl,VARIANT *pvarFactory,long *pCookie) = 0;
    virtual HRESULT WINAPI removeBehavior(long cookie,VARIANT_BOOL *pfResult) = 0;
    virtual HRESULT WINAPI get_runtimeStyle(IHTMLStyle **p) = 0;
    virtual HRESULT WINAPI get_behaviorUrns(IDispatch **p) = 0;
    virtual HRESULT WINAPI put_tagUrn(BSTR v) = 0;
    virtual HRESULT WINAPI get_tagUrn(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onbeforeeditfocus(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeeditfocus(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_readyStateValue(long *p) = 0;
    virtual HRESULT WINAPI getElementsByTagName(BSTR v,IHTMLElementCollection **pelColl) = 0;
  };
  HRESULT WINAPI IHTMLElement2_get_scopeName_Proxy(IHTMLElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLElement2_get_scopeName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_setCapture_Proxy(IHTMLElement2 *This,VARIANT_BOOL containerCapture);
  void __RPC_STUB IHTMLElement2_setCapture_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_releaseCapture_Proxy(IHTMLElement2 *This);
  void __RPC_STUB IHTMLElement2_releaseCapture_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onlosecapture_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onlosecapture_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onlosecapture_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onlosecapture_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_componentFromPoint_Proxy(IHTMLElement2 *This,long x,long y,BSTR *component);
  void __RPC_STUB IHTMLElement2_componentFromPoint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_doScroll_Proxy(IHTMLElement2 *This,VARIANT component);
  void __RPC_STUB IHTMLElement2_doScroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onscroll_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onscroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onscroll_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onscroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_ondrag_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_ondrag_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_ondrag_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_ondrag_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_ondragend_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_ondragend_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_ondragend_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_ondragend_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_ondragenter_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_ondragenter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_ondragenter_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_ondragenter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_ondragover_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_ondragover_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_ondragover_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_ondragover_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_ondragleave_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_ondragleave_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_ondragleave_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_ondragleave_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_ondrop_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_ondrop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_ondrop_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_ondrop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onbeforecut_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onbeforecut_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onbeforecut_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onbeforecut_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_oncut_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_oncut_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_oncut_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_oncut_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onbeforecopy_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onbeforecopy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onbeforecopy_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onbeforecopy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_oncopy_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_oncopy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_oncopy_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_oncopy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onbeforepaste_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onbeforepaste_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onbeforepaste_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onbeforepaste_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onpaste_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onpaste_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onpaste_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onpaste_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_currentStyle_Proxy(IHTMLElement2 *This,IHTMLCurrentStyle **p);
  void __RPC_STUB IHTMLElement2_get_currentStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onpropertychange_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onpropertychange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onpropertychange_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onpropertychange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_getClientRects_Proxy(IHTMLElement2 *This,IHTMLRectCollection **pRectCol);
  void __RPC_STUB IHTMLElement2_getClientRects_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_getBoundingClientRect_Proxy(IHTMLElement2 *This,IHTMLRect **pRect);
  void __RPC_STUB IHTMLElement2_getBoundingClientRect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_setExpression_Proxy(IHTMLElement2 *This,BSTR propname,BSTR expression,BSTR language);
  void __RPC_STUB IHTMLElement2_setExpression_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_getExpression_Proxy(IHTMLElement2 *This,BSTR propname,VARIANT *expression);
  void __RPC_STUB IHTMLElement2_getExpression_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_removeExpression_Proxy(IHTMLElement2 *This,BSTR propname,VARIANT_BOOL *pfSuccess);
  void __RPC_STUB IHTMLElement2_removeExpression_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_tabIndex_Proxy(IHTMLElement2 *This,short v);
  void __RPC_STUB IHTMLElement2_put_tabIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_tabIndex_Proxy(IHTMLElement2 *This,short *p);
  void __RPC_STUB IHTMLElement2_get_tabIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_focus_Proxy(IHTMLElement2 *This);
  void __RPC_STUB IHTMLElement2_focus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_accessKey_Proxy(IHTMLElement2 *This,BSTR v);
  void __RPC_STUB IHTMLElement2_put_accessKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_accessKey_Proxy(IHTMLElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLElement2_get_accessKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onblur_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onblur_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onfocus_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onfocus_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onresize_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onresize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onresize_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onresize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_blur_Proxy(IHTMLElement2 *This);
  void __RPC_STUB IHTMLElement2_blur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_addFilter_Proxy(IHTMLElement2 *This,IUnknown *pUnk);
  void __RPC_STUB IHTMLElement2_addFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_removeFilter_Proxy(IHTMLElement2 *This,IUnknown *pUnk);
  void __RPC_STUB IHTMLElement2_removeFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_clientHeight_Proxy(IHTMLElement2 *This,long *p);
  void __RPC_STUB IHTMLElement2_get_clientHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_clientWidth_Proxy(IHTMLElement2 *This,long *p);
  void __RPC_STUB IHTMLElement2_get_clientWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_clientTop_Proxy(IHTMLElement2 *This,long *p);
  void __RPC_STUB IHTMLElement2_get_clientTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_clientLeft_Proxy(IHTMLElement2 *This,long *p);
  void __RPC_STUB IHTMLElement2_get_clientLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_attachEvent_Proxy(IHTMLElement2 *This,BSTR event,IDispatch *pDisp,VARIANT_BOOL *pfResult);
  void __RPC_STUB IHTMLElement2_attachEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_detachEvent_Proxy(IHTMLElement2 *This,BSTR event,IDispatch *pDisp);
  void __RPC_STUB IHTMLElement2_detachEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_readyState_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onreadystatechange_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onreadystatechange_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onrowsdelete_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onrowsdelete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onrowsdelete_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onrowsdelete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onrowsinserted_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onrowsinserted_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onrowsinserted_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onrowsinserted_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_oncellchange_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_oncellchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_oncellchange_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_oncellchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_dir_Proxy(IHTMLElement2 *This,BSTR v);
  void __RPC_STUB IHTMLElement2_put_dir_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_dir_Proxy(IHTMLElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLElement2_get_dir_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_createControlRange_Proxy(IHTMLElement2 *This,IDispatch **range);
  void __RPC_STUB IHTMLElement2_createControlRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_scrollHeight_Proxy(IHTMLElement2 *This,long *p);
  void __RPC_STUB IHTMLElement2_get_scrollHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_scrollWidth_Proxy(IHTMLElement2 *This,long *p);
  void __RPC_STUB IHTMLElement2_get_scrollWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_scrollTop_Proxy(IHTMLElement2 *This,long v);
  void __RPC_STUB IHTMLElement2_put_scrollTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_scrollTop_Proxy(IHTMLElement2 *This,long *p);
  void __RPC_STUB IHTMLElement2_get_scrollTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_scrollLeft_Proxy(IHTMLElement2 *This,long v);
  void __RPC_STUB IHTMLElement2_put_scrollLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_scrollLeft_Proxy(IHTMLElement2 *This,long *p);
  void __RPC_STUB IHTMLElement2_get_scrollLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_clearAttributes_Proxy(IHTMLElement2 *This);
  void __RPC_STUB IHTMLElement2_clearAttributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_mergeAttributes_Proxy(IHTMLElement2 *This,IHTMLElement *mergeThis);
  void __RPC_STUB IHTMLElement2_mergeAttributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_oncontextmenu_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_oncontextmenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_oncontextmenu_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_oncontextmenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_insertAdjacentElement_Proxy(IHTMLElement2 *This,BSTR where,IHTMLElement *insertedElement,IHTMLElement **inserted);
  void __RPC_STUB IHTMLElement2_insertAdjacentElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_applyElement_Proxy(IHTMLElement2 *This,IHTMLElement *apply,BSTR where,IHTMLElement **applied);
  void __RPC_STUB IHTMLElement2_applyElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_getAdjacentText_Proxy(IHTMLElement2 *This,BSTR where,BSTR *text);
  void __RPC_STUB IHTMLElement2_getAdjacentText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_replaceAdjacentText_Proxy(IHTMLElement2 *This,BSTR where,BSTR newText,BSTR *oldText);
  void __RPC_STUB IHTMLElement2_replaceAdjacentText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_canHaveChildren_Proxy(IHTMLElement2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElement2_get_canHaveChildren_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_addBehavior_Proxy(IHTMLElement2 *This,BSTR bstrUrl,VARIANT *pvarFactory,long *pCookie);
  void __RPC_STUB IHTMLElement2_addBehavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_removeBehavior_Proxy(IHTMLElement2 *This,long cookie,VARIANT_BOOL *pfResult);
  void __RPC_STUB IHTMLElement2_removeBehavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_runtimeStyle_Proxy(IHTMLElement2 *This,IHTMLStyle **p);
  void __RPC_STUB IHTMLElement2_get_runtimeStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_behaviorUrns_Proxy(IHTMLElement2 *This,IDispatch **p);
  void __RPC_STUB IHTMLElement2_get_behaviorUrns_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_tagUrn_Proxy(IHTMLElement2 *This,BSTR v);
  void __RPC_STUB IHTMLElement2_put_tagUrn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_tagUrn_Proxy(IHTMLElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLElement2_get_tagUrn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onbeforeeditfocus_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onbeforeeditfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onbeforeeditfocus_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onbeforeeditfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_readyStateValue_Proxy(IHTMLElement2 *This,long *p);
  void __RPC_STUB IHTMLElement2_get_readyStateValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_getElementsByTagName_Proxy(IHTMLElement2 *This,BSTR v,IHTMLElementCollection **pelColl);
  void __RPC_STUB IHTMLElement2_getElementsByTagName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLElement3_INTERFACE_DEFINED__
#define __IHTMLElement3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLElement3;
  struct IHTMLElement3 : public IDispatch {
  public:
    virtual HRESULT WINAPI mergeAttributes(IHTMLElement *mergeThis,VARIANT *pvarFlags) = 0;
    virtual HRESULT WINAPI get_isMultiLine(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_canHaveHTML(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_onlayoutcomplete(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onlayoutcomplete(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onpage(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onpage(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_inflateBlock(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_inflateBlock(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_onbeforedeactivate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforedeactivate(VARIANT *p) = 0;
    virtual HRESULT WINAPI setActive(void) = 0;
    virtual HRESULT WINAPI put_contentEditable(BSTR v) = 0;
    virtual HRESULT WINAPI get_contentEditable(BSTR *p) = 0;
    virtual HRESULT WINAPI get_isContentEditable(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_hideFocus(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_hideFocus(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_isDisabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_onmove(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmove(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_oncontrolselect(VARIANT v) = 0;
    virtual HRESULT WINAPI get_oncontrolselect(VARIANT *p) = 0;
    virtual HRESULT WINAPI fireEvent(BSTR bstrEventName,VARIANT *pvarEventObject,VARIANT_BOOL *pfCancelled) = 0;
    virtual HRESULT WINAPI put_onresizestart(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onresizestart(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onresizeend(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onresizeend(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmovestart(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmovestart(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmoveend(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmoveend(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmouseenter(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmouseenter(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmouseleave(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmouseleave(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onactivate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onactivate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondeactivate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondeactivate(VARIANT *p) = 0;
    virtual HRESULT WINAPI dragDrop(VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI get_glyphMode(LONG *p) = 0;
  };
  HRESULT WINAPI IHTMLElement3_mergeAttributes_Proxy(IHTMLElement3 *This,IHTMLElement *mergeThis,VARIANT *pvarFlags);
  void __RPC_STUB IHTMLElement3_mergeAttributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_isMultiLine_Proxy(IHTMLElement3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElement3_get_isMultiLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_canHaveHTML_Proxy(IHTMLElement3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElement3_get_canHaveHTML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onlayoutcomplete_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onlayoutcomplete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onlayoutcomplete_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onlayoutcomplete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onpage_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onpage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onpage_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onpage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_inflateBlock_Proxy(IHTMLElement3 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLElement3_put_inflateBlock_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_inflateBlock_Proxy(IHTMLElement3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElement3_get_inflateBlock_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onbeforedeactivate_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onbeforedeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onbeforedeactivate_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onbeforedeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_setActive_Proxy(IHTMLElement3 *This);
  void __RPC_STUB IHTMLElement3_setActive_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_contentEditable_Proxy(IHTMLElement3 *This,BSTR v);
  void __RPC_STUB IHTMLElement3_put_contentEditable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_contentEditable_Proxy(IHTMLElement3 *This,BSTR *p);
  void __RPC_STUB IHTMLElement3_get_contentEditable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_isContentEditable_Proxy(IHTMLElement3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElement3_get_isContentEditable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_hideFocus_Proxy(IHTMLElement3 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLElement3_put_hideFocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_hideFocus_Proxy(IHTMLElement3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElement3_get_hideFocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_disabled_Proxy(IHTMLElement3 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLElement3_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_disabled_Proxy(IHTMLElement3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElement3_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_isDisabled_Proxy(IHTMLElement3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElement3_get_isDisabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onmove_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onmove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onmove_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onmove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_oncontrolselect_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_oncontrolselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_oncontrolselect_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_oncontrolselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_fireEvent_Proxy(IHTMLElement3 *This,BSTR bstrEventName,VARIANT *pvarEventObject,VARIANT_BOOL *pfCancelled);
  void __RPC_STUB IHTMLElement3_fireEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onresizestart_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onresizestart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onresizestart_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onresizestart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onresizeend_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onresizeend_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onresizeend_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onresizeend_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onmovestart_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onmovestart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onmovestart_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onmovestart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onmoveend_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onmoveend_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onmoveend_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onmoveend_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onmouseenter_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onmouseenter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onmouseenter_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onmouseenter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onmouseleave_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onmouseleave_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onmouseleave_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onmouseleave_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onactivate_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onactivate_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_ondeactivate_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_ondeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_ondeactivate_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_ondeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_dragDrop_Proxy(IHTMLElement3 *This,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLElement3_dragDrop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_glyphMode_Proxy(IHTMLElement3 *This,LONG *p);
  void __RPC_STUB IHTMLElement3_get_glyphMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLElement4_INTERFACE_DEFINED__
#define __IHTMLElement4_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLElement4;
  struct IHTMLElement4 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_onmousewheel(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmousewheel(VARIANT *p) = 0;
    virtual HRESULT WINAPI normalize(void) = 0;
    virtual HRESULT WINAPI getAttributeNode(BSTR bstrname,IHTMLDOMAttribute **ppAttribute) = 0;
    virtual HRESULT WINAPI setAttributeNode(IHTMLDOMAttribute *pattr,IHTMLDOMAttribute **ppretAttribute) = 0;
    virtual HRESULT WINAPI removeAttributeNode(IHTMLDOMAttribute *pattr,IHTMLDOMAttribute **ppretAttribute) = 0;
    virtual HRESULT WINAPI put_onbeforeactivate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeactivate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onfocusin(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfocusin(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onfocusout(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfocusout(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLElement4_put_onmousewheel_Proxy(IHTMLElement4 *This,VARIANT v);
  void __RPC_STUB IHTMLElement4_put_onmousewheel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_get_onmousewheel_Proxy(IHTMLElement4 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement4_get_onmousewheel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_normalize_Proxy(IHTMLElement4 *This);
  void __RPC_STUB IHTMLElement4_normalize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_getAttributeNode_Proxy(IHTMLElement4 *This,BSTR bstrname,IHTMLDOMAttribute **ppAttribute);
  void __RPC_STUB IHTMLElement4_getAttributeNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_setAttributeNode_Proxy(IHTMLElement4 *This,IHTMLDOMAttribute *pattr,IHTMLDOMAttribute **ppretAttribute);
  void __RPC_STUB IHTMLElement4_setAttributeNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_removeAttributeNode_Proxy(IHTMLElement4 *This,IHTMLDOMAttribute *pattr,IHTMLDOMAttribute **ppretAttribute);
  void __RPC_STUB IHTMLElement4_removeAttributeNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_put_onbeforeactivate_Proxy(IHTMLElement4 *This,VARIANT v);
  void __RPC_STUB IHTMLElement4_put_onbeforeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_get_onbeforeactivate_Proxy(IHTMLElement4 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement4_get_onbeforeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_put_onfocusin_Proxy(IHTMLElement4 *This,VARIANT v);
  void __RPC_STUB IHTMLElement4_put_onfocusin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_get_onfocusin_Proxy(IHTMLElement4 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement4_get_onfocusin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_put_onfocusout_Proxy(IHTMLElement4 *This,VARIANT v);
  void __RPC_STUB IHTMLElement4_put_onfocusout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_get_onfocusout_Proxy(IHTMLElement4 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement4_get_onfocusout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLElementRender_INTERFACE_DEFINED__
#define __IHTMLElementRender_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLElementRender;
  struct IHTMLElementRender : public IUnknown {
  public:
    virtual HRESULT WINAPI DrawToDC(HDC hDC) = 0;
    virtual HRESULT WINAPI SetDocumentPrinter(BSTR bstrPrinterName,HDC hDC) = 0;
  };
  HRESULT WINAPI IHTMLElementRender_DrawToDC_Proxy(IHTMLElementRender *This,HDC hDC);
  void __RPC_STUB IHTMLElementRender_DrawToDC_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementRender_SetDocumentPrinter_Proxy(IHTMLElementRender *This,BSTR bstrPrinterName,HDC hDC);
  void __RPC_STUB IHTMLElementRender_SetDocumentPrinter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLUniqueName_INTERFACE_DEFINED__
#define __IHTMLUniqueName_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLUniqueName;
  struct IHTMLUniqueName : public IDispatch {
  public:
    virtual HRESULT WINAPI get_uniqueNumber(long *p) = 0;
    virtual HRESULT WINAPI get_uniqueID(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLUniqueName_get_uniqueNumber_Proxy(IHTMLUniqueName *This,long *p);
  void __RPC_STUB IHTMLUniqueName_get_uniqueNumber_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLUniqueName_get_uniqueID_Proxy(IHTMLUniqueName *This,BSTR *p);
  void __RPC_STUB IHTMLUniqueName_get_uniqueID_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDatabinding_INTERFACE_DEFINED__
#define __IHTMLDatabinding_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDatabinding;
  struct IHTMLDatabinding : public IDispatch {
  public:
    virtual HRESULT WINAPI put_dataFld(BSTR v) = 0;
    virtual HRESULT WINAPI get_dataFld(BSTR *p) = 0;
    virtual HRESULT WINAPI put_dataSrc(BSTR v) = 0;
    virtual HRESULT WINAPI get_dataSrc(BSTR *p) = 0;
    virtual HRESULT WINAPI put_dataFormatAs(BSTR v) = 0;
    virtual HRESULT WINAPI get_dataFormatAs(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLDatabinding_put_dataFld_Proxy(IHTMLDatabinding *This,BSTR v);
  void __RPC_STUB IHTMLDatabinding_put_dataFld_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDatabinding_get_dataFld_Proxy(IHTMLDatabinding *This,BSTR *p);
  void __RPC_STUB IHTMLDatabinding_get_dataFld_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDatabinding_put_dataSrc_Proxy(IHTMLDatabinding *This,BSTR v);
  void __RPC_STUB IHTMLDatabinding_put_dataSrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDatabinding_get_dataSrc_Proxy(IHTMLDatabinding *This,BSTR *p);
  void __RPC_STUB IHTMLDatabinding_get_dataSrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDatabinding_put_dataFormatAs_Proxy(IHTMLDatabinding *This,BSTR v);
  void __RPC_STUB IHTMLDatabinding_put_dataFormatAs_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDatabinding_get_dataFormatAs_Proxy(IHTMLDatabinding *This,BSTR *p);
  void __RPC_STUB IHTMLDatabinding_get_dataFormatAs_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDocument_INTERFACE_DEFINED__
#define __IHTMLDocument_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDocument;
  struct IHTMLDocument : public IDispatch {
  public:
    virtual HRESULT WINAPI get_Script(IDispatch **p) = 0;
  };
  HRESULT WINAPI IHTMLDocument_get_Script_Proxy(IHTMLDocument *This,IDispatch **p);
  void __RPC_STUB IHTMLDocument_get_Script_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLElementDefaults_INTERFACE_DEFINED__
#define __IHTMLElementDefaults_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLElementDefaults;
  struct IHTMLElementDefaults : public IDispatch {
  public:
    virtual HRESULT WINAPI get_style(IHTMLStyle **p) = 0;
    virtual HRESULT WINAPI put_tabStop(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_tabStop(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_viewInheritStyle(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_viewInheritStyle(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_viewMasterTab(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_viewMasterTab(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_scrollSegmentX(long v) = 0;
    virtual HRESULT WINAPI get_scrollSegmentX(long *p) = 0;
    virtual HRESULT WINAPI put_scrollSegmentY(long v) = 0;
    virtual HRESULT WINAPI get_scrollSegmentY(long *p) = 0;
    virtual HRESULT WINAPI put_isMultiLine(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_isMultiLine(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_contentEditable(BSTR v) = 0;
    virtual HRESULT WINAPI get_contentEditable(BSTR *p) = 0;
    virtual HRESULT WINAPI put_canHaveHTML(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_canHaveHTML(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI putref_viewLink(IHTMLDocument *v) = 0;
    virtual HRESULT WINAPI get_viewLink(IHTMLDocument **p) = 0;
    virtual HRESULT WINAPI put_frozen(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_frozen(VARIANT_BOOL *p) = 0;
  };
  HRESULT WINAPI IHTMLElementDefaults_get_style_Proxy(IHTMLElementDefaults *This,IHTMLStyle **p);
  void __RPC_STUB IHTMLElementDefaults_get_style_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_put_tabStop_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLElementDefaults_put_tabStop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_tabStop_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElementDefaults_get_tabStop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_put_viewInheritStyle_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLElementDefaults_put_viewInheritStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_viewInheritStyle_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElementDefaults_get_viewInheritStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_put_viewMasterTab_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLElementDefaults_put_viewMasterTab_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_viewMasterTab_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElementDefaults_get_viewMasterTab_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_put_scrollSegmentX_Proxy(IHTMLElementDefaults *This,long v);
  void __RPC_STUB IHTMLElementDefaults_put_scrollSegmentX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_scrollSegmentX_Proxy(IHTMLElementDefaults *This,long *p);
  void __RPC_STUB IHTMLElementDefaults_get_scrollSegmentX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_put_scrollSegmentY_Proxy(IHTMLElementDefaults *This,long v);
  void __RPC_STUB IHTMLElementDefaults_put_scrollSegmentY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_scrollSegmentY_Proxy(IHTMLElementDefaults *This,long *p);
  void __RPC_STUB IHTMLElementDefaults_get_scrollSegmentY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_put_isMultiLine_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLElementDefaults_put_isMultiLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_isMultiLine_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElementDefaults_get_isMultiLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_put_contentEditable_Proxy(IHTMLElementDefaults *This,BSTR v);
  void __RPC_STUB IHTMLElementDefaults_put_contentEditable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_contentEditable_Proxy(IHTMLElementDefaults *This,BSTR *p);
  void __RPC_STUB IHTMLElementDefaults_get_contentEditable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_put_canHaveHTML_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLElementDefaults_put_canHaveHTML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_canHaveHTML_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElementDefaults_get_canHaveHTML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_putref_viewLink_Proxy(IHTMLElementDefaults *This,IHTMLDocument *v);
  void __RPC_STUB IHTMLElementDefaults_putref_viewLink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_viewLink_Proxy(IHTMLElementDefaults *This,IHTMLDocument **p);
  void __RPC_STUB IHTMLElementDefaults_get_viewLink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_put_frozen_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLElementDefaults_put_frozen_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_frozen_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElementDefaults_get_frozen_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLDefaults_DISPINTERFACE_DEFINED__
#define __DispHTMLDefaults_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDefaults;
  struct DispHTMLDefaults : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLDefaults;
#ifdef __cplusplus
  class HTMLDefaults;
#endif

#ifndef __IHTCDefaultDispatch_INTERFACE_DEFINED__
#define __IHTCDefaultDispatch_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTCDefaultDispatch;
  struct IHTCDefaultDispatch : public IDispatch {
  public:
    virtual HRESULT WINAPI get_element(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI createEventObject(IHTMLEventObj **eventObj) = 0;
    virtual HRESULT WINAPI get_defaults(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_document(IDispatch **p) = 0;
  };
  HRESULT WINAPI IHTCDefaultDispatch_get_element_Proxy(IHTCDefaultDispatch *This,IHTMLElement **p);
  void __RPC_STUB IHTCDefaultDispatch_get_element_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTCDefaultDispatch_createEventObject_Proxy(IHTCDefaultDispatch *This,IHTMLEventObj **eventObj);
  void __RPC_STUB IHTCDefaultDispatch_createEventObject_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTCDefaultDispatch_get_defaults_Proxy(IHTCDefaultDispatch *This,IDispatch **p);
  void __RPC_STUB IHTCDefaultDispatch_get_defaults_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTCDefaultDispatch_get_document_Proxy(IHTCDefaultDispatch *This,IDispatch **p);
  void __RPC_STUB IHTCDefaultDispatch_get_document_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTCPropertyBehavior_INTERFACE_DEFINED__
#define __IHTCPropertyBehavior_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTCPropertyBehavior;
  struct IHTCPropertyBehavior : public IDispatch {
  public:
    virtual HRESULT WINAPI fireChange(void) = 0;
    virtual HRESULT WINAPI put_value(VARIANT v) = 0;
    virtual HRESULT WINAPI get_value(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTCPropertyBehavior_fireChange_Proxy(IHTCPropertyBehavior *This);
  void __RPC_STUB IHTCPropertyBehavior_fireChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTCPropertyBehavior_put_value_Proxy(IHTCPropertyBehavior *This,VARIANT v);
  void __RPC_STUB IHTCPropertyBehavior_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTCPropertyBehavior_get_value_Proxy(IHTCPropertyBehavior *This,VARIANT *p);
  void __RPC_STUB IHTCPropertyBehavior_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTCMethodBehavior_INTERFACE_DEFINED__
#define __IHTCMethodBehavior_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTCMethodBehavior;
  struct IHTCMethodBehavior : public IDispatch {
  };
#endif

#ifndef __IHTCEventBehavior_INTERFACE_DEFINED__
#define __IHTCEventBehavior_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTCEventBehavior;
  struct IHTCEventBehavior : public IDispatch {
  public:
    virtual HRESULT WINAPI fire(IHTMLEventObj *pvar) = 0;
  };
  HRESULT WINAPI IHTCEventBehavior_fire_Proxy(IHTCEventBehavior *This,IHTMLEventObj *pvar);
  void __RPC_STUB IHTCEventBehavior_fire_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTCAttachBehavior_INTERFACE_DEFINED__
#define __IHTCAttachBehavior_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTCAttachBehavior;
  struct IHTCAttachBehavior : public IDispatch {
  public:
    virtual HRESULT WINAPI fireEvent(IDispatch *evt) = 0;
    virtual HRESULT WINAPI detachEvent(void) = 0;
  };
  HRESULT WINAPI IHTCAttachBehavior_fireEvent_Proxy(IHTCAttachBehavior *This,IDispatch *evt);
  void __RPC_STUB IHTCAttachBehavior_fireEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTCAttachBehavior_detachEvent_Proxy(IHTCAttachBehavior *This);
  void __RPC_STUB IHTCAttachBehavior_detachEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTCAttachBehavior2_INTERFACE_DEFINED__
#define __IHTCAttachBehavior2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTCAttachBehavior2;
  struct IHTCAttachBehavior2 : public IDispatch {
  public:
    virtual HRESULT WINAPI fireEvent(VARIANT evt) = 0;
  };
  HRESULT WINAPI IHTCAttachBehavior2_fireEvent_Proxy(IHTCAttachBehavior2 *This,VARIANT evt);
  void __RPC_STUB IHTCAttachBehavior2_fireEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTCDescBehavior_INTERFACE_DEFINED__
#define __IHTCDescBehavior_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTCDescBehavior;
  struct IHTCDescBehavior : public IDispatch {
  public:
    virtual HRESULT WINAPI get_urn(BSTR *p) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTCDescBehavior_get_urn_Proxy(IHTCDescBehavior *This,BSTR *p);
  void __RPC_STUB IHTCDescBehavior_get_urn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTCDescBehavior_get_name_Proxy(IHTCDescBehavior *This,BSTR *p);
  void __RPC_STUB IHTCDescBehavior_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTCDefaultDispatch_DISPINTERFACE_DEFINED__
#define __DispHTCDefaultDispatch_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTCDefaultDispatch;
  struct DispHTCDefaultDispatch : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTCDefaultDispatch;
#ifdef __cplusplus
  class HTCDefaultDispatch;
#endif

#ifndef __DispHTCPropertyBehavior_DISPINTERFACE_DEFINED__
#define __DispHTCPropertyBehavior_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTCPropertyBehavior;
  struct DispHTCPropertyBehavior : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTCPropertyBehavior;
#ifdef __cplusplus
  class HTCPropertyBehavior;
#endif

#ifndef __DispHTCMethodBehavior_DISPINTERFACE_DEFINED__
#define __DispHTCMethodBehavior_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTCMethodBehavior;
  struct DispHTCMethodBehavior : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTCMethodBehavior;
#ifdef __cplusplus
  class HTCMethodBehavior;
#endif

#ifndef __DispHTCEventBehavior_DISPINTERFACE_DEFINED__
#define __DispHTCEventBehavior_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTCEventBehavior;
  struct DispHTCEventBehavior : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTCEventBehavior;
#ifdef __cplusplus
  class HTCEventBehavior;
#endif

#ifndef __DispHTCAttachBehavior_DISPINTERFACE_DEFINED__
#define __DispHTCAttachBehavior_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTCAttachBehavior;
  struct DispHTCAttachBehavior : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTCAttachBehavior;
#ifdef __cplusplus
  class HTCAttachBehavior;
#endif

#ifndef __DispHTCDescBehavior_DISPINTERFACE_DEFINED__
#define __DispHTCDescBehavior_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTCDescBehavior;
  struct DispHTCDescBehavior : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTCDescBehavior;
#ifdef __cplusplus
  class HTCDescBehavior;
#endif

#ifndef __IHTMLUrnCollection_INTERFACE_DEFINED__
#define __IHTMLUrnCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLUrnCollection;
  struct IHTMLUrnCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI item(long index,BSTR *ppUrn) = 0;
  };
  HRESULT WINAPI IHTMLUrnCollection_get_length_Proxy(IHTMLUrnCollection *This,long *p);
  void __RPC_STUB IHTMLUrnCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLUrnCollection_item_Proxy(IHTMLUrnCollection *This,long index,BSTR *ppUrn);
  void __RPC_STUB IHTMLUrnCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif
  EXTERN_C const CLSID CLSID_HTMLUrnCollection;
#ifdef __cplusplus
  class HTMLUrnCollection;
#endif

#ifndef __IHTMLGenericElement_INTERFACE_DEFINED__
#define __IHTMLGenericElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLGenericElement;
  struct IHTMLGenericElement : public IDispatch {
  public:
    virtual HRESULT WINAPI get_recordset(IDispatch **p) = 0;
    virtual HRESULT WINAPI namedRecordset(BSTR dataMember,VARIANT *hierarchy,IDispatch **ppRecordset) = 0;
  };
  HRESULT WINAPI IHTMLGenericElement_get_recordset_Proxy(IHTMLGenericElement *This,IDispatch **p);
  void __RPC_STUB IHTMLGenericElement_get_recordset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLGenericElement_namedRecordset_Proxy(IHTMLGenericElement *This,BSTR dataMember,VARIANT *hierarchy,IDispatch **ppRecordset);
  void __RPC_STUB IHTMLGenericElement_namedRecordset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLGenericElement_DISPINTERFACE_DEFINED__
#define __DispHTMLGenericElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLGenericElement;
  struct DispHTMLGenericElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLGenericElement;
#ifdef __cplusplus
  class HTMLGenericElement;
#endif

#ifndef __IHTMLStyleSheetRule_INTERFACE_DEFINED__
#define __IHTMLStyleSheetRule_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyleSheetRule;
  struct IHTMLStyleSheetRule : public IDispatch {
  public:
    virtual HRESULT WINAPI put_selectorText(BSTR v) = 0;
    virtual HRESULT WINAPI get_selectorText(BSTR *p) = 0;
    virtual HRESULT WINAPI get_style(IHTMLRuleStyle **p) = 0;
    virtual HRESULT WINAPI get_readOnly(VARIANT_BOOL *p) = 0;
  };
  HRESULT WINAPI IHTMLStyleSheetRule_put_selectorText_Proxy(IHTMLStyleSheetRule *This,BSTR v);
  void __RPC_STUB IHTMLStyleSheetRule_put_selectorText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheetRule_get_selectorText_Proxy(IHTMLStyleSheetRule *This,BSTR *p);
  void __RPC_STUB IHTMLStyleSheetRule_get_selectorText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheetRule_get_style_Proxy(IHTMLStyleSheetRule *This,IHTMLRuleStyle **p);
  void __RPC_STUB IHTMLStyleSheetRule_get_style_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheetRule_get_readOnly_Proxy(IHTMLStyleSheetRule *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLStyleSheetRule_get_readOnly_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLStyleSheetRulesCollection_INTERFACE_DEFINED__
#define __IHTMLStyleSheetRulesCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyleSheetRulesCollection;
  struct IHTMLStyleSheetRulesCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI item(long index,IHTMLStyleSheetRule **ppHTMLStyleSheetRule) = 0;
  };
  HRESULT WINAPI IHTMLStyleSheetRulesCollection_get_length_Proxy(IHTMLStyleSheetRulesCollection *This,long *p);
  void __RPC_STUB IHTMLStyleSheetRulesCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheetRulesCollection_item_Proxy(IHTMLStyleSheetRulesCollection *This,long index,IHTMLStyleSheetRule **ppHTMLStyleSheetRule);
  void __RPC_STUB IHTMLStyleSheetRulesCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif
  EXTERN_C const CLSID CLSID_HTMLStyleSheetRule;
#ifdef __cplusplus
  class HTMLStyleSheetRule;
#endif
  EXTERN_C const CLSID CLSID_HTMLStyleSheetRulesCollection;
#ifdef __cplusplus
  class HTMLStyleSheetRulesCollection;
#endif

#ifndef __IHTMLStyleSheetPage_INTERFACE_DEFINED__
#define __IHTMLStyleSheetPage_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyleSheetPage;
  struct IHTMLStyleSheetPage : public IDispatch {
  public:
    virtual HRESULT WINAPI get_selector(BSTR *p) = 0;
    virtual HRESULT WINAPI get_pseudoClass(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLStyleSheetPage_get_selector_Proxy(IHTMLStyleSheetPage *This,BSTR *p);
  void __RPC_STUB IHTMLStyleSheetPage_get_selector_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheetPage_get_pseudoClass_Proxy(IHTMLStyleSheetPage *This,BSTR *p);
  void __RPC_STUB IHTMLStyleSheetPage_get_pseudoClass_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLStyleSheetPagesCollection_INTERFACE_DEFINED__
#define __IHTMLStyleSheetPagesCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyleSheetPagesCollection;
  struct IHTMLStyleSheetPagesCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI item(long index,IHTMLStyleSheetPage **ppHTMLStyleSheetPage) = 0;
  };
  HRESULT WINAPI IHTMLStyleSheetPagesCollection_get_length_Proxy(IHTMLStyleSheetPagesCollection *This,long *p);
  void __RPC_STUB IHTMLStyleSheetPagesCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheetPagesCollection_item_Proxy(IHTMLStyleSheetPagesCollection *This,long index,IHTMLStyleSheetPage **ppHTMLStyleSheetPage);
  void __RPC_STUB IHTMLStyleSheetPagesCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif
  EXTERN_C const CLSID CLSID_HTMLStyleSheetPage;
#ifdef __cplusplus
  class HTMLStyleSheetPage;
#endif
  EXTERN_C const CLSID CLSID_HTMLStyleSheetPagesCollection;
#ifdef __cplusplus
  class HTMLStyleSheetPagesCollection;
#endif

#ifndef __IHTMLStyleSheetsCollection_INTERFACE_DEFINED__
#define __IHTMLStyleSheetsCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyleSheetsCollection;
  struct IHTMLStyleSheetsCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(VARIANT *pvarIndex,VARIANT *pvarResult) = 0;
  };
  HRESULT WINAPI IHTMLStyleSheetsCollection_get_length_Proxy(IHTMLStyleSheetsCollection *This,long *p);
  void __RPC_STUB IHTMLStyleSheetsCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheetsCollection_get__newEnum_Proxy(IHTMLStyleSheetsCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLStyleSheetsCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheetsCollection_item_Proxy(IHTMLStyleSheetsCollection *This,VARIANT *pvarIndex,VARIANT *pvarResult);
  void __RPC_STUB IHTMLStyleSheetsCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLStyleSheet_INTERFACE_DEFINED__
#define __IHTMLStyleSheet_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyleSheet;
  struct IHTMLStyleSheet : public IDispatch {
  public:
    virtual HRESULT WINAPI put_title(BSTR v) = 0;
    virtual HRESULT WINAPI get_title(BSTR *p) = 0;
    virtual HRESULT WINAPI get_parentStyleSheet(IHTMLStyleSheet **p) = 0;
    virtual HRESULT WINAPI get_owningElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_readOnly(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_imports(IHTMLStyleSheetsCollection **p) = 0;
    virtual HRESULT WINAPI put_href(BSTR v) = 0;
    virtual HRESULT WINAPI get_href(BSTR *p) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI get_id(BSTR *p) = 0;
    virtual HRESULT WINAPI addImport(BSTR bstrURL,long lIndex,long *plIndex) = 0;
    virtual HRESULT WINAPI addRule(BSTR bstrSelector,BSTR bstrStyle,long lIndex,long *plNewIndex) = 0;
    virtual HRESULT WINAPI removeImport(long lIndex) = 0;
    virtual HRESULT WINAPI removeRule(long lIndex) = 0;
    virtual HRESULT WINAPI put_media(BSTR v) = 0;
    virtual HRESULT WINAPI get_media(BSTR *p) = 0;
    virtual HRESULT WINAPI put_cssText(BSTR v) = 0;
    virtual HRESULT WINAPI get_cssText(BSTR *p) = 0;
    virtual HRESULT WINAPI get_rules(IHTMLStyleSheetRulesCollection **p) = 0;
  };
  HRESULT WINAPI IHTMLStyleSheet_put_title_Proxy(IHTMLStyleSheet *This,BSTR v);
  void __RPC_STUB IHTMLStyleSheet_put_title_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_title_Proxy(IHTMLStyleSheet *This,BSTR *p);
  void __RPC_STUB IHTMLStyleSheet_get_title_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_parentStyleSheet_Proxy(IHTMLStyleSheet *This,IHTMLStyleSheet **p);
  void __RPC_STUB IHTMLStyleSheet_get_parentStyleSheet_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_owningElement_Proxy(IHTMLStyleSheet *This,IHTMLElement **p);
  void __RPC_STUB IHTMLStyleSheet_get_owningElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_put_disabled_Proxy(IHTMLStyleSheet *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLStyleSheet_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_disabled_Proxy(IHTMLStyleSheet *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLStyleSheet_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_readOnly_Proxy(IHTMLStyleSheet *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLStyleSheet_get_readOnly_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_imports_Proxy(IHTMLStyleSheet *This,IHTMLStyleSheetsCollection **p);
  void __RPC_STUB IHTMLStyleSheet_get_imports_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_put_href_Proxy(IHTMLStyleSheet *This,BSTR v);
  void __RPC_STUB IHTMLStyleSheet_put_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_href_Proxy(IHTMLStyleSheet *This,BSTR *p);
  void __RPC_STUB IHTMLStyleSheet_get_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_type_Proxy(IHTMLStyleSheet *This,BSTR *p);
  void __RPC_STUB IHTMLStyleSheet_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_id_Proxy(IHTMLStyleSheet *This,BSTR *p);
  void __RPC_STUB IHTMLStyleSheet_get_id_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_addImport_Proxy(IHTMLStyleSheet *This,BSTR bstrURL,long lIndex,long *plIndex);
  void __RPC_STUB IHTMLStyleSheet_addImport_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_addRule_Proxy(IHTMLStyleSheet *This,BSTR bstrSelector,BSTR bstrStyle,long lIndex,long *plNewIndex);
  void __RPC_STUB IHTMLStyleSheet_addRule_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_removeImport_Proxy(IHTMLStyleSheet *This,long lIndex);
  void __RPC_STUB IHTMLStyleSheet_removeImport_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_removeRule_Proxy(IHTMLStyleSheet *This,long lIndex);
  void __RPC_STUB IHTMLStyleSheet_removeRule_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_put_media_Proxy(IHTMLStyleSheet *This,BSTR v);
  void __RPC_STUB IHTMLStyleSheet_put_media_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_media_Proxy(IHTMLStyleSheet *This,BSTR *p);
  void __RPC_STUB IHTMLStyleSheet_get_media_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_put_cssText_Proxy(IHTMLStyleSheet *This,BSTR v);
  void __RPC_STUB IHTMLStyleSheet_put_cssText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_cssText_Proxy(IHTMLStyleSheet *This,BSTR *p);
  void __RPC_STUB IHTMLStyleSheet_get_cssText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_rules_Proxy(IHTMLStyleSheet *This,IHTMLStyleSheetRulesCollection **p);
  void __RPC_STUB IHTMLStyleSheet_get_rules_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLStyleSheet2_INTERFACE_DEFINED__
#define __IHTMLStyleSheet2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyleSheet2;
  struct IHTMLStyleSheet2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_pages(IHTMLStyleSheetPagesCollection **p) = 0;
    virtual HRESULT WINAPI addPageRule(BSTR bstrSelector,BSTR bstrStyle,long lIndex,long *plNewIndex) = 0;
  };
  HRESULT WINAPI IHTMLStyleSheet2_get_pages_Proxy(IHTMLStyleSheet2 *This,IHTMLStyleSheetPagesCollection **p);
  void __RPC_STUB IHTMLStyleSheet2_get_pages_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet2_addPageRule_Proxy(IHTMLStyleSheet2 *This,BSTR bstrSelector,BSTR bstrStyle,long lIndex,long *plNewIndex);
  void __RPC_STUB IHTMLStyleSheet2_addPageRule_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLStyleSheet_DISPINTERFACE_DEFINED__
#define __DispHTMLStyleSheet_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLStyleSheet;
  struct DispHTMLStyleSheet : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLStyleSheet;
#ifdef __cplusplus
  class HTMLStyleSheet;
#endif
  EXTERN_C const CLSID CLSID_HTMLStyleSheetsCollection;
#ifdef __cplusplus
  class HTMLStyleSheetsCollection;
#endif

#ifndef __HTMLLinkElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLLinkElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLLinkElementEvents2;
  struct HTMLLinkElementEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLLinkElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLLinkElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLLinkElementEvents;
  struct HTMLLinkElementEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLLinkElement_INTERFACE_DEFINED__
#define __IHTMLLinkElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLLinkElement;
  struct IHTMLLinkElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_href(BSTR v) = 0;
    virtual HRESULT WINAPI get_href(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rel(BSTR v) = 0;
    virtual HRESULT WINAPI get_rel(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rev(BSTR v) = 0;
    virtual HRESULT WINAPI get_rev(BSTR *p) = 0;
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI get_readyState(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onreadystatechange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onreadystatechange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onerror(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerror(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_styleSheet(IHTMLStyleSheet **p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_media(BSTR v) = 0;
    virtual HRESULT WINAPI get_media(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLLinkElement_put_href_Proxy(IHTMLLinkElement *This,BSTR v);
  void __RPC_STUB IHTMLLinkElement_put_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_href_Proxy(IHTMLLinkElement *This,BSTR *p);
  void __RPC_STUB IHTMLLinkElement_get_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_put_rel_Proxy(IHTMLLinkElement *This,BSTR v);
  void __RPC_STUB IHTMLLinkElement_put_rel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_rel_Proxy(IHTMLLinkElement *This,BSTR *p);
  void __RPC_STUB IHTMLLinkElement_get_rel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_put_rev_Proxy(IHTMLLinkElement *This,BSTR v);
  void __RPC_STUB IHTMLLinkElement_put_rev_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_rev_Proxy(IHTMLLinkElement *This,BSTR *p);
  void __RPC_STUB IHTMLLinkElement_get_rev_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_put_type_Proxy(IHTMLLinkElement *This,BSTR v);
  void __RPC_STUB IHTMLLinkElement_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_type_Proxy(IHTMLLinkElement *This,BSTR *p);
  void __RPC_STUB IHTMLLinkElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_readyState_Proxy(IHTMLLinkElement *This,BSTR *p);
  void __RPC_STUB IHTMLLinkElement_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_put_onreadystatechange_Proxy(IHTMLLinkElement *This,VARIANT v);
  void __RPC_STUB IHTMLLinkElement_put_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_onreadystatechange_Proxy(IHTMLLinkElement *This,VARIANT *p);
  void __RPC_STUB IHTMLLinkElement_get_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_put_onload_Proxy(IHTMLLinkElement *This,VARIANT v);
  void __RPC_STUB IHTMLLinkElement_put_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_onload_Proxy(IHTMLLinkElement *This,VARIANT *p);
  void __RPC_STUB IHTMLLinkElement_get_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_put_onerror_Proxy(IHTMLLinkElement *This,VARIANT v);
  void __RPC_STUB IHTMLLinkElement_put_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_onerror_Proxy(IHTMLLinkElement *This,VARIANT *p);
  void __RPC_STUB IHTMLLinkElement_get_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_styleSheet_Proxy(IHTMLLinkElement *This,IHTMLStyleSheet **p);
  void __RPC_STUB IHTMLLinkElement_get_styleSheet_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_put_disabled_Proxy(IHTMLLinkElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLLinkElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_disabled_Proxy(IHTMLLinkElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLLinkElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_put_media_Proxy(IHTMLLinkElement *This,BSTR v);
  void __RPC_STUB IHTMLLinkElement_put_media_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_media_Proxy(IHTMLLinkElement *This,BSTR *p);
  void __RPC_STUB IHTMLLinkElement_get_media_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLLinkElement2_INTERFACE_DEFINED__
#define __IHTMLLinkElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLLinkElement2;
  struct IHTMLLinkElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_target(BSTR v) = 0;
    virtual HRESULT WINAPI get_target(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLLinkElement2_put_target_Proxy(IHTMLLinkElement2 *This,BSTR v);
  void __RPC_STUB IHTMLLinkElement2_put_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement2_get_target_Proxy(IHTMLLinkElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLLinkElement2_get_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLLinkElement3_INTERFACE_DEFINED__
#define __IHTMLLinkElement3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLLinkElement3;
  struct IHTMLLinkElement3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_charset(BSTR v) = 0;
    virtual HRESULT WINAPI get_charset(BSTR *p) = 0;
    virtual HRESULT WINAPI put_hreflang(BSTR v) = 0;
    virtual HRESULT WINAPI get_hreflang(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLLinkElement3_put_charset_Proxy(IHTMLLinkElement3 *This,BSTR v);
  void __RPC_STUB IHTMLLinkElement3_put_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement3_get_charset_Proxy(IHTMLLinkElement3 *This,BSTR *p);
  void __RPC_STUB IHTMLLinkElement3_get_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement3_put_hreflang_Proxy(IHTMLLinkElement3 *This,BSTR v);
  void __RPC_STUB IHTMLLinkElement3_put_hreflang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement3_get_hreflang_Proxy(IHTMLLinkElement3 *This,BSTR *p);
  void __RPC_STUB IHTMLLinkElement3_get_hreflang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLLinkElement_DISPINTERFACE_DEFINED__
#define __DispHTMLLinkElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLLinkElement;
  struct DispHTMLLinkElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLLinkElement;
#ifdef __cplusplus
  class HTMLLinkElement;
#endif

#ifndef __IHTMLTxtRange_INTERFACE_DEFINED__
#define __IHTMLTxtRange_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTxtRange;
  struct IHTMLTxtRange : public IDispatch {
  public:
    virtual HRESULT WINAPI get_htmlText(BSTR *p) = 0;
    virtual HRESULT WINAPI put_text(BSTR v) = 0;
    virtual HRESULT WINAPI get_text(BSTR *p) = 0;
    virtual HRESULT WINAPI parentElement(IHTMLElement **parent) = 0;
    virtual HRESULT WINAPI duplicate(IHTMLTxtRange **Duplicate) = 0;
    virtual HRESULT WINAPI inRange(IHTMLTxtRange *Range,VARIANT_BOOL *InRange) = 0;
    virtual HRESULT WINAPI isEqual(IHTMLTxtRange *Range,VARIANT_BOOL *IsEqual) = 0;
    virtual HRESULT WINAPI scrollIntoView(VARIANT_BOOL fStart = -1) = 0;
    virtual HRESULT WINAPI collapse(VARIANT_BOOL Start = -1) = 0;
    virtual HRESULT WINAPI expand(BSTR Unit,VARIANT_BOOL *Success) = 0;
    virtual HRESULT WINAPI move(BSTR Unit,long Count,long *ActualCount) = 0;
    virtual HRESULT WINAPI moveStart(BSTR Unit,long Count,long *ActualCount) = 0;
    virtual HRESULT WINAPI moveEnd(BSTR Unit,long Count,long *ActualCount) = 0;
    virtual HRESULT WINAPI select(void) = 0;
    virtual HRESULT WINAPI pasteHTML(BSTR html) = 0;
    virtual HRESULT WINAPI moveToElementText(IHTMLElement *element) = 0;
    virtual HRESULT WINAPI setEndPoint(BSTR how,IHTMLTxtRange *SourceRange) = 0;
    virtual HRESULT WINAPI compareEndPoints(BSTR how,IHTMLTxtRange *SourceRange,long *ret) = 0;
    virtual HRESULT WINAPI findText(BSTR String,long count,long Flags,VARIANT_BOOL *Success) = 0;
    virtual HRESULT WINAPI moveToPoint(long x,long y) = 0;
    virtual HRESULT WINAPI getBookmark(BSTR *Boolmark) = 0;
    virtual HRESULT WINAPI moveToBookmark(BSTR Bookmark,VARIANT_BOOL *Success) = 0;
    virtual HRESULT WINAPI queryCommandSupported(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandEnabled(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandState(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandIndeterm(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandText(BSTR cmdID,BSTR *pcmdText) = 0;
    virtual HRESULT WINAPI queryCommandValue(BSTR cmdID,VARIANT *pcmdValue) = 0;
    virtual HRESULT WINAPI execCommand(BSTR cmdID,VARIANT_BOOL showUI,VARIANT value,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI execCommandShowHelp(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
  };
  HRESULT WINAPI IHTMLTxtRange_get_htmlText_Proxy(IHTMLTxtRange *This,BSTR *p);
  void __RPC_STUB IHTMLTxtRange_get_htmlText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_put_text_Proxy(IHTMLTxtRange *This,BSTR v);
  void __RPC_STUB IHTMLTxtRange_put_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_get_text_Proxy(IHTMLTxtRange *This,BSTR *p);
  void __RPC_STUB IHTMLTxtRange_get_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_parentElement_Proxy(IHTMLTxtRange *This,IHTMLElement **parent);
  void __RPC_STUB IHTMLTxtRange_parentElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_duplicate_Proxy(IHTMLTxtRange *This,IHTMLTxtRange **Duplicate);
  void __RPC_STUB IHTMLTxtRange_duplicate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_inRange_Proxy(IHTMLTxtRange *This,IHTMLTxtRange *Range,VARIANT_BOOL *InRange);
  void __RPC_STUB IHTMLTxtRange_inRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_isEqual_Proxy(IHTMLTxtRange *This,IHTMLTxtRange *Range,VARIANT_BOOL *IsEqual);
  void __RPC_STUB IHTMLTxtRange_isEqual_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_scrollIntoView_Proxy(IHTMLTxtRange *This,VARIANT_BOOL fStart);
  void __RPC_STUB IHTMLTxtRange_scrollIntoView_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_collapse_Proxy(IHTMLTxtRange *This,VARIANT_BOOL Start);
  void __RPC_STUB IHTMLTxtRange_collapse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_expand_Proxy(IHTMLTxtRange *This,BSTR Unit,VARIANT_BOOL *Success);
  void __RPC_STUB IHTMLTxtRange_expand_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_move_Proxy(IHTMLTxtRange *This,BSTR Unit,long Count,long *ActualCount);
  void __RPC_STUB IHTMLTxtRange_move_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_moveStart_Proxy(IHTMLTxtRange *This,BSTR Unit,long Count,long *ActualCount);
  void __RPC_STUB IHTMLTxtRange_moveStart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_moveEnd_Proxy(IHTMLTxtRange *This,BSTR Unit,long Count,long *ActualCount);
  void __RPC_STUB IHTMLTxtRange_moveEnd_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_select_Proxy(IHTMLTxtRange *This);
  void __RPC_STUB IHTMLTxtRange_select_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_pasteHTML_Proxy(IHTMLTxtRange *This,BSTR html);
  void __RPC_STUB IHTMLTxtRange_pasteHTML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_moveToElementText_Proxy(IHTMLTxtRange *This,IHTMLElement *element);
  void __RPC_STUB IHTMLTxtRange_moveToElementText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_setEndPoint_Proxy(IHTMLTxtRange *This,BSTR how,IHTMLTxtRange *SourceRange);
  void __RPC_STUB IHTMLTxtRange_setEndPoint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_compareEndPoints_Proxy(IHTMLTxtRange *This,BSTR how,IHTMLTxtRange *SourceRange,long *ret);
  void __RPC_STUB IHTMLTxtRange_compareEndPoints_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_findText_Proxy(IHTMLTxtRange *This,BSTR String,long count,long Flags,VARIANT_BOOL *Success);
  void __RPC_STUB IHTMLTxtRange_findText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_moveToPoint_Proxy(IHTMLTxtRange *This,long x,long y);
  void __RPC_STUB IHTMLTxtRange_moveToPoint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_getBookmark_Proxy(IHTMLTxtRange *This,BSTR *Boolmark);
  void __RPC_STUB IHTMLTxtRange_getBookmark_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_moveToBookmark_Proxy(IHTMLTxtRange *This,BSTR Bookmark,VARIANT_BOOL *Success);
  void __RPC_STUB IHTMLTxtRange_moveToBookmark_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_queryCommandSupported_Proxy(IHTMLTxtRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLTxtRange_queryCommandSupported_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_queryCommandEnabled_Proxy(IHTMLTxtRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLTxtRange_queryCommandEnabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_queryCommandState_Proxy(IHTMLTxtRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLTxtRange_queryCommandState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_queryCommandIndeterm_Proxy(IHTMLTxtRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLTxtRange_queryCommandIndeterm_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_queryCommandText_Proxy(IHTMLTxtRange *This,BSTR cmdID,BSTR *pcmdText);
  void __RPC_STUB IHTMLTxtRange_queryCommandText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_queryCommandValue_Proxy(IHTMLTxtRange *This,BSTR cmdID,VARIANT *pcmdValue);
  void __RPC_STUB IHTMLTxtRange_queryCommandValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_execCommand_Proxy(IHTMLTxtRange *This,BSTR cmdID,VARIANT_BOOL showUI,VARIANT value,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLTxtRange_execCommand_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_execCommandShowHelp_Proxy(IHTMLTxtRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLTxtRange_execCommandShowHelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTextRangeMetrics_INTERFACE_DEFINED__
#define __IHTMLTextRangeMetrics_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTextRangeMetrics;
  struct IHTMLTextRangeMetrics : public IDispatch {
  public:
    virtual HRESULT WINAPI get_offsetTop(long *p) = 0;
    virtual HRESULT WINAPI get_offsetLeft(long *p) = 0;
    virtual HRESULT WINAPI get_boundingTop(long *p) = 0;
    virtual HRESULT WINAPI get_boundingLeft(long *p) = 0;
    virtual HRESULT WINAPI get_boundingWidth(long *p) = 0;
    virtual HRESULT WINAPI get_boundingHeight(long *p) = 0;
  };
  HRESULT WINAPI IHTMLTextRangeMetrics_get_offsetTop_Proxy(IHTMLTextRangeMetrics *This,long *p);
  void __RPC_STUB IHTMLTextRangeMetrics_get_offsetTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextRangeMetrics_get_offsetLeft_Proxy(IHTMLTextRangeMetrics *This,long *p);
  void __RPC_STUB IHTMLTextRangeMetrics_get_offsetLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextRangeMetrics_get_boundingTop_Proxy(IHTMLTextRangeMetrics *This,long *p);
  void __RPC_STUB IHTMLTextRangeMetrics_get_boundingTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextRangeMetrics_get_boundingLeft_Proxy(IHTMLTextRangeMetrics *This,long *p);
  void __RPC_STUB IHTMLTextRangeMetrics_get_boundingLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextRangeMetrics_get_boundingWidth_Proxy(IHTMLTextRangeMetrics *This,long *p);
  void __RPC_STUB IHTMLTextRangeMetrics_get_boundingWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextRangeMetrics_get_boundingHeight_Proxy(IHTMLTextRangeMetrics *This,long *p);
  void __RPC_STUB IHTMLTextRangeMetrics_get_boundingHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTextRangeMetrics2_INTERFACE_DEFINED__
#define __IHTMLTextRangeMetrics2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTextRangeMetrics2;
  struct IHTMLTextRangeMetrics2 : public IDispatch {
  public:
    virtual HRESULT WINAPI getClientRects(IHTMLRectCollection **pRectCol) = 0;
    virtual HRESULT WINAPI getBoundingClientRect(IHTMLRect **pRect) = 0;
  };
  HRESULT WINAPI IHTMLTextRangeMetrics2_getClientRects_Proxy(IHTMLTextRangeMetrics2 *This,IHTMLRectCollection **pRectCol);
  void __RPC_STUB IHTMLTextRangeMetrics2_getClientRects_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextRangeMetrics2_getBoundingClientRect_Proxy(IHTMLTextRangeMetrics2 *This,IHTMLRect **pRect);
  void __RPC_STUB IHTMLTextRangeMetrics2_getBoundingClientRect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTxtRangeCollection_INTERFACE_DEFINED__
#define __IHTMLTxtRangeCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTxtRangeCollection;
  struct IHTMLTxtRangeCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(VARIANT *pvarIndex,VARIANT *pvarResult) = 0;
  };
  HRESULT WINAPI IHTMLTxtRangeCollection_get_length_Proxy(IHTMLTxtRangeCollection *This,long *p);
  void __RPC_STUB IHTMLTxtRangeCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRangeCollection_get__newEnum_Proxy(IHTMLTxtRangeCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLTxtRangeCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRangeCollection_item_Proxy(IHTMLTxtRangeCollection *This,VARIANT *pvarIndex,VARIANT *pvarResult);
  void __RPC_STUB IHTMLTxtRangeCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __HTMLFormElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLFormElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLFormElementEvents2;
  struct HTMLFormElementEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLFormElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLFormElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLFormElementEvents;
  struct HTMLFormElementEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLFormElement_INTERFACE_DEFINED__
#define __IHTMLFormElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFormElement;
  struct IHTMLFormElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_action(BSTR v) = 0;
    virtual HRESULT WINAPI get_action(BSTR *p) = 0;
    virtual HRESULT WINAPI put_dir(BSTR v) = 0;
    virtual HRESULT WINAPI get_dir(BSTR *p) = 0;
    virtual HRESULT WINAPI put_encoding(BSTR v) = 0;
    virtual HRESULT WINAPI get_encoding(BSTR *p) = 0;
    virtual HRESULT WINAPI put_method(BSTR v) = 0;
    virtual HRESULT WINAPI get_method(BSTR *p) = 0;
    virtual HRESULT WINAPI get_elements(IDispatch **p) = 0;
    virtual HRESULT WINAPI put_target(BSTR v) = 0;
    virtual HRESULT WINAPI get_target(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onsubmit(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onsubmit(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onreset(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onreset(VARIANT *p) = 0;
    virtual HRESULT WINAPI submit(void) = 0;
    virtual HRESULT WINAPI reset(void) = 0;
    virtual HRESULT WINAPI put_length(long v) = 0;
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(VARIANT name,VARIANT index,IDispatch **pdisp) = 0;
    virtual HRESULT WINAPI tags(VARIANT tagName,IDispatch **pdisp) = 0;
  };
  HRESULT WINAPI IHTMLFormElement_put_action_Proxy(IHTMLFormElement *This,BSTR v);
  void __RPC_STUB IHTMLFormElement_put_action_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_action_Proxy(IHTMLFormElement *This,BSTR *p);
  void __RPC_STUB IHTMLFormElement_get_action_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_put_dir_Proxy(IHTMLFormElement *This,BSTR v);
  void __RPC_STUB IHTMLFormElement_put_dir_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_dir_Proxy(IHTMLFormElement *This,BSTR *p);
  void __RPC_STUB IHTMLFormElement_get_dir_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_put_encoding_Proxy(IHTMLFormElement *This,BSTR v);
  void __RPC_STUB IHTMLFormElement_put_encoding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_encoding_Proxy(IHTMLFormElement *This,BSTR *p);
  void __RPC_STUB IHTMLFormElement_get_encoding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_put_method_Proxy(IHTMLFormElement *This,BSTR v);
  void __RPC_STUB IHTMLFormElement_put_method_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_method_Proxy(IHTMLFormElement *This,BSTR *p);
  void __RPC_STUB IHTMLFormElement_get_method_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_elements_Proxy(IHTMLFormElement *This,IDispatch **p);
  void __RPC_STUB IHTMLFormElement_get_elements_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_put_target_Proxy(IHTMLFormElement *This,BSTR v);
  void __RPC_STUB IHTMLFormElement_put_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_target_Proxy(IHTMLFormElement *This,BSTR *p);
  void __RPC_STUB IHTMLFormElement_get_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_put_name_Proxy(IHTMLFormElement *This,BSTR v);
  void __RPC_STUB IHTMLFormElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_name_Proxy(IHTMLFormElement *This,BSTR *p);
  void __RPC_STUB IHTMLFormElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_put_onsubmit_Proxy(IHTMLFormElement *This,VARIANT v);
  void __RPC_STUB IHTMLFormElement_put_onsubmit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_onsubmit_Proxy(IHTMLFormElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFormElement_get_onsubmit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_put_onreset_Proxy(IHTMLFormElement *This,VARIANT v);
  void __RPC_STUB IHTMLFormElement_put_onreset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_onreset_Proxy(IHTMLFormElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFormElement_get_onreset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_submit_Proxy(IHTMLFormElement *This);
  void __RPC_STUB IHTMLFormElement_submit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_reset_Proxy(IHTMLFormElement *This);
  void __RPC_STUB IHTMLFormElement_reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_put_length_Proxy(IHTMLFormElement *This,long v);
  void __RPC_STUB IHTMLFormElement_put_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_length_Proxy(IHTMLFormElement *This,long *p);
  void __RPC_STUB IHTMLFormElement_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get__newEnum_Proxy(IHTMLFormElement *This,IUnknown **p);
  void __RPC_STUB IHTMLFormElement_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_item_Proxy(IHTMLFormElement *This,VARIANT name,VARIANT index,IDispatch **pdisp);
  void __RPC_STUB IHTMLFormElement_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_tags_Proxy(IHTMLFormElement *This,VARIANT tagName,IDispatch **pdisp);
  void __RPC_STUB IHTMLFormElement_tags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFormElement2_INTERFACE_DEFINED__
#define __IHTMLFormElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFormElement2;
  struct IHTMLFormElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_acceptCharset(BSTR v) = 0;
    virtual HRESULT WINAPI get_acceptCharset(BSTR *p) = 0;
    virtual HRESULT WINAPI urns(VARIANT urn,IDispatch **pdisp) = 0;
  };
  HRESULT WINAPI IHTMLFormElement2_put_acceptCharset_Proxy(IHTMLFormElement2 *This,BSTR v);
  void __RPC_STUB IHTMLFormElement2_put_acceptCharset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement2_get_acceptCharset_Proxy(IHTMLFormElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLFormElement2_get_acceptCharset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement2_urns_Proxy(IHTMLFormElement2 *This,VARIANT urn,IDispatch **pdisp);
  void __RPC_STUB IHTMLFormElement2_urns_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFormElement3_INTERFACE_DEFINED__
#define __IHTMLFormElement3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFormElement3;
  struct  IHTMLFormElement3 : public IDispatch {
  public:
    virtual HRESULT WINAPI namedItem(BSTR name,IDispatch **pdisp) = 0;
  };
  HRESULT WINAPI IHTMLFormElement3_namedItem_Proxy(IHTMLFormElement3 *This,BSTR name,IDispatch **pdisp);
  void __RPC_STUB IHTMLFormElement3_namedItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLSubmitData_INTERFACE_DEFINED__
#define __IHTMLSubmitData_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLSubmitData;
  struct  IHTMLSubmitData : public IDispatch {
  public:
    virtual HRESULT WINAPI appendNameValuePair(BSTR name = L"",BSTR value = L"") = 0;
    virtual HRESULT WINAPI appendNameFilePair(BSTR name = L"",BSTR filename = L"") = 0;
    virtual HRESULT WINAPI appendItemSeparator(void) = 0;
  };
  HRESULT WINAPI IHTMLSubmitData_appendNameValuePair_Proxy(IHTMLSubmitData *This,BSTR name,BSTR value);
  void __RPC_STUB IHTMLSubmitData_appendNameValuePair_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSubmitData_appendNameFilePair_Proxy(IHTMLSubmitData *This,BSTR name,BSTR filename);
  void __RPC_STUB IHTMLSubmitData_appendNameFilePair_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSubmitData_appendItemSeparator_Proxy(IHTMLSubmitData *This);
  void __RPC_STUB IHTMLSubmitData_appendItemSeparator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLFormElement_DISPINTERFACE_DEFINED__
#define __DispHTMLFormElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLFormElement;
  struct  DispHTMLFormElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLFormElement;
#ifdef __cplusplus
  class HTMLFormElement;
#endif

#ifndef __HTMLControlElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLControlElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLControlElementEvents2;
  struct HTMLControlElementEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLControlElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLControlElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLControlElementEvents;
  struct HTMLControlElementEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLControlElement_INTERFACE_DEFINED__
#define __IHTMLControlElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLControlElement;
  struct IHTMLControlElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_tabIndex(short v) = 0;
    virtual HRESULT WINAPI get_tabIndex(short *p) = 0;
    virtual HRESULT WINAPI focus(void) = 0;
    virtual HRESULT WINAPI put_accessKey(BSTR v) = 0;
    virtual HRESULT WINAPI get_accessKey(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onblur(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onblur(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onfocus(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfocus(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onresize(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onresize(VARIANT *p) = 0;
    virtual HRESULT WINAPI blur(void) = 0;
    virtual HRESULT WINAPI addFilter(IUnknown *pUnk) = 0;
    virtual HRESULT WINAPI removeFilter(IUnknown *pUnk) = 0;
    virtual HRESULT WINAPI get_clientHeight(long *p) = 0;
    virtual HRESULT WINAPI get_clientWidth(long *p) = 0;
    virtual HRESULT WINAPI get_clientTop(long *p) = 0;
    virtual HRESULT WINAPI get_clientLeft(long *p) = 0;
  };
  HRESULT WINAPI IHTMLControlElement_put_tabIndex_Proxy(IHTMLControlElement *This,short v);
  void __RPC_STUB IHTMLControlElement_put_tabIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_get_tabIndex_Proxy(IHTMLControlElement *This,short *p);
  void __RPC_STUB IHTMLControlElement_get_tabIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_focus_Proxy(IHTMLControlElement *This);
  void __RPC_STUB IHTMLControlElement_focus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_put_accessKey_Proxy(IHTMLControlElement *This,BSTR v);
  void __RPC_STUB IHTMLControlElement_put_accessKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_get_accessKey_Proxy(IHTMLControlElement *This,BSTR *p);
  void __RPC_STUB IHTMLControlElement_get_accessKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_put_onblur_Proxy(IHTMLControlElement *This,VARIANT v);
  void __RPC_STUB IHTMLControlElement_put_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_get_onblur_Proxy(IHTMLControlElement *This,VARIANT *p);
  void __RPC_STUB IHTMLControlElement_get_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_put_onfocus_Proxy(IHTMLControlElement *This,VARIANT v);
  void __RPC_STUB IHTMLControlElement_put_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_get_onfocus_Proxy(IHTMLControlElement *This,VARIANT *p);
  void __RPC_STUB IHTMLControlElement_get_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_put_onresize_Proxy(IHTMLControlElement *This,VARIANT v);
  void __RPC_STUB IHTMLControlElement_put_onresize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_get_onresize_Proxy(IHTMLControlElement *This,VARIANT *p);
  void __RPC_STUB IHTMLControlElement_get_onresize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_blur_Proxy(IHTMLControlElement *This);
  void __RPC_STUB IHTMLControlElement_blur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_addFilter_Proxy(IHTMLControlElement *This,IUnknown *pUnk);
  void __RPC_STUB IHTMLControlElement_addFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_removeFilter_Proxy(IHTMLControlElement *This,IUnknown *pUnk);
  void __RPC_STUB IHTMLControlElement_removeFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_get_clientHeight_Proxy(IHTMLControlElement *This,long *p);
  void __RPC_STUB IHTMLControlElement_get_clientHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_get_clientWidth_Proxy(IHTMLControlElement *This,long *p);
  void __RPC_STUB IHTMLControlElement_get_clientWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_get_clientTop_Proxy(IHTMLControlElement *This,long *p);
  void __RPC_STUB IHTMLControlElement_get_clientTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_get_clientLeft_Proxy(IHTMLControlElement *This,long *p);
  void __RPC_STUB IHTMLControlElement_get_clientLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTextElement_INTERFACE_DEFINED__
#define __IHTMLTextElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTextElement;
  struct IHTMLTextElement : public IDispatch {
  };
#endif

#ifndef __DispHTMLTextElement_DISPINTERFACE_DEFINED__
#define __DispHTMLTextElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLTextElement;
  struct DispHTMLTextElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLTextElement;
#ifdef __cplusplus
  class HTMLTextElement;
#endif

#ifndef __HTMLTextContainerEvents2_DISPINTERFACE_DEFINED__
#define __HTMLTextContainerEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLTextContainerEvents2;
  struct HTMLTextContainerEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLTextContainerEvents_DISPINTERFACE_DEFINED__
#define __HTMLTextContainerEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLTextContainerEvents;
  struct HTMLTextContainerEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLTextContainer_INTERFACE_DEFINED__
#define __IHTMLTextContainer_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTextContainer;
  struct IHTMLTextContainer : public IDispatch {
  public:
    virtual HRESULT WINAPI createControlRange(IDispatch **range) = 0;
    virtual HRESULT WINAPI get_scrollHeight(long *p) = 0;
    virtual HRESULT WINAPI get_scrollWidth(long *p) = 0;
    virtual HRESULT WINAPI put_scrollTop(long v) = 0;
    virtual HRESULT WINAPI get_scrollTop(long *p) = 0;
    virtual HRESULT WINAPI put_scrollLeft(long v) = 0;
    virtual HRESULT WINAPI get_scrollLeft(long *p) = 0;
    virtual HRESULT WINAPI put_onscroll(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onscroll(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLTextContainer_createControlRange_Proxy(IHTMLTextContainer *This,IDispatch **range);
  void __RPC_STUB IHTMLTextContainer_createControlRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextContainer_get_scrollHeight_Proxy(IHTMLTextContainer *This,long *p);
  void __RPC_STUB IHTMLTextContainer_get_scrollHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextContainer_get_scrollWidth_Proxy(IHTMLTextContainer *This,long *p);
  void __RPC_STUB IHTMLTextContainer_get_scrollWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextContainer_put_scrollTop_Proxy(IHTMLTextContainer *This,long v);
  void __RPC_STUB IHTMLTextContainer_put_scrollTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextContainer_get_scrollTop_Proxy(IHTMLTextContainer *This,long *p);
  void __RPC_STUB IHTMLTextContainer_get_scrollTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextContainer_put_scrollLeft_Proxy(IHTMLTextContainer *This,long v);
  void __RPC_STUB IHTMLTextContainer_put_scrollLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextContainer_get_scrollLeft_Proxy(IHTMLTextContainer *This,long *p);
  void __RPC_STUB IHTMLTextContainer_get_scrollLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextContainer_put_onscroll_Proxy(IHTMLTextContainer *This,VARIANT v);
  void __RPC_STUB IHTMLTextContainer_put_onscroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextContainer_get_onscroll_Proxy(IHTMLTextContainer *This,VARIANT *p);
  void __RPC_STUB IHTMLTextContainer_get_onscroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLControlRange_INTERFACE_DEFINED__
#define __IHTMLControlRange_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLControlRange;
  struct IHTMLControlRange : public IDispatch {
  public:
    virtual HRESULT WINAPI select(void) = 0;
    virtual HRESULT WINAPI add(IHTMLControlElement *item) = 0;
    virtual HRESULT WINAPI remove(long index) = 0;
    virtual HRESULT WINAPI item(long index,IHTMLElement **pdisp) = 0;
    virtual HRESULT WINAPI scrollIntoView(VARIANT varargStart) = 0;
    virtual HRESULT WINAPI queryCommandSupported(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandEnabled(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandState(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandIndeterm(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandText(BSTR cmdID,BSTR *pcmdText) = 0;
    virtual HRESULT WINAPI queryCommandValue(BSTR cmdID,VARIANT *pcmdValue) = 0;
    virtual HRESULT WINAPI execCommand(BSTR cmdID,VARIANT_BOOL showUI,VARIANT value,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI execCommandShowHelp(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI commonParentElement(IHTMLElement **parent) = 0;
    virtual HRESULT WINAPI get_length(long *p) = 0;
  };
  HRESULT WINAPI IHTMLControlRange_select_Proxy(IHTMLControlRange *This);
  void __RPC_STUB IHTMLControlRange_select_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_add_Proxy(IHTMLControlRange *This,IHTMLControlElement *item);
  void __RPC_STUB IHTMLControlRange_add_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_remove_Proxy(IHTMLControlRange *This,long index);
  void __RPC_STUB IHTMLControlRange_remove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_item_Proxy(IHTMLControlRange *This,long index,IHTMLElement **pdisp);
  void __RPC_STUB IHTMLControlRange_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_scrollIntoView_Proxy(IHTMLControlRange *This,VARIANT varargStart);
  void __RPC_STUB IHTMLControlRange_scrollIntoView_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_queryCommandSupported_Proxy(IHTMLControlRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLControlRange_queryCommandSupported_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_queryCommandEnabled_Proxy(IHTMLControlRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLControlRange_queryCommandEnabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_queryCommandState_Proxy(IHTMLControlRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLControlRange_queryCommandState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_queryCommandIndeterm_Proxy(IHTMLControlRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLControlRange_queryCommandIndeterm_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_queryCommandText_Proxy(IHTMLControlRange *This,BSTR cmdID,BSTR *pcmdText);
  void __RPC_STUB IHTMLControlRange_queryCommandText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_queryCommandValue_Proxy(IHTMLControlRange *This,BSTR cmdID,VARIANT *pcmdValue);
  void __RPC_STUB IHTMLControlRange_queryCommandValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_execCommand_Proxy(IHTMLControlRange *This,BSTR cmdID,VARIANT_BOOL showUI,VARIANT value,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLControlRange_execCommand_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_execCommandShowHelp_Proxy(IHTMLControlRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLControlRange_execCommandShowHelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_commonParentElement_Proxy(IHTMLControlRange *This,IHTMLElement **parent);
  void __RPC_STUB IHTMLControlRange_commonParentElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_get_length_Proxy(IHTMLControlRange *This,long *p);
  void __RPC_STUB IHTMLControlRange_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLControlRange2_INTERFACE_DEFINED__
#define __IHTMLControlRange2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLControlRange2;
  struct IHTMLControlRange2 : public IDispatch {
  public:
    virtual HRESULT WINAPI addElement(IHTMLElement *item) = 0;
  };
  HRESULT WINAPI IHTMLControlRange2_addElement_Proxy(IHTMLControlRange2 *This,IHTMLElement *item);
  void __RPC_STUB IHTMLControlRange2_addElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __HTMLImgEvents2_DISPINTERFACE_DEFINED__
#define __HTMLImgEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLImgEvents2;
  struct HTMLImgEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLImgEvents_DISPINTERFACE_DEFINED__
#define __HTMLImgEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLImgEvents;
  struct HTMLImgEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLImgElement_INTERFACE_DEFINED__
#define __IHTMLImgElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLImgElement;
  struct IHTMLImgElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_isMap(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_isMap(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_useMap(BSTR v) = 0;
    virtual HRESULT WINAPI get_useMap(BSTR *p) = 0;
    virtual HRESULT WINAPI get_mimeType(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fileSize(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fileCreatedDate(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fileModifiedDate(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fileUpdatedDate(BSTR *p) = 0;
    virtual HRESULT WINAPI get_protocol(BSTR *p) = 0;
    virtual HRESULT WINAPI get_href(BSTR *p) = 0;
    virtual HRESULT WINAPI get_nameProp(BSTR *p) = 0;
    virtual HRESULT WINAPI put_border(VARIANT v) = 0;
    virtual HRESULT WINAPI get_border(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_vspace(long v) = 0;
    virtual HRESULT WINAPI get_vspace(long *p) = 0;
    virtual HRESULT WINAPI put_hspace(long v) = 0;
    virtual HRESULT WINAPI get_hspace(long *p) = 0;
    virtual HRESULT WINAPI put_alt(BSTR v) = 0;
    virtual HRESULT WINAPI get_alt(BSTR *p) = 0;
    virtual HRESULT WINAPI put_src(BSTR v) = 0;
    virtual HRESULT WINAPI get_src(BSTR *p) = 0;
    virtual HRESULT WINAPI put_lowsrc(BSTR v) = 0;
    virtual HRESULT WINAPI get_lowsrc(BSTR *p) = 0;
    virtual HRESULT WINAPI put_vrml(BSTR v) = 0;
    virtual HRESULT WINAPI get_vrml(BSTR *p) = 0;
    virtual HRESULT WINAPI put_dynsrc(BSTR v) = 0;
    virtual HRESULT WINAPI get_dynsrc(BSTR *p) = 0;
    virtual HRESULT WINAPI get_readyState(BSTR *p) = 0;
    virtual HRESULT WINAPI get_complete(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_loop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_loop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onerror(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerror(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onabort(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onabort(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_width(long v) = 0;
    virtual HRESULT WINAPI get_width(long *p) = 0;
    virtual HRESULT WINAPI put_height(long v) = 0;
    virtual HRESULT WINAPI get_height(long *p) = 0;
    virtual HRESULT WINAPI put_start(BSTR v) = 0;
    virtual HRESULT WINAPI get_start(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLImgElement_put_isMap_Proxy(IHTMLImgElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLImgElement_put_isMap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_isMap_Proxy(IHTMLImgElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLImgElement_get_isMap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_useMap_Proxy(IHTMLImgElement *This,BSTR v);
  void __RPC_STUB IHTMLImgElement_put_useMap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_useMap_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_useMap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_mimeType_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_mimeType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_fileSize_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_fileSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_fileCreatedDate_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_fileCreatedDate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_fileModifiedDate_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_fileModifiedDate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_fileUpdatedDate_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_fileUpdatedDate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_protocol_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_protocol_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_href_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_nameProp_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_nameProp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_border_Proxy(IHTMLImgElement *This,VARIANT v);
  void __RPC_STUB IHTMLImgElement_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_border_Proxy(IHTMLImgElement *This,VARIANT *p);
  void __RPC_STUB IHTMLImgElement_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_vspace_Proxy(IHTMLImgElement *This,long v);
  void __RPC_STUB IHTMLImgElement_put_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_vspace_Proxy(IHTMLImgElement *This,long *p);
  void __RPC_STUB IHTMLImgElement_get_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_hspace_Proxy(IHTMLImgElement *This,long v);
  void __RPC_STUB IHTMLImgElement_put_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_hspace_Proxy(IHTMLImgElement *This,long *p);
  void __RPC_STUB IHTMLImgElement_get_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_alt_Proxy(IHTMLImgElement *This,BSTR v);
  void __RPC_STUB IHTMLImgElement_put_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_alt_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_src_Proxy(IHTMLImgElement *This,BSTR v);
  void __RPC_STUB IHTMLImgElement_put_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_src_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_lowsrc_Proxy(IHTMLImgElement *This,BSTR v);
  void __RPC_STUB IHTMLImgElement_put_lowsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_lowsrc_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_lowsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_vrml_Proxy(IHTMLImgElement *This,BSTR v);
  void __RPC_STUB IHTMLImgElement_put_vrml_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_vrml_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_vrml_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_dynsrc_Proxy(IHTMLImgElement *This,BSTR v);
  void __RPC_STUB IHTMLImgElement_put_dynsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_dynsrc_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_dynsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_readyState_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_complete_Proxy(IHTMLImgElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLImgElement_get_complete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_loop_Proxy(IHTMLImgElement *This,VARIANT v);
  void __RPC_STUB IHTMLImgElement_put_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_loop_Proxy(IHTMLImgElement *This,VARIANT *p);
  void __RPC_STUB IHTMLImgElement_get_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_align_Proxy(IHTMLImgElement *This,BSTR v);
  void __RPC_STUB IHTMLImgElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_align_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_onload_Proxy(IHTMLImgElement *This,VARIANT v);
  void __RPC_STUB IHTMLImgElement_put_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_onload_Proxy(IHTMLImgElement *This,VARIANT *p);
  void __RPC_STUB IHTMLImgElement_get_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_onerror_Proxy(IHTMLImgElement *This,VARIANT v);
  void __RPC_STUB IHTMLImgElement_put_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_onerror_Proxy(IHTMLImgElement *This,VARIANT *p);
  void __RPC_STUB IHTMLImgElement_get_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_onabort_Proxy(IHTMLImgElement *This,VARIANT v);
  void __RPC_STUB IHTMLImgElement_put_onabort_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_onabort_Proxy(IHTMLImgElement *This,VARIANT *p);
  void __RPC_STUB IHTMLImgElement_get_onabort_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_name_Proxy(IHTMLImgElement *This,BSTR v);
  void __RPC_STUB IHTMLImgElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_name_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_width_Proxy(IHTMLImgElement *This,long v);
  void __RPC_STUB IHTMLImgElement_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_width_Proxy(IHTMLImgElement *This,long *p);
  void __RPC_STUB IHTMLImgElement_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_height_Proxy(IHTMLImgElement *This,long v);
  void __RPC_STUB IHTMLImgElement_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_height_Proxy(IHTMLImgElement *This,long *p);
  void __RPC_STUB IHTMLImgElement_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_start_Proxy(IHTMLImgElement *This,BSTR v);
  void __RPC_STUB IHTMLImgElement_put_start_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_start_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_start_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLImgElement2_INTERFACE_DEFINED__
#define __IHTMLImgElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLImgElement2;
  struct IHTMLImgElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_longDesc(BSTR v) = 0;
    virtual HRESULT WINAPI get_longDesc(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLImgElement2_put_longDesc_Proxy(IHTMLImgElement2 *This,BSTR v);
  void __RPC_STUB IHTMLImgElement2_put_longDesc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement2_get_longDesc_Proxy(IHTMLImgElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement2_get_longDesc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLImageElementFactory_INTERFACE_DEFINED__
#define __IHTMLImageElementFactory_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLImageElementFactory;
  struct IHTMLImageElementFactory : public IDispatch {
  public:
    virtual HRESULT WINAPI create(VARIANT width,VARIANT height,IHTMLImgElement **__MIDL_0011) = 0;
  };
  HRESULT WINAPI IHTMLImageElementFactory_create_Proxy(IHTMLImageElementFactory *This,VARIANT width,VARIANT height,IHTMLImgElement **__MIDL_0011);
  void __RPC_STUB IHTMLImageElementFactory_create_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLImg_DISPINTERFACE_DEFINED__
#define __DispHTMLImg_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLImg;
  struct DispHTMLImg : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLImg;
#ifdef __cplusplus
  class HTMLImg;
#endif
  EXTERN_C const CLSID CLSID_HTMLImageElementFactory;
#ifdef __cplusplus
  class HTMLImageElementFactory;
#endif

#ifndef __IHTMLBodyElement_INTERFACE_DEFINED__
#define __IHTMLBodyElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLBodyElement;
  struct IHTMLBodyElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_background(BSTR v) = 0;
    virtual HRESULT WINAPI get_background(BSTR *p) = 0;
    virtual HRESULT WINAPI put_bgProperties(BSTR v) = 0;
    virtual HRESULT WINAPI get_bgProperties(BSTR *p) = 0;
    virtual HRESULT WINAPI put_leftMargin(VARIANT v) = 0;
    virtual HRESULT WINAPI get_leftMargin(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_topMargin(VARIANT v) = 0;
    virtual HRESULT WINAPI get_topMargin(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_rightMargin(VARIANT v) = 0;
    virtual HRESULT WINAPI get_rightMargin(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_bottomMargin(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bottomMargin(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_noWrap(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_noWrap(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_bgColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bgColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_text(VARIANT v) = 0;
    virtual HRESULT WINAPI get_text(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_link(VARIANT v) = 0;
    virtual HRESULT WINAPI get_link(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_vLink(VARIANT v) = 0;
    virtual HRESULT WINAPI get_vLink(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_aLink(VARIANT v) = 0;
    virtual HRESULT WINAPI get_aLink(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onunload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onunload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scroll(BSTR v) = 0;
    virtual HRESULT WINAPI get_scroll(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onselect(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onselect(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onbeforeunload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeunload(VARIANT *p) = 0;
    virtual HRESULT WINAPI createTextRange(IHTMLTxtRange **range) = 0;
  };
  HRESULT WINAPI IHTMLBodyElement_put_background_Proxy(IHTMLBodyElement *This,BSTR v);
  void __RPC_STUB IHTMLBodyElement_put_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_background_Proxy(IHTMLBodyElement *This,BSTR *p);
  void __RPC_STUB IHTMLBodyElement_get_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_bgProperties_Proxy(IHTMLBodyElement *This,BSTR v);
  void __RPC_STUB IHTMLBodyElement_put_bgProperties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_bgProperties_Proxy(IHTMLBodyElement *This,BSTR *p);
  void __RPC_STUB IHTMLBodyElement_get_bgProperties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_leftMargin_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_leftMargin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_leftMargin_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_leftMargin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_topMargin_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_topMargin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_topMargin_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_topMargin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_rightMargin_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_rightMargin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_rightMargin_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_rightMargin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_bottomMargin_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_bottomMargin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_bottomMargin_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_bottomMargin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_noWrap_Proxy(IHTMLBodyElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLBodyElement_put_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_noWrap_Proxy(IHTMLBodyElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLBodyElement_get_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_bgColor_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_bgColor_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_text_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_text_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_link_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_link_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_link_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_link_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_vLink_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_vLink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_vLink_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_vLink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_aLink_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_aLink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_aLink_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_aLink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_onload_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_onload_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_onunload_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_onunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_onunload_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_onunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_scroll_Proxy(IHTMLBodyElement *This,BSTR v);
  void __RPC_STUB IHTMLBodyElement_put_scroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_scroll_Proxy(IHTMLBodyElement *This,BSTR *p);
  void __RPC_STUB IHTMLBodyElement_get_scroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_onselect_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_onselect_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_onbeforeunload_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_onbeforeunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_onbeforeunload_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_onbeforeunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_createTextRange_Proxy(IHTMLBodyElement *This,IHTMLTxtRange **range);
  void __RPC_STUB IHTMLBodyElement_createTextRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLBodyElement2_INTERFACE_DEFINED__
#define __IHTMLBodyElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLBodyElement2;
  struct IHTMLBodyElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_onbeforeprint(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeprint(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onafterprint(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onafterprint(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLBodyElement2_put_onbeforeprint_Proxy(IHTMLBodyElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement2_put_onbeforeprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement2_get_onbeforeprint_Proxy(IHTMLBodyElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement2_get_onbeforeprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement2_put_onafterprint_Proxy(IHTMLBodyElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement2_put_onafterprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement2_get_onafterprint_Proxy(IHTMLBodyElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement2_get_onafterprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLBody_DISPINTERFACE_DEFINED__
#define __DispHTMLBody_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLBody;
  struct DispHTMLBody : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLBody;
#ifdef __cplusplus
  class HTMLBody;
#endif

#ifndef __IHTMLFontElement_INTERFACE_DEFINED__
#define __IHTMLFontElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFontElement;
  struct IHTMLFontElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_color(VARIANT v) = 0;
    virtual HRESULT WINAPI get_color(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_face(BSTR v) = 0;
    virtual HRESULT WINAPI get_face(BSTR *p) = 0;
    virtual HRESULT WINAPI put_size(VARIANT v) = 0;
    virtual HRESULT WINAPI get_size(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLFontElement_put_color_Proxy(IHTMLFontElement *This,VARIANT v);
  void __RPC_STUB IHTMLFontElement_put_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontElement_get_color_Proxy(IHTMLFontElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFontElement_get_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontElement_put_face_Proxy(IHTMLFontElement *This,BSTR v);
  void __RPC_STUB IHTMLFontElement_put_face_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontElement_get_face_Proxy(IHTMLFontElement *This,BSTR *p);
  void __RPC_STUB IHTMLFontElement_get_face_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontElement_put_size_Proxy(IHTMLFontElement *This,VARIANT v);
  void __RPC_STUB IHTMLFontElement_put_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontElement_get_size_Proxy(IHTMLFontElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFontElement_get_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLFontElement_DISPINTERFACE_DEFINED__
#define __DispHTMLFontElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLFontElement;
  struct DispHTMLFontElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLFontElement;
#ifdef __cplusplus
  class HTMLFontElement;
#endif

#ifndef __HTMLAnchorEvents2_DISPINTERFACE_DEFINED__
#define __HTMLAnchorEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLAnchorEvents2;
  struct HTMLAnchorEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLAnchorEvents_DISPINTERFACE_DEFINED__
#define __HTMLAnchorEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLAnchorEvents;
  struct HTMLAnchorEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLAnchorElement_INTERFACE_DEFINED__
#define __IHTMLAnchorElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAnchorElement;
  struct IHTMLAnchorElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_href(BSTR v) = 0;
    virtual HRESULT WINAPI get_href(BSTR *p) = 0;
    virtual HRESULT WINAPI put_target(BSTR v) = 0;
    virtual HRESULT WINAPI get_target(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rel(BSTR v) = 0;
    virtual HRESULT WINAPI get_rel(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rev(BSTR v) = 0;
    virtual HRESULT WINAPI get_rev(BSTR *p) = 0;
    virtual HRESULT WINAPI put_urn(BSTR v) = 0;
    virtual HRESULT WINAPI get_urn(BSTR *p) = 0;
    virtual HRESULT WINAPI put_Methods(BSTR v) = 0;
    virtual HRESULT WINAPI get_Methods(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_host(BSTR v) = 0;
    virtual HRESULT WINAPI get_host(BSTR *p) = 0;
    virtual HRESULT WINAPI put_hostname(BSTR v) = 0;
    virtual HRESULT WINAPI get_hostname(BSTR *p) = 0;
    virtual HRESULT WINAPI put_pathname(BSTR v) = 0;
    virtual HRESULT WINAPI get_pathname(BSTR *p) = 0;
    virtual HRESULT WINAPI put_port(BSTR v) = 0;
    virtual HRESULT WINAPI get_port(BSTR *p) = 0;
    virtual HRESULT WINAPI put_protocol(BSTR v) = 0;
    virtual HRESULT WINAPI get_protocol(BSTR *p) = 0;
    virtual HRESULT WINAPI put_search(BSTR v) = 0;
    virtual HRESULT WINAPI get_search(BSTR *p) = 0;
    virtual HRESULT WINAPI put_hash(BSTR v) = 0;
    virtual HRESULT WINAPI get_hash(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onblur(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onblur(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onfocus(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfocus(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_accessKey(BSTR v) = 0;
    virtual HRESULT WINAPI get_accessKey(BSTR *p) = 0;
    virtual HRESULT WINAPI get_protocolLong(BSTR *p) = 0;
    virtual HRESULT WINAPI get_mimeType(BSTR *p) = 0;
    virtual HRESULT WINAPI get_nameProp(BSTR *p) = 0;
    virtual HRESULT WINAPI put_tabIndex(short v) = 0;
    virtual HRESULT WINAPI get_tabIndex(short *p) = 0;
    virtual HRESULT WINAPI focus(void) = 0;
    virtual HRESULT WINAPI blur(void) = 0;
  };
  HRESULT WINAPI IHTMLAnchorElement_put_href_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_href_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_target_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_target_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_rel_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_rel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_rel_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_rel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_rev_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_rev_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_rev_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_rev_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_urn_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_urn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_urn_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_urn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_Methods_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_Methods_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_Methods_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_Methods_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_name_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_name_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_host_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_host_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_host_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_host_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_hostname_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_hostname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_hostname_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_hostname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_pathname_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_pathname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_pathname_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_pathname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_port_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_port_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_port_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_port_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_protocol_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_protocol_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_protocol_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_protocol_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_search_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_search_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_search_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_search_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_hash_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_hash_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_hash_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_hash_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_onblur_Proxy(IHTMLAnchorElement *This,VARIANT v);
  void __RPC_STUB IHTMLAnchorElement_put_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_onblur_Proxy(IHTMLAnchorElement *This,VARIANT *p);
  void __RPC_STUB IHTMLAnchorElement_get_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_onfocus_Proxy(IHTMLAnchorElement *This,VARIANT v);
  void __RPC_STUB IHTMLAnchorElement_put_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_onfocus_Proxy(IHTMLAnchorElement *This,VARIANT *p);
  void __RPC_STUB IHTMLAnchorElement_get_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_accessKey_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_accessKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_accessKey_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_accessKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_protocolLong_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_protocolLong_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_mimeType_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_mimeType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_nameProp_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_nameProp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_tabIndex_Proxy(IHTMLAnchorElement *This,short v);
  void __RPC_STUB IHTMLAnchorElement_put_tabIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_tabIndex_Proxy(IHTMLAnchorElement *This,short *p);
  void __RPC_STUB IHTMLAnchorElement_get_tabIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_focus_Proxy(IHTMLAnchorElement *This);
  void __RPC_STUB IHTMLAnchorElement_focus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_blur_Proxy(IHTMLAnchorElement *This);
  void __RPC_STUB IHTMLAnchorElement_blur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLAnchorElement2_INTERFACE_DEFINED__
#define __IHTMLAnchorElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAnchorElement2;
  struct IHTMLAnchorElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_charset(BSTR v) = 0;
    virtual HRESULT WINAPI get_charset(BSTR *p) = 0;
    virtual HRESULT WINAPI put_coords(BSTR v) = 0;
    virtual HRESULT WINAPI get_coords(BSTR *p) = 0;
    virtual HRESULT WINAPI put_hreflang(BSTR v) = 0;
    virtual HRESULT WINAPI get_hreflang(BSTR *p) = 0;
    virtual HRESULT WINAPI put_shape(BSTR v) = 0;
    virtual HRESULT WINAPI get_shape(BSTR *p) = 0;
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLAnchorElement2_put_charset_Proxy(IHTMLAnchorElement2 *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement2_put_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement2_get_charset_Proxy(IHTMLAnchorElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement2_get_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement2_put_coords_Proxy(IHTMLAnchorElement2 *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement2_put_coords_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement2_get_coords_Proxy(IHTMLAnchorElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement2_get_coords_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement2_put_hreflang_Proxy(IHTMLAnchorElement2 *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement2_put_hreflang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement2_get_hreflang_Proxy(IHTMLAnchorElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement2_get_hreflang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement2_put_shape_Proxy(IHTMLAnchorElement2 *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement2_put_shape_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement2_get_shape_Proxy(IHTMLAnchorElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement2_get_shape_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement2_put_type_Proxy(IHTMLAnchorElement2 *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement2_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement2_get_type_Proxy(IHTMLAnchorElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement2_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLAnchorElement_DISPINTERFACE_DEFINED__
#define __DispHTMLAnchorElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLAnchorElement;
  struct DispHTMLAnchorElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLAnchorElement;
#ifdef __cplusplus
  class HTMLAnchorElement;
#endif

#ifndef __HTMLLabelEvents2_DISPINTERFACE_DEFINED__
#define __HTMLLabelEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLLabelEvents2;
  struct HTMLLabelEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLLabelEvents_DISPINTERFACE_DEFINED__
#define __HTMLLabelEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLLabelEvents;
  struct  HTMLLabelEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLLabelElement_INTERFACE_DEFINED__
#define __IHTMLLabelElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLLabelElement;
  struct  IHTMLLabelElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_htmlFor(BSTR v) = 0;
    virtual HRESULT WINAPI get_htmlFor(BSTR *p) = 0;
    virtual HRESULT WINAPI put_accessKey(BSTR v) = 0;
    virtual HRESULT WINAPI get_accessKey(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLLabelElement_put_htmlFor_Proxy(IHTMLLabelElement *This,BSTR v);
  void __RPC_STUB IHTMLLabelElement_put_htmlFor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLabelElement_get_htmlFor_Proxy(IHTMLLabelElement *This,BSTR *p);
  void __RPC_STUB IHTMLLabelElement_get_htmlFor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLabelElement_put_accessKey_Proxy(IHTMLLabelElement *This,BSTR v);
  void __RPC_STUB IHTMLLabelElement_put_accessKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLabelElement_get_accessKey_Proxy(IHTMLLabelElement *This,BSTR *p);
  void __RPC_STUB IHTMLLabelElement_get_accessKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLLabelElement2_INTERFACE_DEFINED__
#define __IHTMLLabelElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLLabelElement2;
  struct  IHTMLLabelElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
  };
  HRESULT WINAPI IHTMLLabelElement2_get_form_Proxy(IHTMLLabelElement2 *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLLabelElement2_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLLabelElement_DISPINTERFACE_DEFINED__
#define __DispHTMLLabelElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLLabelElement;
  struct DispHTMLLabelElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLLabelElement;
#ifdef __cplusplus
  class HTMLLabelElement;
#endif

#ifndef __IHTMLListElement_INTERFACE_DEFINED__
#define __IHTMLListElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLListElement;
  struct IHTMLListElement : public IDispatch {
  };
#endif

#ifndef __IHTMLListElement2_INTERFACE_DEFINED__
#define __IHTMLListElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLListElement2;
  struct IHTMLListElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_compact(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_compact(VARIANT_BOOL *p) = 0;
  };
  HRESULT WINAPI IHTMLListElement2_put_compact_Proxy(IHTMLListElement2 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLListElement2_put_compact_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLListElement2_get_compact_Proxy(IHTMLListElement2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLListElement2_get_compact_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLListElement_DISPINTERFACE_DEFINED__
#define __DispHTMLListElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLListElement;
  struct DispHTMLListElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLListElement;
#ifdef __cplusplus
  class HTMLListElement;
#endif

#ifndef __IHTMLUListElement_INTERFACE_DEFINED__
#define __IHTMLUListElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLUListElement;
  struct IHTMLUListElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_compact(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_compact(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLUListElement_put_compact_Proxy(IHTMLUListElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLUListElement_put_compact_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLUListElement_get_compact_Proxy(IHTMLUListElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLUListElement_get_compact_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLUListElement_put_type_Proxy(IHTMLUListElement *This,BSTR v);
  void __RPC_STUB IHTMLUListElement_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLUListElement_get_type_Proxy(IHTMLUListElement *This,BSTR *p);
  void __RPC_STUB IHTMLUListElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLUListElement_DISPINTERFACE_DEFINED__
#define __DispHTMLUListElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLUListElement;
  struct DispHTMLUListElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLUListElement;
#ifdef __cplusplus
  class HTMLUListElement;
#endif

#ifndef __IHTMLOListElement_INTERFACE_DEFINED__
#define __IHTMLOListElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLOListElement;
  struct IHTMLOListElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_compact(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_compact(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_start(long v) = 0;
    virtual HRESULT WINAPI get_start(long *p) = 0;
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLOListElement_put_compact_Proxy(IHTMLOListElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOListElement_put_compact_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOListElement_get_compact_Proxy(IHTMLOListElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOListElement_get_compact_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOListElement_put_start_Proxy(IHTMLOListElement *This,long v);
  void __RPC_STUB IHTMLOListElement_put_start_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOListElement_get_start_Proxy(IHTMLOListElement *This,long *p);
  void __RPC_STUB IHTMLOListElement_get_start_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOListElement_put_type_Proxy(IHTMLOListElement *This,BSTR v);
  void __RPC_STUB IHTMLOListElement_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOListElement_get_type_Proxy(IHTMLOListElement *This,BSTR *p);
  void __RPC_STUB IHTMLOListElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLOListElement_DISPINTERFACE_DEFINED__
#define __DispHTMLOListElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLOListElement;
  struct DispHTMLOListElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLOListElement;
#ifdef __cplusplus
  class HTMLOListElement;
#endif

#ifndef __IHTMLLIElement_INTERFACE_DEFINED__
#define __IHTMLLIElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLLIElement;
  struct IHTMLLIElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(long v) = 0;
    virtual HRESULT WINAPI get_value(long *p) = 0;
  };
  HRESULT WINAPI IHTMLLIElement_put_type_Proxy(IHTMLLIElement *This,BSTR v);
  void __RPC_STUB IHTMLLIElement_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLIElement_get_type_Proxy(IHTMLLIElement *This,BSTR *p);
  void __RPC_STUB IHTMLLIElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLIElement_put_value_Proxy(IHTMLLIElement *This,long v);
  void __RPC_STUB IHTMLLIElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLIElement_get_value_Proxy(IHTMLLIElement *This,long *p);
  void __RPC_STUB IHTMLLIElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLLIElement_DISPINTERFACE_DEFINED__
#define __DispHTMLLIElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLLIElement;
  struct DispHTMLLIElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLLIElement;
#ifdef __cplusplus
  class HTMLLIElement;
#endif

#ifndef __IHTMLBlockElement_INTERFACE_DEFINED__
#define __IHTMLBlockElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLBlockElement;
  struct IHTMLBlockElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_clear(BSTR v) = 0;
    virtual HRESULT WINAPI get_clear(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLBlockElement_put_clear_Proxy(IHTMLBlockElement *This,BSTR v);
  void __RPC_STUB IHTMLBlockElement_put_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBlockElement_get_clear_Proxy(IHTMLBlockElement *This,BSTR *p);
  void __RPC_STUB IHTMLBlockElement_get_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLBlockElement2_INTERFACE_DEFINED__
#define __IHTMLBlockElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLBlockElement2;
  struct IHTMLBlockElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_cite(BSTR v) = 0;
    virtual HRESULT WINAPI get_cite(BSTR *p) = 0;
    virtual HRESULT WINAPI put_width(BSTR v) = 0;
    virtual HRESULT WINAPI get_width(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLBlockElement2_put_cite_Proxy(IHTMLBlockElement2 *This,BSTR v);
  void __RPC_STUB IHTMLBlockElement2_put_cite_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBlockElement2_get_cite_Proxy(IHTMLBlockElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLBlockElement2_get_cite_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBlockElement2_put_width_Proxy(IHTMLBlockElement2 *This,BSTR v);
  void __RPC_STUB IHTMLBlockElement2_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBlockElement2_get_width_Proxy(IHTMLBlockElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLBlockElement2_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLBlockElement_DISPINTERFACE_DEFINED__
#define __DispHTMLBlockElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLBlockElement;
  struct DispHTMLBlockElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLBlockElement;
#ifdef __cplusplus
  class HTMLBlockElement;
#endif

#ifndef __IHTMLDivElement_INTERFACE_DEFINED__
#define __IHTMLDivElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDivElement;
  struct IHTMLDivElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_noWrap(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_noWrap(VARIANT_BOOL *p) = 0;
  };
  HRESULT WINAPI IHTMLDivElement_put_align_Proxy(IHTMLDivElement *This,BSTR v);
  void __RPC_STUB IHTMLDivElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDivElement_get_align_Proxy(IHTMLDivElement *This,BSTR *p);
  void __RPC_STUB IHTMLDivElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDivElement_put_noWrap_Proxy(IHTMLDivElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLDivElement_put_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDivElement_get_noWrap_Proxy(IHTMLDivElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLDivElement_get_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLDivElement_DISPINTERFACE_DEFINED__
#define __DispHTMLDivElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDivElement;
  struct DispHTMLDivElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLDivElement;
#ifdef __cplusplus
  class HTMLDivElement;
#endif

#ifndef __IHTMLDDElement_INTERFACE_DEFINED__
#define __IHTMLDDElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDDElement;
  struct IHTMLDDElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_noWrap(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_noWrap(VARIANT_BOOL *p) = 0;
  };
  HRESULT WINAPI IHTMLDDElement_put_noWrap_Proxy(IHTMLDDElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLDDElement_put_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDDElement_get_noWrap_Proxy(IHTMLDDElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLDDElement_get_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLDDElement_DISPINTERFACE_DEFINED__
#define __DispHTMLDDElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDDElement;
  struct DispHTMLDDElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLDDElement;
#ifdef __cplusplus
  class HTMLDDElement;
#endif

#ifndef __IHTMLDTElement_INTERFACE_DEFINED__
#define __IHTMLDTElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDTElement;
  struct IHTMLDTElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_noWrap(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_noWrap(VARIANT_BOOL *p) = 0;
  };
  HRESULT WINAPI IHTMLDTElement_put_noWrap_Proxy(IHTMLDTElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLDTElement_put_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDTElement_get_noWrap_Proxy(IHTMLDTElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLDTElement_get_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLDTElement_DISPINTERFACE_DEFINED__
#define __DispHTMLDTElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDTElement;
  struct DispHTMLDTElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLDTElement;
#ifdef __cplusplus
  class HTMLDTElement;
#endif

#ifndef __IHTMLBRElement_INTERFACE_DEFINED__
#define __IHTMLBRElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLBRElement;
  struct IHTMLBRElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_clear(BSTR v) = 0;
    virtual HRESULT WINAPI get_clear(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLBRElement_put_clear_Proxy(IHTMLBRElement *This,BSTR v);
  void __RPC_STUB IHTMLBRElement_put_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBRElement_get_clear_Proxy(IHTMLBRElement *This,BSTR *p);
  void __RPC_STUB IHTMLBRElement_get_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLBRElement_DISPINTERFACE_DEFINED__
#define __DispHTMLBRElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLBRElement;
  struct DispHTMLBRElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLBRElement;
#ifdef __cplusplus
  class HTMLBRElement;
#endif

#ifndef __IHTMLDListElement_INTERFACE_DEFINED__
#define __IHTMLDListElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDListElement;
  struct IHTMLDListElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_compact(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_compact(VARIANT_BOOL *p) = 0;
  };
  HRESULT WINAPI IHTMLDListElement_put_compact_Proxy(IHTMLDListElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLDListElement_put_compact_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDListElement_get_compact_Proxy(IHTMLDListElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLDListElement_get_compact_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLDListElement_DISPINTERFACE_DEFINED__
#define __DispHTMLDListElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDListElement;
  struct DispHTMLDListElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLDListElement;
#ifdef __cplusplus
  class HTMLDListElement;
#endif

#ifndef __IHTMLHRElement_INTERFACE_DEFINED__
#define __IHTMLHRElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLHRElement;
  struct IHTMLHRElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_color(VARIANT v) = 0;
    virtual HRESULT WINAPI get_color(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_noShade(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_noShade(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_size(VARIANT v) = 0;
    virtual HRESULT WINAPI get_size(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLHRElement_put_align_Proxy(IHTMLHRElement *This,BSTR v);
  void __RPC_STUB IHTMLHRElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHRElement_get_align_Proxy(IHTMLHRElement *This,BSTR *p);
  void __RPC_STUB IHTMLHRElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHRElement_put_color_Proxy(IHTMLHRElement *This,VARIANT v);
  void __RPC_STUB IHTMLHRElement_put_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHRElement_get_color_Proxy(IHTMLHRElement *This,VARIANT *p);
  void __RPC_STUB IHTMLHRElement_get_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHRElement_put_noShade_Proxy(IHTMLHRElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLHRElement_put_noShade_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHRElement_get_noShade_Proxy(IHTMLHRElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLHRElement_get_noShade_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHRElement_put_width_Proxy(IHTMLHRElement *This,VARIANT v);
  void __RPC_STUB IHTMLHRElement_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHRElement_get_width_Proxy(IHTMLHRElement *This,VARIANT *p);
  void __RPC_STUB IHTMLHRElement_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHRElement_put_size_Proxy(IHTMLHRElement *This,VARIANT v);
  void __RPC_STUB IHTMLHRElement_put_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHRElement_get_size_Proxy(IHTMLHRElement *This,VARIANT *p);
  void __RPC_STUB IHTMLHRElement_get_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLHRElement_DISPINTERFACE_DEFINED__
#define __DispHTMLHRElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLHRElement;
  struct  DispHTMLHRElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLHRElement;
#ifdef __cplusplus
  class HTMLHRElement;
#endif

#ifndef __IHTMLParaElement_INTERFACE_DEFINED__
#define __IHTMLParaElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLParaElement;
  struct IHTMLParaElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLParaElement_put_align_Proxy(IHTMLParaElement *This,BSTR v);
  void __RPC_STUB IHTMLParaElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLParaElement_get_align_Proxy(IHTMLParaElement *This,BSTR *p);
  void __RPC_STUB IHTMLParaElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLParaElement_DISPINTERFACE_DEFINED__
#define __DispHTMLParaElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLParaElement;
  struct  DispHTMLParaElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLParaElement;
#ifdef __cplusplus
  class HTMLParaElement;
#endif

#ifndef __IHTMLElementCollection2_INTERFACE_DEFINED__
#define __IHTMLElementCollection2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLElementCollection2;
  struct IHTMLElementCollection2 : public IDispatch {
  public:
    virtual HRESULT WINAPI urns(VARIANT urn,IDispatch **pdisp) = 0;
  };
  HRESULT WINAPI IHTMLElementCollection2_urns_Proxy(IHTMLElementCollection2 *This,VARIANT urn,IDispatch **pdisp);
  void __RPC_STUB IHTMLElementCollection2_urns_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLElementCollection3_INTERFACE_DEFINED__
#define __IHTMLElementCollection3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLElementCollection3;
  struct IHTMLElementCollection3 : public IDispatch {
  public:
    virtual HRESULT WINAPI namedItem(BSTR name,IDispatch **pdisp) = 0;
  };
  HRESULT WINAPI IHTMLElementCollection3_namedItem_Proxy(IHTMLElementCollection3 *This,BSTR name,IDispatch **pdisp);
  void __RPC_STUB IHTMLElementCollection3_namedItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLElementCollection_DISPINTERFACE_DEFINED__
#define __DispHTMLElementCollection_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLElementCollection;
  struct DispHTMLElementCollection : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLElementCollection;
#ifdef __cplusplus
  class HTMLElementCollection;
#endif

#ifndef __IHTMLHeaderElement_INTERFACE_DEFINED__
#define __IHTMLHeaderElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLHeaderElement;
  struct IHTMLHeaderElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLHeaderElement_put_align_Proxy(IHTMLHeaderElement *This,BSTR v);
  void __RPC_STUB IHTMLHeaderElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHeaderElement_get_align_Proxy(IHTMLHeaderElement *This,BSTR *p);
  void __RPC_STUB IHTMLHeaderElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLHeaderElement_DISPINTERFACE_DEFINED__
#define __DispHTMLHeaderElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLHeaderElement;
  struct DispHTMLHeaderElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLHeaderElement;
#ifdef __cplusplus
  class HTMLHeaderElement;
#endif

#ifndef __HTMLSelectElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLSelectElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLSelectElementEvents2;
  struct HTMLSelectElementEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLSelectElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLSelectElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLSelectElementEvents;
  struct HTMLSelectElementEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLSelectElement_INTERFACE_DEFINED__
#define __IHTMLSelectElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLSelectElement;
  struct IHTMLSelectElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_size(long v) = 0;
    virtual HRESULT WINAPI get_size(long *p) = 0;
    virtual HRESULT WINAPI put_multiple(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_multiple(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI get_options(IDispatch **p) = 0;
    virtual HRESULT WINAPI put_onchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_selectedIndex(long v) = 0;
    virtual HRESULT WINAPI get_selectedIndex(long *p) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
    virtual HRESULT WINAPI add(IHTMLElement *element,VARIANT before) = 0;
    virtual HRESULT WINAPI remove(long index = -1) = 0;
    virtual HRESULT WINAPI put_length(long v) = 0;
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(VARIANT name,VARIANT index,IDispatch **pdisp) = 0;
    virtual HRESULT WINAPI tags(VARIANT tagName,IDispatch **pdisp) = 0;
  };
  HRESULT WINAPI IHTMLSelectElement_put_size_Proxy(IHTMLSelectElement *This,long v);
  void __RPC_STUB IHTMLSelectElement_put_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_size_Proxy(IHTMLSelectElement *This,long *p);
  void __RPC_STUB IHTMLSelectElement_get_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_put_multiple_Proxy(IHTMLSelectElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLSelectElement_put_multiple_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_multiple_Proxy(IHTMLSelectElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLSelectElement_get_multiple_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_put_name_Proxy(IHTMLSelectElement *This,BSTR v);
  void __RPC_STUB IHTMLSelectElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_name_Proxy(IHTMLSelectElement *This,BSTR *p);
  void __RPC_STUB IHTMLSelectElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_options_Proxy(IHTMLSelectElement *This,IDispatch **p);
  void __RPC_STUB IHTMLSelectElement_get_options_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_put_onchange_Proxy(IHTMLSelectElement *This,VARIANT v);
  void __RPC_STUB IHTMLSelectElement_put_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_onchange_Proxy(IHTMLSelectElement *This,VARIANT *p);
  void __RPC_STUB IHTMLSelectElement_get_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_put_selectedIndex_Proxy(IHTMLSelectElement *This,long v);
  void __RPC_STUB IHTMLSelectElement_put_selectedIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_selectedIndex_Proxy(IHTMLSelectElement *This,long *p);
  void __RPC_STUB IHTMLSelectElement_get_selectedIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_type_Proxy(IHTMLSelectElement *This,BSTR *p);
  void __RPC_STUB IHTMLSelectElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_put_value_Proxy(IHTMLSelectElement *This,BSTR v);
  void __RPC_STUB IHTMLSelectElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_value_Proxy(IHTMLSelectElement *This,BSTR *p);
  void __RPC_STUB IHTMLSelectElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_put_disabled_Proxy(IHTMLSelectElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLSelectElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_disabled_Proxy(IHTMLSelectElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLSelectElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_form_Proxy(IHTMLSelectElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLSelectElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_add_Proxy(IHTMLSelectElement *This,IHTMLElement *element,VARIANT before);
  void __RPC_STUB IHTMLSelectElement_add_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_remove_Proxy(IHTMLSelectElement *This,long index);
  void __RPC_STUB IHTMLSelectElement_remove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_put_length_Proxy(IHTMLSelectElement *This,long v);
  void __RPC_STUB IHTMLSelectElement_put_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_length_Proxy(IHTMLSelectElement *This,long *p);
  void __RPC_STUB IHTMLSelectElement_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get__newEnum_Proxy(IHTMLSelectElement *This,IUnknown **p);
  void __RPC_STUB IHTMLSelectElement_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_item_Proxy(IHTMLSelectElement *This,VARIANT name,VARIANT index,IDispatch **pdisp);
  void __RPC_STUB IHTMLSelectElement_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_tags_Proxy(IHTMLSelectElement *This,VARIANT tagName,IDispatch **pdisp);
  void __RPC_STUB IHTMLSelectElement_tags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLSelectElement2_INTERFACE_DEFINED__
#define __IHTMLSelectElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLSelectElement2;
  struct IHTMLSelectElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI urns(VARIANT urn,IDispatch **pdisp) = 0;
  };
  HRESULT WINAPI IHTMLSelectElement2_urns_Proxy(IHTMLSelectElement2 *This,VARIANT urn,IDispatch **pdisp);
  void __RPC_STUB IHTMLSelectElement2_urns_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLSelectElement4_INTERFACE_DEFINED__
#define __IHTMLSelectElement4_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLSelectElement4;
  struct IHTMLSelectElement4 : public IDispatch {
  public:
    virtual HRESULT WINAPI namedItem(BSTR name,IDispatch **pdisp) = 0;
  };
  HRESULT WINAPI IHTMLSelectElement4_namedItem_Proxy(IHTMLSelectElement4 *This,BSTR name,IDispatch **pdisp);
  void __RPC_STUB IHTMLSelectElement4_namedItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLSelectElement_DISPINTERFACE_DEFINED__
#define __DispHTMLSelectElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLSelectElement;
  struct DispHTMLSelectElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLSelectElement;
#ifdef __cplusplus
  class HTMLSelectElement;
#endif

#ifndef __IHTMLSelectionObject_INTERFACE_DEFINED__
#define __IHTMLSelectionObject_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLSelectionObject;
  struct IHTMLSelectionObject : public IDispatch {
  public:
    virtual HRESULT WINAPI createRange(IDispatch **range) = 0;
    virtual HRESULT WINAPI empty(void) = 0;
    virtual HRESULT WINAPI clear(void) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLSelectionObject_createRange_Proxy(IHTMLSelectionObject *This,IDispatch **range);
  void __RPC_STUB IHTMLSelectionObject_createRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectionObject_empty_Proxy(IHTMLSelectionObject *This);
  void __RPC_STUB IHTMLSelectionObject_empty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectionObject_clear_Proxy(IHTMLSelectionObject *This);
  void __RPC_STUB IHTMLSelectionObject_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectionObject_get_type_Proxy(IHTMLSelectionObject *This,BSTR *p);
  void __RPC_STUB IHTMLSelectionObject_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLSelectionObject2_INTERFACE_DEFINED__
#define __IHTMLSelectionObject2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLSelectionObject2;
  struct IHTMLSelectionObject2 : public IDispatch {
  public:
    virtual HRESULT WINAPI createRangeCollection(IDispatch **rangeCollection) = 0;
    virtual HRESULT WINAPI get_typeDetail(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLSelectionObject2_createRangeCollection_Proxy(IHTMLSelectionObject2 *This,IDispatch **rangeCollection);
  void __RPC_STUB IHTMLSelectionObject2_createRangeCollection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectionObject2_get_typeDetail_Proxy(IHTMLSelectionObject2 *This,BSTR *p);
  void __RPC_STUB IHTMLSelectionObject2_get_typeDetail_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLOptionElement_INTERFACE_DEFINED__
#define __IHTMLOptionElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLOptionElement;
  struct IHTMLOptionElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_selected(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_selected(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI put_defaultSelected(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_defaultSelected(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_index(LONG v) = 0;
    virtual HRESULT WINAPI get_index(LONG *p) = 0;
    virtual HRESULT WINAPI put_text(BSTR v) = 0;
    virtual HRESULT WINAPI get_text(BSTR *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
  };
  HRESULT WINAPI IHTMLOptionElement_put_selected_Proxy(IHTMLOptionElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOptionElement_put_selected_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_get_selected_Proxy(IHTMLOptionElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOptionElement_get_selected_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_put_value_Proxy(IHTMLOptionElement *This,BSTR v);
  void __RPC_STUB IHTMLOptionElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_get_value_Proxy(IHTMLOptionElement *This,BSTR *p);
  void __RPC_STUB IHTMLOptionElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_put_defaultSelected_Proxy(IHTMLOptionElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOptionElement_put_defaultSelected_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_get_defaultSelected_Proxy(IHTMLOptionElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOptionElement_get_defaultSelected_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_put_index_Proxy(IHTMLOptionElement *This,LONG v);
  void __RPC_STUB IHTMLOptionElement_put_index_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_get_index_Proxy(IHTMLOptionElement *This,LONG *p);
  void __RPC_STUB IHTMLOptionElement_get_index_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_put_text_Proxy(IHTMLOptionElement *This,BSTR v);
  void __RPC_STUB IHTMLOptionElement_put_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_get_text_Proxy(IHTMLOptionElement *This,BSTR *p);
  void __RPC_STUB IHTMLOptionElement_get_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_get_form_Proxy(IHTMLOptionElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLOptionElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLOptionElement3_INTERFACE_DEFINED__
#define __IHTMLOptionElement3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLOptionElement3;
  struct IHTMLOptionElement3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_label(BSTR v) = 0;
    virtual HRESULT WINAPI get_label(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLOptionElement3_put_label_Proxy(IHTMLOptionElement3 *This,BSTR v);
  void __RPC_STUB IHTMLOptionElement3_put_label_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement3_get_label_Proxy(IHTMLOptionElement3 *This,BSTR *p);
  void __RPC_STUB IHTMLOptionElement3_get_label_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLOptionElementFactory_INTERFACE_DEFINED__
#define __IHTMLOptionElementFactory_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLOptionElementFactory;
  struct IHTMLOptionElementFactory : public IDispatch {
  public:
    virtual HRESULT WINAPI create(VARIANT text,VARIANT value,VARIANT defaultselected,VARIANT selected,IHTMLOptionElement **__MIDL_0012) = 0;
  };
  HRESULT WINAPI IHTMLOptionElementFactory_create_Proxy(IHTMLOptionElementFactory *This,VARIANT text,VARIANT value,VARIANT defaultselected,VARIANT selected,IHTMLOptionElement **__MIDL_0012);
  void __RPC_STUB IHTMLOptionElementFactory_create_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLOptionElement_DISPINTERFACE_DEFINED__
#define __DispHTMLOptionElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLOptionElement;
  struct DispHTMLOptionElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLOptionElement;
#ifdef __cplusplus
  class HTMLOptionElement;
#endif
  EXTERN_C const CLSID CLSID_HTMLOptionElementFactory;
#ifdef __cplusplus
  class HTMLOptionElementFactory;
#endif

#ifndef __HTMLButtonElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLButtonElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLButtonElementEvents2;
  struct HTMLButtonElementEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLButtonElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLButtonElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLButtonElementEvents;
  struct HTMLButtonElementEvents : public IDispatch {
  };
#endif

#ifndef __HTMLInputTextElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLInputTextElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLInputTextElementEvents2;
  struct HTMLInputTextElementEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLOptionButtonElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLOptionButtonElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLOptionButtonElementEvents2;
  struct HTMLOptionButtonElementEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLInputFileElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLInputFileElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLInputFileElementEvents2;
  struct HTMLInputFileElementEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLInputImageEvents2_DISPINTERFACE_DEFINED__
#define __HTMLInputImageEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLInputImageEvents2;
  struct HTMLInputImageEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLInputTextElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLInputTextElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLInputTextElementEvents;
  struct HTMLInputTextElementEvents : public IDispatch {
  };
#endif

#ifndef __HTMLOptionButtonElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLOptionButtonElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLOptionButtonElementEvents;
  struct HTMLOptionButtonElementEvents : public IDispatch {
  };
#endif

#ifndef __HTMLInputFileElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLInputFileElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLInputFileElementEvents;
  struct HTMLInputFileElementEvents : public IDispatch {
  };
#endif

#ifndef __HTMLInputImageEvents_DISPINTERFACE_DEFINED__
#define __HTMLInputImageEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLInputImageEvents;
  struct HTMLInputImageEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLInputElement_INTERFACE_DEFINED__
#define __IHTMLInputElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLInputElement;
  struct IHTMLInputElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_status(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_status(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
    virtual HRESULT WINAPI put_size(long v) = 0;
    virtual HRESULT WINAPI get_size(long *p) = 0;
    virtual HRESULT WINAPI put_maxLength(long v) = 0;
    virtual HRESULT WINAPI get_maxLength(long *p) = 0;
    virtual HRESULT WINAPI select(void) = 0;
    virtual HRESULT WINAPI put_onchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onselect(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onselect(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_defaultValue(BSTR v) = 0;
    virtual HRESULT WINAPI get_defaultValue(BSTR *p) = 0;
    virtual HRESULT WINAPI put_readOnly(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_readOnly(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI createTextRange(IHTMLTxtRange **range) = 0;
    virtual HRESULT WINAPI put_indeterminate(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_indeterminate(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_defaultChecked(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_defaultChecked(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_checked(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_checked(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_border(VARIANT v) = 0;
    virtual HRESULT WINAPI get_border(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_vspace(long v) = 0;
    virtual HRESULT WINAPI get_vspace(long *p) = 0;
    virtual HRESULT WINAPI put_hspace(long v) = 0;
    virtual HRESULT WINAPI get_hspace(long *p) = 0;
    virtual HRESULT WINAPI put_alt(BSTR v) = 0;
    virtual HRESULT WINAPI get_alt(BSTR *p) = 0;
    virtual HRESULT WINAPI put_src(BSTR v) = 0;
    virtual HRESULT WINAPI get_src(BSTR *p) = 0;
    virtual HRESULT WINAPI put_lowsrc(BSTR v) = 0;
    virtual HRESULT WINAPI get_lowsrc(BSTR *p) = 0;
    virtual HRESULT WINAPI put_vrml(BSTR v) = 0;
    virtual HRESULT WINAPI get_vrml(BSTR *p) = 0;
    virtual HRESULT WINAPI put_dynsrc(BSTR v) = 0;
    virtual HRESULT WINAPI get_dynsrc(BSTR *p) = 0;
    virtual HRESULT WINAPI get_readyState(BSTR *p) = 0;
    virtual HRESULT WINAPI get_complete(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_loop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_loop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onerror(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerror(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onabort(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onabort(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_width(long v) = 0;
    virtual HRESULT WINAPI get_width(long *p) = 0;
    virtual HRESULT WINAPI put_height(long v) = 0;
    virtual HRESULT WINAPI get_height(long *p) = 0;
    virtual HRESULT WINAPI put_start(BSTR v) = 0;
    virtual HRESULT WINAPI get_start(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLInputElement_put_type_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_type_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_value_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_value_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_name_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_name_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_status_Proxy(IHTMLInputElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputElement_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_status_Proxy(IHTMLInputElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputElement_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_disabled_Proxy(IHTMLInputElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_disabled_Proxy(IHTMLInputElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_form_Proxy(IHTMLInputElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLInputElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_size_Proxy(IHTMLInputElement *This,long v);
  void __RPC_STUB IHTMLInputElement_put_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_size_Proxy(IHTMLInputElement *This,long *p);
  void __RPC_STUB IHTMLInputElement_get_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_maxLength_Proxy(IHTMLInputElement *This,long v);
  void __RPC_STUB IHTMLInputElement_put_maxLength_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_maxLength_Proxy(IHTMLInputElement *This,long *p);
  void __RPC_STUB IHTMLInputElement_get_maxLength_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_select_Proxy(IHTMLInputElement *This);
  void __RPC_STUB IHTMLInputElement_select_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_onchange_Proxy(IHTMLInputElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputElement_put_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_onchange_Proxy(IHTMLInputElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputElement_get_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_onselect_Proxy(IHTMLInputElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputElement_put_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_onselect_Proxy(IHTMLInputElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputElement_get_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_defaultValue_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_defaultValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_defaultValue_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_defaultValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_readOnly_Proxy(IHTMLInputElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputElement_put_readOnly_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_readOnly_Proxy(IHTMLInputElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputElement_get_readOnly_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_createTextRange_Proxy(IHTMLInputElement *This,IHTMLTxtRange **range);
  void __RPC_STUB IHTMLInputElement_createTextRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_indeterminate_Proxy(IHTMLInputElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputElement_put_indeterminate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_indeterminate_Proxy(IHTMLInputElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputElement_get_indeterminate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_defaultChecked_Proxy(IHTMLInputElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputElement_put_defaultChecked_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_defaultChecked_Proxy(IHTMLInputElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputElement_get_defaultChecked_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_checked_Proxy(IHTMLInputElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputElement_put_checked_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_checked_Proxy(IHTMLInputElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputElement_get_checked_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_border_Proxy(IHTMLInputElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputElement_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_border_Proxy(IHTMLInputElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputElement_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_vspace_Proxy(IHTMLInputElement *This,long v);
  void __RPC_STUB IHTMLInputElement_put_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_vspace_Proxy(IHTMLInputElement *This,long *p);
  void __RPC_STUB IHTMLInputElement_get_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_hspace_Proxy(IHTMLInputElement *This,long v);
  void __RPC_STUB IHTMLInputElement_put_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_hspace_Proxy(IHTMLInputElement *This,long *p);
  void __RPC_STUB IHTMLInputElement_get_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_alt_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_alt_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_src_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_src_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_lowsrc_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_lowsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_lowsrc_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_lowsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_vrml_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_vrml_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_vrml_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_vrml_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_dynsrc_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_dynsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_dynsrc_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_dynsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_readyState_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_complete_Proxy(IHTMLInputElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputElement_get_complete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_loop_Proxy(IHTMLInputElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputElement_put_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_loop_Proxy(IHTMLInputElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputElement_get_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_align_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_align_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_onload_Proxy(IHTMLInputElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputElement_put_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_onload_Proxy(IHTMLInputElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputElement_get_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_onerror_Proxy(IHTMLInputElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputElement_put_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_onerror_Proxy(IHTMLInputElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputElement_get_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_onabort_Proxy(IHTMLInputElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputElement_put_onabort_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_onabort_Proxy(IHTMLInputElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputElement_get_onabort_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_width_Proxy(IHTMLInputElement *This,long v);
  void __RPC_STUB IHTMLInputElement_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_width_Proxy(IHTMLInputElement *This,long *p);
  void __RPC_STUB IHTMLInputElement_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_height_Proxy(IHTMLInputElement *This,long v);
  void __RPC_STUB IHTMLInputElement_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_height_Proxy(IHTMLInputElement *This,long *p);
  void __RPC_STUB IHTMLInputElement_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_start_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_start_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_start_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_start_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLInputElement2_INTERFACE_DEFINED__
#define __IHTMLInputElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLInputElement2;
  struct IHTMLInputElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_accept(BSTR v) = 0;
    virtual HRESULT WINAPI get_accept(BSTR *p) = 0;
    virtual HRESULT WINAPI put_useMap(BSTR v) = 0;
    virtual HRESULT WINAPI get_useMap(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLInputElement2_put_accept_Proxy(IHTMLInputElement2 *This,BSTR v);
  void __RPC_STUB IHTMLInputElement2_put_accept_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement2_get_accept_Proxy(IHTMLInputElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement2_get_accept_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement2_put_useMap_Proxy(IHTMLInputElement2 *This,BSTR v);
  void __RPC_STUB IHTMLInputElement2_put_useMap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement2_get_useMap_Proxy(IHTMLInputElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement2_get_useMap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLInputButtonElement_INTERFACE_DEFINED__
#define __IHTMLInputButtonElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLInputButtonElement;
  struct IHTMLInputButtonElement : public IDispatch {
  public:
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_status(VARIANT v) = 0;
    virtual HRESULT WINAPI get_status(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
    virtual HRESULT WINAPI createTextRange(IHTMLTxtRange **range) = 0;
  };
  HRESULT WINAPI IHTMLInputButtonElement_get_type_Proxy(IHTMLInputButtonElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputButtonElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_put_value_Proxy(IHTMLInputButtonElement *This,BSTR v);
  void __RPC_STUB IHTMLInputButtonElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_get_value_Proxy(IHTMLInputButtonElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputButtonElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_put_name_Proxy(IHTMLInputButtonElement *This,BSTR v);
  void __RPC_STUB IHTMLInputButtonElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_get_name_Proxy(IHTMLInputButtonElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputButtonElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_put_status_Proxy(IHTMLInputButtonElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputButtonElement_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_get_status_Proxy(IHTMLInputButtonElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputButtonElement_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_put_disabled_Proxy(IHTMLInputButtonElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputButtonElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_get_disabled_Proxy(IHTMLInputButtonElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputButtonElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_get_form_Proxy(IHTMLInputButtonElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLInputButtonElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_createTextRange_Proxy(IHTMLInputButtonElement *This,IHTMLTxtRange **range);
  void __RPC_STUB IHTMLInputButtonElement_createTextRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLInputHiddenElement_INTERFACE_DEFINED__
#define __IHTMLInputHiddenElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLInputHiddenElement;
  struct IHTMLInputHiddenElement : public IDispatch {
  public:
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_status(VARIANT v) = 0;
    virtual HRESULT WINAPI get_status(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
    virtual HRESULT WINAPI createTextRange(IHTMLTxtRange **range) = 0;
  };
  HRESULT WINAPI IHTMLInputHiddenElement_get_type_Proxy(IHTMLInputHiddenElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputHiddenElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_put_value_Proxy(IHTMLInputHiddenElement *This,BSTR v);
  void __RPC_STUB IHTMLInputHiddenElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_get_value_Proxy(IHTMLInputHiddenElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputHiddenElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_put_name_Proxy(IHTMLInputHiddenElement *This,BSTR v);
  void __RPC_STUB IHTMLInputHiddenElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_get_name_Proxy(IHTMLInputHiddenElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputHiddenElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_put_status_Proxy(IHTMLInputHiddenElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputHiddenElement_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_get_status_Proxy(IHTMLInputHiddenElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputHiddenElement_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_put_disabled_Proxy(IHTMLInputHiddenElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputHiddenElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_get_disabled_Proxy(IHTMLInputHiddenElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputHiddenElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_get_form_Proxy(IHTMLInputHiddenElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLInputHiddenElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_createTextRange_Proxy(IHTMLInputHiddenElement *This,IHTMLTxtRange **range);
  void __RPC_STUB IHTMLInputHiddenElement_createTextRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLInputTextElement_INTERFACE_DEFINED__
#define __IHTMLInputTextElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLInputTextElement;
  struct IHTMLInputTextElement : public IDispatch {
  public:
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_status(VARIANT v) = 0;
    virtual HRESULT WINAPI get_status(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
    virtual HRESULT WINAPI put_defaultValue(BSTR v) = 0;
    virtual HRESULT WINAPI get_defaultValue(BSTR *p) = 0;
    virtual HRESULT WINAPI put_size(long v) = 0;
    virtual HRESULT WINAPI get_size(long *p) = 0;
    virtual HRESULT WINAPI put_maxLength(long v) = 0;
    virtual HRESULT WINAPI get_maxLength(long *p) = 0;
    virtual HRESULT WINAPI select(void) = 0;
    virtual HRESULT WINAPI put_onchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onselect(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onselect(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_readOnly(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_readOnly(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI createTextRange(IHTMLTxtRange **range) = 0;
  };
  HRESULT WINAPI IHTMLInputTextElement_get_type_Proxy(IHTMLInputTextElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputTextElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_value_Proxy(IHTMLInputTextElement *This,BSTR v);
  void __RPC_STUB IHTMLInputTextElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_value_Proxy(IHTMLInputTextElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputTextElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_name_Proxy(IHTMLInputTextElement *This,BSTR v);
  void __RPC_STUB IHTMLInputTextElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_name_Proxy(IHTMLInputTextElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputTextElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_status_Proxy(IHTMLInputTextElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputTextElement_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_status_Proxy(IHTMLInputTextElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputTextElement_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_disabled_Proxy(IHTMLInputTextElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputTextElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_disabled_Proxy(IHTMLInputTextElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputTextElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_form_Proxy(IHTMLInputTextElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLInputTextElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_defaultValue_Proxy(IHTMLInputTextElement *This,BSTR v);
  void __RPC_STUB IHTMLInputTextElement_put_defaultValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_defaultValue_Proxy(IHTMLInputTextElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputTextElement_get_defaultValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_size_Proxy(IHTMLInputTextElement *This,long v);
  void __RPC_STUB IHTMLInputTextElement_put_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_size_Proxy(IHTMLInputTextElement *This,long *p);
  void __RPC_STUB IHTMLInputTextElement_get_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_maxLength_Proxy(IHTMLInputTextElement *This,long v);
  void __RPC_STUB IHTMLInputTextElement_put_maxLength_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_maxLength_Proxy(IHTMLInputTextElement *This,long *p);
  void __RPC_STUB IHTMLInputTextElement_get_maxLength_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_select_Proxy(IHTMLInputTextElement *This);
  void __RPC_STUB IHTMLInputTextElement_select_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_onchange_Proxy(IHTMLInputTextElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputTextElement_put_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_onchange_Proxy(IHTMLInputTextElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputTextElement_get_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_onselect_Proxy(IHTMLInputTextElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputTextElement_put_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_onselect_Proxy(IHTMLInputTextElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputTextElement_get_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_readOnly_Proxy(IHTMLInputTextElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputTextElement_put_readOnly_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_readOnly_Proxy(IHTMLInputTextElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputTextElement_get_readOnly_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_createTextRange_Proxy(IHTMLInputTextElement *This,IHTMLTxtRange **range);
  void __RPC_STUB IHTMLInputTextElement_createTextRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLInputFileElement_INTERFACE_DEFINED__
#define __IHTMLInputFileElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLInputFileElement;
  struct IHTMLInputFileElement : public IDispatch {
  public:
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_status(VARIANT v) = 0;
    virtual HRESULT WINAPI get_status(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
    virtual HRESULT WINAPI put_size(long v) = 0;
    virtual HRESULT WINAPI get_size(long *p) = 0;
    virtual HRESULT WINAPI put_maxLength(long v) = 0;
    virtual HRESULT WINAPI get_maxLength(long *p) = 0;
    virtual HRESULT WINAPI select(void) = 0;
    virtual HRESULT WINAPI put_onchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onselect(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onselect(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLInputFileElement_get_type_Proxy(IHTMLInputFileElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputFileElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_put_name_Proxy(IHTMLInputFileElement *This,BSTR v);
  void __RPC_STUB IHTMLInputFileElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_get_name_Proxy(IHTMLInputFileElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputFileElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_put_status_Proxy(IHTMLInputFileElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputFileElement_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_get_status_Proxy(IHTMLInputFileElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputFileElement_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_put_disabled_Proxy(IHTMLInputFileElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputFileElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_get_disabled_Proxy(IHTMLInputFileElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputFileElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_get_form_Proxy(IHTMLInputFileElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLInputFileElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_put_size_Proxy(IHTMLInputFileElement *This,long v);
  void __RPC_STUB IHTMLInputFileElement_put_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_get_size_Proxy(IHTMLInputFileElement *This,long *p);
  void __RPC_STUB IHTMLInputFileElement_get_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_put_maxLength_Proxy(IHTMLInputFileElement *This,long v);
  void __RPC_STUB IHTMLInputFileElement_put_maxLength_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_get_maxLength_Proxy(IHTMLInputFileElement *This,long *p);
  void __RPC_STUB IHTMLInputFileElement_get_maxLength_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_select_Proxy(IHTMLInputFileElement *This);
  void __RPC_STUB IHTMLInputFileElement_select_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_put_onchange_Proxy(IHTMLInputFileElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputFileElement_put_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_get_onchange_Proxy(IHTMLInputFileElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputFileElement_get_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_put_onselect_Proxy(IHTMLInputFileElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputFileElement_put_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_get_onselect_Proxy(IHTMLInputFileElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputFileElement_get_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_put_value_Proxy(IHTMLInputFileElement *This,BSTR v);
  void __RPC_STUB IHTMLInputFileElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_get_value_Proxy(IHTMLInputFileElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputFileElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLOptionButtonElement_INTERFACE_DEFINED__
#define __IHTMLOptionButtonElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLOptionButtonElement;
  struct IHTMLOptionButtonElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_checked(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_checked(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_defaultChecked(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_defaultChecked(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_onchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_status(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_status(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_indeterminate(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_indeterminate(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
  };
  HRESULT WINAPI IHTMLOptionButtonElement_put_value_Proxy(IHTMLOptionButtonElement *This,BSTR v);
  void __RPC_STUB IHTMLOptionButtonElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_value_Proxy(IHTMLOptionButtonElement *This,BSTR *p);
  void __RPC_STUB IHTMLOptionButtonElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_type_Proxy(IHTMLOptionButtonElement *This,BSTR *p);
  void __RPC_STUB IHTMLOptionButtonElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_put_name_Proxy(IHTMLOptionButtonElement *This,BSTR v);
  void __RPC_STUB IHTMLOptionButtonElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_name_Proxy(IHTMLOptionButtonElement *This,BSTR *p);
  void __RPC_STUB IHTMLOptionButtonElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_put_checked_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOptionButtonElement_put_checked_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_checked_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOptionButtonElement_get_checked_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_put_defaultChecked_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOptionButtonElement_put_defaultChecked_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_defaultChecked_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOptionButtonElement_get_defaultChecked_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_put_onchange_Proxy(IHTMLOptionButtonElement *This,VARIANT v);
  void __RPC_STUB IHTMLOptionButtonElement_put_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_onchange_Proxy(IHTMLOptionButtonElement *This,VARIANT *p);
  void __RPC_STUB IHTMLOptionButtonElement_get_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_put_disabled_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOptionButtonElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_disabled_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOptionButtonElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_put_status_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOptionButtonElement_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_status_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOptionButtonElement_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_put_indeterminate_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOptionButtonElement_put_indeterminate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_indeterminate_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOptionButtonElement_get_indeterminate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_form_Proxy(IHTMLOptionButtonElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLOptionButtonElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLInputImage_INTERFACE_DEFINED__
#define __IHTMLInputImage_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLInputImage;
  struct IHTMLInputImage : public IDispatch {
  public:
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_border(VARIANT v) = 0;
    virtual HRESULT WINAPI get_border(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_vspace(long v) = 0;
    virtual HRESULT WINAPI get_vspace(long *p) = 0;
    virtual HRESULT WINAPI put_hspace(long v) = 0;
    virtual HRESULT WINAPI get_hspace(long *p) = 0;
    virtual HRESULT WINAPI put_alt(BSTR v) = 0;
    virtual HRESULT WINAPI get_alt(BSTR *p) = 0;
    virtual HRESULT WINAPI put_src(BSTR v) = 0;
    virtual HRESULT WINAPI get_src(BSTR *p) = 0;
    virtual HRESULT WINAPI put_lowsrc(BSTR v) = 0;
    virtual HRESULT WINAPI get_lowsrc(BSTR *p) = 0;
    virtual HRESULT WINAPI put_vrml(BSTR v) = 0;
    virtual HRESULT WINAPI get_vrml(BSTR *p) = 0;
    virtual HRESULT WINAPI put_dynsrc(BSTR v) = 0;
    virtual HRESULT WINAPI get_dynsrc(BSTR *p) = 0;
    virtual HRESULT WINAPI get_readyState(BSTR *p) = 0;
    virtual HRESULT WINAPI get_complete(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_loop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_loop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onerror(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerror(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onabort(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onabort(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_width(long v) = 0;
    virtual HRESULT WINAPI get_width(long *p) = 0;
    virtual HRESULT WINAPI put_height(long v) = 0;
    virtual HRESULT WINAPI get_height(long *p) = 0;
    virtual HRESULT WINAPI put_start(BSTR v) = 0;
    virtual HRESULT WINAPI get_start(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLInputImage_get_type_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_disabled_Proxy(IHTMLInputImage *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputImage_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_disabled_Proxy(IHTMLInputImage *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputImage_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_border_Proxy(IHTMLInputImage *This,VARIANT v);
  void __RPC_STUB IHTMLInputImage_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_border_Proxy(IHTMLInputImage *This,VARIANT *p);
  void __RPC_STUB IHTMLInputImage_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_vspace_Proxy(IHTMLInputImage *This,long v);
  void __RPC_STUB IHTMLInputImage_put_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_vspace_Proxy(IHTMLInputImage *This,long *p);
  void __RPC_STUB IHTMLInputImage_get_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_hspace_Proxy(IHTMLInputImage *This,long v);
  void __RPC_STUB IHTMLInputImage_put_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_hspace_Proxy(IHTMLInputImage *This,long *p);
  void __RPC_STUB IHTMLInputImage_get_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_alt_Proxy(IHTMLInputImage *This,BSTR v);
  void __RPC_STUB IHTMLInputImage_put_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_alt_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_src_Proxy(IHTMLInputImage *This,BSTR v);
  void __RPC_STUB IHTMLInputImage_put_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_src_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_lowsrc_Proxy(IHTMLInputImage *This,BSTR v);
  void __RPC_STUB IHTMLInputImage_put_lowsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_lowsrc_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_lowsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_vrml_Proxy(IHTMLInputImage *This,BSTR v);
  void __RPC_STUB IHTMLInputImage_put_vrml_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_vrml_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_vrml_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_dynsrc_Proxy(IHTMLInputImage *This,BSTR v);
  void __RPC_STUB IHTMLInputImage_put_dynsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_dynsrc_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_dynsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_readyState_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_complete_Proxy(IHTMLInputImage *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputImage_get_complete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_loop_Proxy(IHTMLInputImage *This,VARIANT v);
  void __RPC_STUB IHTMLInputImage_put_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_loop_Proxy(IHTMLInputImage *This,VARIANT *p);
  void __RPC_STUB IHTMLInputImage_get_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_align_Proxy(IHTMLInputImage *This,BSTR v);
  void __RPC_STUB IHTMLInputImage_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_align_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_onload_Proxy(IHTMLInputImage *This,VARIANT v);
  void __RPC_STUB IHTMLInputImage_put_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_onload_Proxy(IHTMLInputImage *This,VARIANT *p);
  void __RPC_STUB IHTMLInputImage_get_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_onerror_Proxy(IHTMLInputImage *This,VARIANT v);
  void __RPC_STUB IHTMLInputImage_put_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_onerror_Proxy(IHTMLInputImage *This,VARIANT *p);
  void __RPC_STUB IHTMLInputImage_get_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_onabort_Proxy(IHTMLInputImage *This,VARIANT v);
  void __RPC_STUB IHTMLInputImage_put_onabort_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_onabort_Proxy(IHTMLInputImage *This,VARIANT *p);
  void __RPC_STUB IHTMLInputImage_get_onabort_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_name_Proxy(IHTMLInputImage *This,BSTR v);
  void __RPC_STUB IHTMLInputImage_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_name_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_width_Proxy(IHTMLInputImage *This,long v);
  void __RPC_STUB IHTMLInputImage_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_width_Proxy(IHTMLInputImage *This,long *p);
  void __RPC_STUB IHTMLInputImage_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_height_Proxy(IHTMLInputImage *This,long v);
  void __RPC_STUB IHTMLInputImage_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_height_Proxy(IHTMLInputImage *This,long *p);
  void __RPC_STUB IHTMLInputImage_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_start_Proxy(IHTMLInputImage *This,BSTR v);
  void __RPC_STUB IHTMLInputImage_put_start_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_start_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_start_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLInputElement_DISPINTERFACE_DEFINED__
#define __DispHTMLInputElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLInputElement;
  struct DispHTMLInputElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLInputElement;
#ifdef __cplusplus
  class HTMLInputElement;
#endif

#ifndef __IHTMLTextAreaElement_INTERFACE_DEFINED__
#define __IHTMLTextAreaElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTextAreaElement;
  struct IHTMLTextAreaElement : public IDispatch {
  public:
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_status(VARIANT v) = 0;
    virtual HRESULT WINAPI get_status(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
    virtual HRESULT WINAPI put_defaultValue(BSTR v) = 0;
    virtual HRESULT WINAPI get_defaultValue(BSTR *p) = 0;
    virtual HRESULT WINAPI select(void) = 0;
    virtual HRESULT WINAPI put_onchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onselect(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onselect(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_readOnly(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_readOnly(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_rows(long v) = 0;
    virtual HRESULT WINAPI get_rows(long *p) = 0;
    virtual HRESULT WINAPI put_cols(long v) = 0;
    virtual HRESULT WINAPI get_cols(long *p) = 0;
    virtual HRESULT WINAPI put_wrap(BSTR v) = 0;
    virtual HRESULT WINAPI get_wrap(BSTR *p) = 0;
    virtual HRESULT WINAPI createTextRange(IHTMLTxtRange **range) = 0;
  };
  HRESULT WINAPI IHTMLTextAreaElement_get_type_Proxy(IHTMLTextAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLTextAreaElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_value_Proxy(IHTMLTextAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLTextAreaElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_value_Proxy(IHTMLTextAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLTextAreaElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_name_Proxy(IHTMLTextAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLTextAreaElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_name_Proxy(IHTMLTextAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLTextAreaElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_status_Proxy(IHTMLTextAreaElement *This,VARIANT v);
  void __RPC_STUB IHTMLTextAreaElement_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_status_Proxy(IHTMLTextAreaElement *This,VARIANT *p);
  void __RPC_STUB IHTMLTextAreaElement_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_disabled_Proxy(IHTMLTextAreaElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLTextAreaElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_disabled_Proxy(IHTMLTextAreaElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLTextAreaElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_form_Proxy(IHTMLTextAreaElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLTextAreaElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_defaultValue_Proxy(IHTMLTextAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLTextAreaElement_put_defaultValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_defaultValue_Proxy(IHTMLTextAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLTextAreaElement_get_defaultValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_select_Proxy(IHTMLTextAreaElement *This);
  void __RPC_STUB IHTMLTextAreaElement_select_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_onchange_Proxy(IHTMLTextAreaElement *This,VARIANT v);
  void __RPC_STUB IHTMLTextAreaElement_put_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_onchange_Proxy(IHTMLTextAreaElement *This,VARIANT *p);
  void __RPC_STUB IHTMLTextAreaElement_get_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_onselect_Proxy(IHTMLTextAreaElement *This,VARIANT v);
  void __RPC_STUB IHTMLTextAreaElement_put_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_onselect_Proxy(IHTMLTextAreaElement *This,VARIANT *p);
  void __RPC_STUB IHTMLTextAreaElement_get_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_readOnly_Proxy(IHTMLTextAreaElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLTextAreaElement_put_readOnly_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_readOnly_Proxy(IHTMLTextAreaElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLTextAreaElement_get_readOnly_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_rows_Proxy(IHTMLTextAreaElement *This,long v);
  void __RPC_STUB IHTMLTextAreaElement_put_rows_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_rows_Proxy(IHTMLTextAreaElement *This,long *p);
  void __RPC_STUB IHTMLTextAreaElement_get_rows_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_cols_Proxy(IHTMLTextAreaElement *This,long v);
  void __RPC_STUB IHTMLTextAreaElement_put_cols_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_cols_Proxy(IHTMLTextAreaElement *This,long *p);
  void __RPC_STUB IHTMLTextAreaElement_get_cols_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_wrap_Proxy(IHTMLTextAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLTextAreaElement_put_wrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_wrap_Proxy(IHTMLTextAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLTextAreaElement_get_wrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_createTextRange_Proxy(IHTMLTextAreaElement *This,IHTMLTxtRange **range);
  void __RPC_STUB IHTMLTextAreaElement_createTextRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLTextAreaElement_DISPINTERFACE_DEFINED__
#define __DispHTMLTextAreaElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLTextAreaElement;
  struct DispHTMLTextAreaElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLTextAreaElement;
#ifdef __cplusplus
  class HTMLTextAreaElement;
#endif

#ifndef __DispHTMLRichtextElement_DISPINTERFACE_DEFINED__
#define __DispHTMLRichtextElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLRichtextElement;
  struct DispHTMLRichtextElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLRichtextElement;
#ifdef __cplusplus
  class HTMLRichtextElement;
#endif

#ifndef __IHTMLButtonElement_INTERFACE_DEFINED__
#define __IHTMLButtonElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLButtonElement;
  struct IHTMLButtonElement : public IDispatch {
  public:
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_status(VARIANT v) = 0;
    virtual HRESULT WINAPI get_status(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
    virtual HRESULT WINAPI createTextRange(IHTMLTxtRange **range) = 0;
  };
  HRESULT WINAPI IHTMLButtonElement_get_type_Proxy(IHTMLButtonElement *This,BSTR *p);
  void __RPC_STUB IHTMLButtonElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_put_value_Proxy(IHTMLButtonElement *This,BSTR v);
  void __RPC_STUB IHTMLButtonElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_get_value_Proxy(IHTMLButtonElement *This,BSTR *p);
  void __RPC_STUB IHTMLButtonElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_put_name_Proxy(IHTMLButtonElement *This,BSTR v);
  void __RPC_STUB IHTMLButtonElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_get_name_Proxy(IHTMLButtonElement *This,BSTR *p);
  void __RPC_STUB IHTMLButtonElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_put_status_Proxy(IHTMLButtonElement *This,VARIANT v);
  void __RPC_STUB IHTMLButtonElement_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_get_status_Proxy(IHTMLButtonElement *This,VARIANT *p);
  void __RPC_STUB IHTMLButtonElement_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_put_disabled_Proxy(IHTMLButtonElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLButtonElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_get_disabled_Proxy(IHTMLButtonElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLButtonElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_get_form_Proxy(IHTMLButtonElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLButtonElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_createTextRange_Proxy(IHTMLButtonElement *This,IHTMLTxtRange **range);
  void __RPC_STUB IHTMLButtonElement_createTextRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLButtonElement_DISPINTERFACE_DEFINED__
#define __DispHTMLButtonElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLButtonElement;
  struct DispHTMLButtonElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLButtonElement;
#ifdef __cplusplus
  class HTMLButtonElement;
#endif

#ifndef __HTMLMarqueeElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLMarqueeElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLMarqueeElementEvents2;
  struct HTMLMarqueeElementEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLMarqueeElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLMarqueeElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLMarqueeElementEvents;
  struct HTMLMarqueeElementEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLMarqueeElement_INTERFACE_DEFINED__
#define __IHTMLMarqueeElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLMarqueeElement;
  struct IHTMLMarqueeElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_bgColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bgColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollDelay(long v) = 0;
    virtual HRESULT WINAPI get_scrollDelay(long *p) = 0;
    virtual HRESULT WINAPI put_direction(BSTR v) = 0;
    virtual HRESULT WINAPI get_direction(BSTR *p) = 0;
    virtual HRESULT WINAPI put_behavior(BSTR v) = 0;
    virtual HRESULT WINAPI get_behavior(BSTR *p) = 0;
    virtual HRESULT WINAPI put_scrollAmount(long v) = 0;
    virtual HRESULT WINAPI get_scrollAmount(long *p) = 0;
    virtual HRESULT WINAPI put_loop(long v) = 0;
    virtual HRESULT WINAPI get_loop(long *p) = 0;
    virtual HRESULT WINAPI put_vspace(long v) = 0;
    virtual HRESULT WINAPI get_vspace(long *p) = 0;
    virtual HRESULT WINAPI put_hspace(long v) = 0;
    virtual HRESULT WINAPI get_hspace(long *p) = 0;
    virtual HRESULT WINAPI put_onfinish(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfinish(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onstart(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onstart(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onbounce(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbounce(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_trueSpeed(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_trueSpeed(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI start(void) = 0;
    virtual HRESULT WINAPI stop(void) = 0;
  };
  HRESULT WINAPI IHTMLMarqueeElement_put_bgColor_Proxy(IHTMLMarqueeElement *This,VARIANT v);
  void __RPC_STUB IHTMLMarqueeElement_put_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_bgColor_Proxy(IHTMLMarqueeElement *This,VARIANT *p);
  void __RPC_STUB IHTMLMarqueeElement_get_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_scrollDelay_Proxy(IHTMLMarqueeElement *This,long v);
  void __RPC_STUB IHTMLMarqueeElement_put_scrollDelay_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_scrollDelay_Proxy(IHTMLMarqueeElement *This,long *p);
  void __RPC_STUB IHTMLMarqueeElement_get_scrollDelay_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_direction_Proxy(IHTMLMarqueeElement *This,BSTR v);
  void __RPC_STUB IHTMLMarqueeElement_put_direction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_direction_Proxy(IHTMLMarqueeElement *This,BSTR *p);
  void __RPC_STUB IHTMLMarqueeElement_get_direction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_behavior_Proxy(IHTMLMarqueeElement *This,BSTR v);
  void __RPC_STUB IHTMLMarqueeElement_put_behavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_behavior_Proxy(IHTMLMarqueeElement *This,BSTR *p);
  void __RPC_STUB IHTMLMarqueeElement_get_behavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_scrollAmount_Proxy(IHTMLMarqueeElement *This,long v);
  void __RPC_STUB IHTMLMarqueeElement_put_scrollAmount_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_scrollAmount_Proxy(IHTMLMarqueeElement *This,long *p);
  void __RPC_STUB IHTMLMarqueeElement_get_scrollAmount_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_loop_Proxy(IHTMLMarqueeElement *This,long v);
  void __RPC_STUB IHTMLMarqueeElement_put_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_loop_Proxy(IHTMLMarqueeElement *This,long *p);
  void __RPC_STUB IHTMLMarqueeElement_get_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_vspace_Proxy(IHTMLMarqueeElement *This,long v);
  void __RPC_STUB IHTMLMarqueeElement_put_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_vspace_Proxy(IHTMLMarqueeElement *This,long *p);
  void __RPC_STUB IHTMLMarqueeElement_get_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_hspace_Proxy(IHTMLMarqueeElement *This,long v);
  void __RPC_STUB IHTMLMarqueeElement_put_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_hspace_Proxy(IHTMLMarqueeElement *This,long *p);
  void __RPC_STUB IHTMLMarqueeElement_get_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_onfinish_Proxy(IHTMLMarqueeElement *This,VARIANT v);
  void __RPC_STUB IHTMLMarqueeElement_put_onfinish_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_onfinish_Proxy(IHTMLMarqueeElement *This,VARIANT *p);
  void __RPC_STUB IHTMLMarqueeElement_get_onfinish_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_onstart_Proxy(IHTMLMarqueeElement *This,VARIANT v);
  void __RPC_STUB IHTMLMarqueeElement_put_onstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_onstart_Proxy(IHTMLMarqueeElement *This,VARIANT *p);
  void __RPC_STUB IHTMLMarqueeElement_get_onstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_onbounce_Proxy(IHTMLMarqueeElement *This,VARIANT v);
  void __RPC_STUB IHTMLMarqueeElement_put_onbounce_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_onbounce_Proxy(IHTMLMarqueeElement *This,VARIANT *p);
  void __RPC_STUB IHTMLMarqueeElement_get_onbounce_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_width_Proxy(IHTMLMarqueeElement *This,VARIANT v);
  void __RPC_STUB IHTMLMarqueeElement_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_width_Proxy(IHTMLMarqueeElement *This,VARIANT *p);
  void __RPC_STUB IHTMLMarqueeElement_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_height_Proxy(IHTMLMarqueeElement *This,VARIANT v);
  void __RPC_STUB IHTMLMarqueeElement_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_height_Proxy(IHTMLMarqueeElement *This,VARIANT *p);
  void __RPC_STUB IHTMLMarqueeElement_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_trueSpeed_Proxy(IHTMLMarqueeElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLMarqueeElement_put_trueSpeed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_trueSpeed_Proxy(IHTMLMarqueeElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLMarqueeElement_get_trueSpeed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_start_Proxy(IHTMLMarqueeElement *This);
  void __RPC_STUB IHTMLMarqueeElement_start_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_stop_Proxy(IHTMLMarqueeElement *This);
  void __RPC_STUB IHTMLMarqueeElement_stop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLMarqueeElement_DISPINTERFACE_DEFINED__
#define __DispHTMLMarqueeElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLMarqueeElement;
  struct DispHTMLMarqueeElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLMarqueeElement;
#ifdef __cplusplus
  class HTMLMarqueeElement;
#endif

#ifndef __IHTMLHtmlElement_INTERFACE_DEFINED__
#define __IHTMLHtmlElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLHtmlElement;
  struct IHTMLHtmlElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_version(BSTR v) = 0;
    virtual HRESULT WINAPI get_version(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLHtmlElement_put_version_Proxy(IHTMLHtmlElement *This,BSTR v);
  void __RPC_STUB IHTMLHtmlElement_put_version_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHtmlElement_get_version_Proxy(IHTMLHtmlElement *This,BSTR *p);
  void __RPC_STUB IHTMLHtmlElement_get_version_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLHeadElement_INTERFACE_DEFINED__
#define __IHTMLHeadElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLHeadElement;
  struct IHTMLHeadElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_profile(BSTR v) = 0;
    virtual HRESULT WINAPI get_profile(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLHeadElement_put_profile_Proxy(IHTMLHeadElement *This,BSTR v);
  void __RPC_STUB IHTMLHeadElement_put_profile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHeadElement_get_profile_Proxy(IHTMLHeadElement *This,BSTR *p);
  void __RPC_STUB IHTMLHeadElement_get_profile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTitleElement_INTERFACE_DEFINED__
#define __IHTMLTitleElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTitleElement;
  struct IHTMLTitleElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_text(BSTR v) = 0;
    virtual HRESULT WINAPI get_text(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLTitleElement_put_text_Proxy(IHTMLTitleElement *This,BSTR v);
  void __RPC_STUB IHTMLTitleElement_put_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTitleElement_get_text_Proxy(IHTMLTitleElement *This,BSTR *p);
  void __RPC_STUB IHTMLTitleElement_get_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLMetaElement_INTERFACE_DEFINED__
#define __IHTMLMetaElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLMetaElement;
  struct IHTMLMetaElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_httpEquiv(BSTR v) = 0;
    virtual HRESULT WINAPI get_httpEquiv(BSTR *p) = 0;
    virtual HRESULT WINAPI put_content(BSTR v) = 0;
    virtual HRESULT WINAPI get_content(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_url(BSTR v) = 0;
    virtual HRESULT WINAPI get_url(BSTR *p) = 0;
    virtual HRESULT WINAPI put_charset(BSTR v) = 0;
    virtual HRESULT WINAPI get_charset(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLMetaElement_put_httpEquiv_Proxy(IHTMLMetaElement *This,BSTR v);
  void __RPC_STUB IHTMLMetaElement_put_httpEquiv_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement_get_httpEquiv_Proxy(IHTMLMetaElement *This,BSTR *p);
  void __RPC_STUB IHTMLMetaElement_get_httpEquiv_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement_put_content_Proxy(IHTMLMetaElement *This,BSTR v);
  void __RPC_STUB IHTMLMetaElement_put_content_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement_get_content_Proxy(IHTMLMetaElement *This,BSTR *p);
  void __RPC_STUB IHTMLMetaElement_get_content_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement_put_name_Proxy(IHTMLMetaElement *This,BSTR v);
  void __RPC_STUB IHTMLMetaElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement_get_name_Proxy(IHTMLMetaElement *This,BSTR *p);
  void __RPC_STUB IHTMLMetaElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement_put_url_Proxy(IHTMLMetaElement *This,BSTR v);
  void __RPC_STUB IHTMLMetaElement_put_url_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement_get_url_Proxy(IHTMLMetaElement *This,BSTR *p);
  void __RPC_STUB IHTMLMetaElement_get_url_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement_put_charset_Proxy(IHTMLMetaElement *This,BSTR v);
  void __RPC_STUB IHTMLMetaElement_put_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement_get_charset_Proxy(IHTMLMetaElement *This,BSTR *p);
  void __RPC_STUB IHTMLMetaElement_get_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLMetaElement2_INTERFACE_DEFINED__
#define __IHTMLMetaElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLMetaElement2;
  struct IHTMLMetaElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_scheme(BSTR v) = 0;
    virtual HRESULT WINAPI get_scheme(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLMetaElement2_put_scheme_Proxy(IHTMLMetaElement2 *This,BSTR v);
  void __RPC_STUB IHTMLMetaElement2_put_scheme_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement2_get_scheme_Proxy(IHTMLMetaElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLMetaElement2_get_scheme_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLBaseElement_INTERFACE_DEFINED__
#define __IHTMLBaseElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLBaseElement;
  struct IHTMLBaseElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_href(BSTR v) = 0;
    virtual HRESULT WINAPI get_href(BSTR *p) = 0;
    virtual HRESULT WINAPI put_target(BSTR v) = 0;
    virtual HRESULT WINAPI get_target(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLBaseElement_put_href_Proxy(IHTMLBaseElement *This,BSTR v);
  void __RPC_STUB IHTMLBaseElement_put_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBaseElement_get_href_Proxy(IHTMLBaseElement *This,BSTR *p);
  void __RPC_STUB IHTMLBaseElement_get_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBaseElement_put_target_Proxy(IHTMLBaseElement *This,BSTR v);
  void __RPC_STUB IHTMLBaseElement_put_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBaseElement_get_target_Proxy(IHTMLBaseElement *This,BSTR *p);
  void __RPC_STUB IHTMLBaseElement_get_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLIsIndexElement_INTERFACE_DEFINED__
#define __IHTMLIsIndexElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLIsIndexElement;
  struct IHTMLIsIndexElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_prompt(BSTR v) = 0;
    virtual HRESULT WINAPI get_prompt(BSTR *p) = 0;
    virtual HRESULT WINAPI put_action(BSTR v) = 0;
    virtual HRESULT WINAPI get_action(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLIsIndexElement_put_prompt_Proxy(IHTMLIsIndexElement *This,BSTR v);
  void __RPC_STUB IHTMLIsIndexElement_put_prompt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIsIndexElement_get_prompt_Proxy(IHTMLIsIndexElement *This,BSTR *p);
  void __RPC_STUB IHTMLIsIndexElement_get_prompt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIsIndexElement_put_action_Proxy(IHTMLIsIndexElement *This,BSTR v);
  void __RPC_STUB IHTMLIsIndexElement_put_action_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIsIndexElement_get_action_Proxy(IHTMLIsIndexElement *This,BSTR *p);
  void __RPC_STUB IHTMLIsIndexElement_get_action_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLIsIndexElement2_INTERFACE_DEFINED__
#define __IHTMLIsIndexElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLIsIndexElement2;
  struct IHTMLIsIndexElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
  };
  HRESULT WINAPI IHTMLIsIndexElement2_get_form_Proxy(IHTMLIsIndexElement2 *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLIsIndexElement2_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLNextIdElement_INTERFACE_DEFINED__
#define __IHTMLNextIdElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLNextIdElement;
  struct IHTMLNextIdElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_n(BSTR v) = 0;
    virtual HRESULT WINAPI get_n(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLNextIdElement_put_n_Proxy(IHTMLNextIdElement *This,BSTR v);
  void __RPC_STUB IHTMLNextIdElement_put_n_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNextIdElement_get_n_Proxy(IHTMLNextIdElement *This,BSTR *p);
  void __RPC_STUB IHTMLNextIdElement_get_n_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLHtmlElement_DISPINTERFACE_DEFINED__
#define __DispHTMLHtmlElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLHtmlElement;
  struct DispHTMLHtmlElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLHtmlElement;
#ifdef __cplusplus
  class HTMLHtmlElement;
#endif

#ifndef __DispHTMLHeadElement_DISPINTERFACE_DEFINED__
#define __DispHTMLHeadElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLHeadElement;
  struct DispHTMLHeadElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLHeadElement;
#ifdef __cplusplus
  class HTMLHeadElement;
#endif

#ifndef __DispHTMLTitleElement_DISPINTERFACE_DEFINED__
#define __DispHTMLTitleElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLTitleElement;
  struct DispHTMLTitleElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLTitleElement;
#ifdef __cplusplus
  class HTMLTitleElement;
#endif

#ifndef __DispHTMLMetaElement_DISPINTERFACE_DEFINED__
#define __DispHTMLMetaElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLMetaElement;
  struct DispHTMLMetaElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLMetaElement;
#ifdef __cplusplus
  class HTMLMetaElement;
#endif

#ifndef __DispHTMLBaseElement_DISPINTERFACE_DEFINED__
#define __DispHTMLBaseElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLBaseElement;
  struct DispHTMLBaseElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLBaseElement;
#ifdef __cplusplus
  class HTMLBaseElement;
#endif

#ifndef __DispHTMLIsIndexElement_DISPINTERFACE_DEFINED__
#define __DispHTMLIsIndexElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLIsIndexElement;
  struct DispHTMLIsIndexElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLIsIndexElement;
#ifdef __cplusplus
  class HTMLIsIndexElement;
#endif

#ifndef __DispHTMLNextIdElement_DISPINTERFACE_DEFINED__
#define __DispHTMLNextIdElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLNextIdElement;
  struct DispHTMLNextIdElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLNextIdElement;
#ifdef __cplusplus
  class HTMLNextIdElement;
#endif

#ifndef __IHTMLBaseFontElement_INTERFACE_DEFINED__
#define __IHTMLBaseFontElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLBaseFontElement;
  struct IHTMLBaseFontElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_color(VARIANT v) = 0;
    virtual HRESULT WINAPI get_color(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_face(BSTR v) = 0;
    virtual HRESULT WINAPI get_face(BSTR *p) = 0;
    virtual HRESULT WINAPI put_size(long v) = 0;
    virtual HRESULT WINAPI get_size(long *p) = 0;
  };
  HRESULT WINAPI IHTMLBaseFontElement_put_color_Proxy(IHTMLBaseFontElement *This,VARIANT v);
  void __RPC_STUB IHTMLBaseFontElement_put_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBaseFontElement_get_color_Proxy(IHTMLBaseFontElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBaseFontElement_get_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBaseFontElement_put_face_Proxy(IHTMLBaseFontElement *This,BSTR v);
  void __RPC_STUB IHTMLBaseFontElement_put_face_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBaseFontElement_get_face_Proxy(IHTMLBaseFontElement *This,BSTR *p);
  void __RPC_STUB IHTMLBaseFontElement_get_face_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBaseFontElement_put_size_Proxy(IHTMLBaseFontElement *This,long v);
  void __RPC_STUB IHTMLBaseFontElement_put_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBaseFontElement_get_size_Proxy(IHTMLBaseFontElement *This,long *p);
  void __RPC_STUB IHTMLBaseFontElement_get_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLBaseFontElement_DISPINTERFACE_DEFINED__
#define __DispHTMLBaseFontElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLBaseFontElement;
  struct DispHTMLBaseFontElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLBaseFontElement;
#ifdef __cplusplus
  class HTMLBaseFontElement;
#endif

#ifndef __IHTMLUnknownElement_INTERFACE_DEFINED__
#define __IHTMLUnknownElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLUnknownElement;
  struct IHTMLUnknownElement : public IDispatch {
  };
#endif

#ifndef __DispHTMLUnknownElement_DISPINTERFACE_DEFINED__
#define __DispHTMLUnknownElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLUnknownElement;
  struct DispHTMLUnknownElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLUnknownElement;
#ifdef __cplusplus
  class HTMLUnknownElement;
#endif

#ifndef __IOmHistory_INTERFACE_DEFINED__
#define __IOmHistory_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IOmHistory;
  struct IOmHistory : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(short *p) = 0;
    virtual HRESULT WINAPI back(VARIANT *pvargdistance) = 0;
    virtual HRESULT WINAPI forward(VARIANT *pvargdistance) = 0;
    virtual HRESULT WINAPI go(VARIANT *pvargdistance) = 0;
  };
  HRESULT WINAPI IOmHistory_get_length_Proxy(IOmHistory *This,short *p);
  void __RPC_STUB IOmHistory_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmHistory_back_Proxy(IOmHistory *This,VARIANT *pvargdistance);
  void __RPC_STUB IOmHistory_back_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmHistory_forward_Proxy(IOmHistory *This,VARIANT *pvargdistance);
  void __RPC_STUB IOmHistory_forward_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmHistory_go_Proxy(IOmHistory *This,VARIANT *pvargdistance);
  void __RPC_STUB IOmHistory_go_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLMimeTypesCollection_INTERFACE_DEFINED__
#define __IHTMLMimeTypesCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLMimeTypesCollection;
  struct IHTMLMimeTypesCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
  };
  HRESULT WINAPI IHTMLMimeTypesCollection_get_length_Proxy(IHTMLMimeTypesCollection *This,long *p);
  void __RPC_STUB IHTMLMimeTypesCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLPluginsCollection_INTERFACE_DEFINED__
#define __IHTMLPluginsCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLPluginsCollection;
  struct IHTMLPluginsCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI refresh(VARIANT_BOOL reload = 0) = 0;
  };
  HRESULT WINAPI IHTMLPluginsCollection_get_length_Proxy(IHTMLPluginsCollection *This,long *p);
  void __RPC_STUB IHTMLPluginsCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPluginsCollection_refresh_Proxy(IHTMLPluginsCollection *This,VARIANT_BOOL reload);
  void __RPC_STUB IHTMLPluginsCollection_refresh_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLOpsProfile_INTERFACE_DEFINED__
#define __IHTMLOpsProfile_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLOpsProfile;
  struct IHTMLOpsProfile : public IDispatch {
  public:
    virtual HRESULT WINAPI addRequest(BSTR name,VARIANT reserved,VARIANT_BOOL *success) = 0;
    virtual HRESULT WINAPI clearRequest(void) = 0;
    virtual HRESULT WINAPI doRequest(VARIANT usage,VARIANT fname,VARIANT domain,VARIANT path,VARIANT expire,VARIANT reserved) = 0;
    virtual HRESULT WINAPI getAttribute(BSTR name,BSTR *value) = 0;
    virtual HRESULT WINAPI setAttribute(BSTR name,BSTR value,VARIANT prefs,VARIANT_BOOL *success) = 0;
    virtual HRESULT WINAPI commitChanges(VARIANT_BOOL *success) = 0;
    virtual HRESULT WINAPI addReadRequest(BSTR name,VARIANT reserved,VARIANT_BOOL *success) = 0;
    virtual HRESULT WINAPI doReadRequest(VARIANT usage,VARIANT fname,VARIANT domain,VARIANT path,VARIANT expire,VARIANT reserved) = 0;
    virtual HRESULT WINAPI doWriteRequest(VARIANT_BOOL *success) = 0;
  };
  HRESULT WINAPI IHTMLOpsProfile_addRequest_Proxy(IHTMLOpsProfile *This,BSTR name,VARIANT reserved,VARIANT_BOOL *success);
  void __RPC_STUB IHTMLOpsProfile_addRequest_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOpsProfile_clearRequest_Proxy(IHTMLOpsProfile *This);
  void __RPC_STUB IHTMLOpsProfile_clearRequest_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOpsProfile_doRequest_Proxy(IHTMLOpsProfile *This,VARIANT usage,VARIANT fname,VARIANT domain,VARIANT path,VARIANT expire,VARIANT reserved);
  void __RPC_STUB IHTMLOpsProfile_doRequest_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOpsProfile_getAttribute_Proxy(IHTMLOpsProfile *This,BSTR name,BSTR *value);
  void __RPC_STUB IHTMLOpsProfile_getAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOpsProfile_setAttribute_Proxy(IHTMLOpsProfile *This,BSTR name,BSTR value,VARIANT prefs,VARIANT_BOOL *success);
  void __RPC_STUB IHTMLOpsProfile_setAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOpsProfile_commitChanges_Proxy(IHTMLOpsProfile *This,VARIANT_BOOL *success);
  void __RPC_STUB IHTMLOpsProfile_commitChanges_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOpsProfile_addReadRequest_Proxy(IHTMLOpsProfile *This,BSTR name,VARIANT reserved,VARIANT_BOOL *success);
  void __RPC_STUB IHTMLOpsProfile_addReadRequest_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOpsProfile_doReadRequest_Proxy(IHTMLOpsProfile *This,VARIANT usage,VARIANT fname,VARIANT domain,VARIANT path,VARIANT expire,VARIANT reserved);
  void __RPC_STUB IHTMLOpsProfile_doReadRequest_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOpsProfile_doWriteRequest_Proxy(IHTMLOpsProfile *This,VARIANT_BOOL *success);
  void __RPC_STUB IHTMLOpsProfile_doWriteRequest_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IOmNavigator_INTERFACE_DEFINED__
#define __IOmNavigator_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IOmNavigator;
  struct IOmNavigator : public IDispatch {
  public:
    virtual HRESULT WINAPI get_appCodeName(BSTR *p) = 0;
    virtual HRESULT WINAPI get_appName(BSTR *p) = 0;
    virtual HRESULT WINAPI get_appVersion(BSTR *p) = 0;
    virtual HRESULT WINAPI get_userAgent(BSTR *p) = 0;
    virtual HRESULT WINAPI javaEnabled(VARIANT_BOOL *enabled) = 0;
    virtual HRESULT WINAPI taintEnabled(VARIANT_BOOL *enabled) = 0;
    virtual HRESULT WINAPI get_mimeTypes(IHTMLMimeTypesCollection **p) = 0;
    virtual HRESULT WINAPI get_plugins(IHTMLPluginsCollection **p) = 0;
    virtual HRESULT WINAPI get_cookieEnabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_opsProfile(IHTMLOpsProfile **p) = 0;
    virtual HRESULT WINAPI toString(BSTR *string) = 0;
    virtual HRESULT WINAPI get_cpuClass(BSTR *p) = 0;
    virtual HRESULT WINAPI get_systemLanguage(BSTR *p) = 0;
    virtual HRESULT WINAPI get_browserLanguage(BSTR *p) = 0;
    virtual HRESULT WINAPI get_userLanguage(BSTR *p) = 0;
    virtual HRESULT WINAPI get_platform(BSTR *p) = 0;
    virtual HRESULT WINAPI get_appMinorVersion(BSTR *p) = 0;
    virtual HRESULT WINAPI get_connectionSpeed(long *p) = 0;
    virtual HRESULT WINAPI get_onLine(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_userProfile(IHTMLOpsProfile **p) = 0;
  };
  HRESULT WINAPI IOmNavigator_get_appCodeName_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_appCodeName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_appName_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_appName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_appVersion_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_appVersion_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_userAgent_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_userAgent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_javaEnabled_Proxy(IOmNavigator *This,VARIANT_BOOL *enabled);
  void __RPC_STUB IOmNavigator_javaEnabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_taintEnabled_Proxy(IOmNavigator *This,VARIANT_BOOL *enabled);
  void __RPC_STUB IOmNavigator_taintEnabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_mimeTypes_Proxy(IOmNavigator *This,IHTMLMimeTypesCollection **p);
  void __RPC_STUB IOmNavigator_get_mimeTypes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_plugins_Proxy(IOmNavigator *This,IHTMLPluginsCollection **p);
  void __RPC_STUB IOmNavigator_get_plugins_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_cookieEnabled_Proxy(IOmNavigator *This,VARIANT_BOOL *p);
  void __RPC_STUB IOmNavigator_get_cookieEnabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_opsProfile_Proxy(IOmNavigator *This,IHTMLOpsProfile **p);
  void __RPC_STUB IOmNavigator_get_opsProfile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_toString_Proxy(IOmNavigator *This,BSTR *string);
  void __RPC_STUB IOmNavigator_toString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_cpuClass_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_cpuClass_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_systemLanguage_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_systemLanguage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_browserLanguage_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_browserLanguage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_userLanguage_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_userLanguage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_platform_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_platform_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_appMinorVersion_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_appMinorVersion_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_connectionSpeed_Proxy(IOmNavigator *This,long *p);
  void __RPC_STUB IOmNavigator_get_connectionSpeed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_onLine_Proxy(IOmNavigator *This,VARIANT_BOOL *p);
  void __RPC_STUB IOmNavigator_get_onLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_userProfile_Proxy(IOmNavigator *This,IHTMLOpsProfile **p);
  void __RPC_STUB IOmNavigator_get_userProfile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLLocation_INTERFACE_DEFINED__
#define __IHTMLLocation_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLLocation;
  struct IHTMLLocation : public IDispatch {
  public:
    virtual HRESULT WINAPI put_href(BSTR v) = 0;
    virtual HRESULT WINAPI get_href(BSTR *p) = 0;
    virtual HRESULT WINAPI put_protocol(BSTR v) = 0;
    virtual HRESULT WINAPI get_protocol(BSTR *p) = 0;
    virtual HRESULT WINAPI put_host(BSTR v) = 0;
    virtual HRESULT WINAPI get_host(BSTR *p) = 0;
    virtual HRESULT WINAPI put_hostname(BSTR v) = 0;
    virtual HRESULT WINAPI get_hostname(BSTR *p) = 0;
    virtual HRESULT WINAPI put_port(BSTR v) = 0;
    virtual HRESULT WINAPI get_port(BSTR *p) = 0;
    virtual HRESULT WINAPI put_pathname(BSTR v) = 0;
    virtual HRESULT WINAPI get_pathname(BSTR *p) = 0;
    virtual HRESULT WINAPI put_search(BSTR v) = 0;
    virtual HRESULT WINAPI get_search(BSTR *p) = 0;
    virtual HRESULT WINAPI put_hash(BSTR v) = 0;
    virtual HRESULT WINAPI get_hash(BSTR *p) = 0;
    virtual HRESULT WINAPI reload(VARIANT_BOOL flag = 0) = 0;
    virtual HRESULT WINAPI replace(BSTR bstr) = 0;
    virtual HRESULT WINAPI assign(BSTR bstr) = 0;
    virtual HRESULT WINAPI toString(BSTR *string) = 0;
  };
  HRESULT WINAPI IHTMLLocation_put_href_Proxy(IHTMLLocation *This,BSTR v);
  void __RPC_STUB IHTMLLocation_put_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_get_href_Proxy(IHTMLLocation *This,BSTR *p);
  void __RPC_STUB IHTMLLocation_get_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_put_protocol_Proxy(IHTMLLocation *This,BSTR v);
  void __RPC_STUB IHTMLLocation_put_protocol_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_get_protocol_Proxy(IHTMLLocation *This,BSTR *p);
  void __RPC_STUB IHTMLLocation_get_protocol_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_put_host_Proxy(IHTMLLocation *This,BSTR v);
  void __RPC_STUB IHTMLLocation_put_host_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_get_host_Proxy(IHTMLLocation *This,BSTR *p);
  void __RPC_STUB IHTMLLocation_get_host_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_put_hostname_Proxy(IHTMLLocation *This,BSTR v);
  void __RPC_STUB IHTMLLocation_put_hostname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_get_hostname_Proxy(IHTMLLocation *This,BSTR *p);
  void __RPC_STUB IHTMLLocation_get_hostname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_put_port_Proxy(IHTMLLocation *This,BSTR v);
  void __RPC_STUB IHTMLLocation_put_port_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_get_port_Proxy(IHTMLLocation *This,BSTR *p);
  void __RPC_STUB IHTMLLocation_get_port_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_put_pathname_Proxy(IHTMLLocation *This,BSTR v);
  void __RPC_STUB IHTMLLocation_put_pathname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_get_pathname_Proxy(IHTMLLocation *This,BSTR *p);
  void __RPC_STUB IHTMLLocation_get_pathname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_put_search_Proxy(IHTMLLocation *This,BSTR v);
  void __RPC_STUB IHTMLLocation_put_search_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_get_search_Proxy(IHTMLLocation *This,BSTR *p);
  void __RPC_STUB IHTMLLocation_get_search_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_put_hash_Proxy(IHTMLLocation *This,BSTR v);
  void __RPC_STUB IHTMLLocation_put_hash_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_get_hash_Proxy(IHTMLLocation *This,BSTR *p);
  void __RPC_STUB IHTMLLocation_get_hash_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_reload_Proxy(IHTMLLocation *This,VARIANT_BOOL flag);
  void __RPC_STUB IHTMLLocation_reload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_replace_Proxy(IHTMLLocation *This,BSTR bstr);
  void __RPC_STUB IHTMLLocation_replace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_assign_Proxy(IHTMLLocation *This,BSTR bstr);
  void __RPC_STUB IHTMLLocation_assign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_toString_Proxy(IHTMLLocation *This,BSTR *string);
  void __RPC_STUB IHTMLLocation_toString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif
  EXTERN_C const CLSID CLSID_HTMLHistory;
#ifdef __cplusplus
  class HTMLHistory;
#endif
  EXTERN_C const CLSID CLSID_CMimeTypes;
#ifdef __cplusplus
  class CMimeTypes;
#endif
  EXTERN_C const CLSID CLSID_CPlugins;
#ifdef __cplusplus
  class CPlugins;
#endif
  EXTERN_C const CLSID CLSID_COpsProfile;
#ifdef __cplusplus
  class COpsProfile;
#endif
  EXTERN_C const CLSID CLSID_HTMLNavigator;
#ifdef __cplusplus
  class HTMLNavigator;
#endif
  EXTERN_C const CLSID CLSID_HTMLLocation;
#ifdef __cplusplus
  class HTMLLocation;
#endif

#ifndef __IHTMLBookmarkCollection_INTERFACE_DEFINED__
#define __IHTMLBookmarkCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLBookmarkCollection;
  struct IHTMLBookmarkCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(long index,VARIANT *pVarBookmark) = 0;
  };
  HRESULT WINAPI IHTMLBookmarkCollection_get_length_Proxy(IHTMLBookmarkCollection *This,long *p);
  void __RPC_STUB IHTMLBookmarkCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBookmarkCollection_get__newEnum_Proxy(IHTMLBookmarkCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLBookmarkCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBookmarkCollection_item_Proxy(IHTMLBookmarkCollection *This,long index,VARIANT *pVarBookmark);
  void __RPC_STUB IHTMLBookmarkCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDataTransfer_INTERFACE_DEFINED__
#define __IHTMLDataTransfer_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDataTransfer;
  struct IHTMLDataTransfer : public IDispatch {
  public:
    virtual HRESULT WINAPI setData(BSTR format,VARIANT *data,VARIANT_BOOL *pret) = 0;
    virtual HRESULT WINAPI getData(BSTR format,VARIANT *pvarRet) = 0;
    virtual HRESULT WINAPI clearData(BSTR format,VARIANT_BOOL *pret) = 0;
    virtual HRESULT WINAPI put_dropEffect(BSTR v) = 0;
    virtual HRESULT WINAPI get_dropEffect(BSTR *p) = 0;
    virtual HRESULT WINAPI put_effectAllowed(BSTR v) = 0;
    virtual HRESULT WINAPI get_effectAllowed(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLDataTransfer_setData_Proxy(IHTMLDataTransfer *This,BSTR format,VARIANT *data,VARIANT_BOOL *pret);
  void __RPC_STUB IHTMLDataTransfer_setData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDataTransfer_getData_Proxy(IHTMLDataTransfer *This,BSTR format,VARIANT *pvarRet);
  void __RPC_STUB IHTMLDataTransfer_getData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDataTransfer_clearData_Proxy(IHTMLDataTransfer *This,BSTR format,VARIANT_BOOL *pret);
  void __RPC_STUB IHTMLDataTransfer_clearData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDataTransfer_put_dropEffect_Proxy(IHTMLDataTransfer *This,BSTR v);
  void __RPC_STUB IHTMLDataTransfer_put_dropEffect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDataTransfer_get_dropEffect_Proxy(IHTMLDataTransfer *This,BSTR *p);
  void __RPC_STUB IHTMLDataTransfer_get_dropEffect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDataTransfer_put_effectAllowed_Proxy(IHTMLDataTransfer *This,BSTR v);
  void __RPC_STUB IHTMLDataTransfer_put_effectAllowed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDataTransfer_get_effectAllowed_Proxy(IHTMLDataTransfer *This,BSTR *p);
  void __RPC_STUB IHTMLDataTransfer_get_effectAllowed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLEventObj2_INTERFACE_DEFINED__
#define __IHTMLEventObj2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEventObj2;
  struct IHTMLEventObj2 : public IDispatch {
  public:
    virtual HRESULT WINAPI setAttribute(BSTR strAttributeName,VARIANT AttributeValue,LONG lFlags = 1) = 0;
    virtual HRESULT WINAPI getAttribute(BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue) = 0;
    virtual HRESULT WINAPI removeAttribute(BSTR strAttributeName,LONG lFlags,VARIANT_BOOL *pfSuccess) = 0;
    virtual HRESULT WINAPI put_propertyName(BSTR v) = 0;
    virtual HRESULT WINAPI get_propertyName(BSTR *p) = 0;
    virtual HRESULT WINAPI putref_bookmarks(IHTMLBookmarkCollection *v) = 0;
    virtual HRESULT WINAPI get_bookmarks(IHTMLBookmarkCollection **p) = 0;
    virtual HRESULT WINAPI putref_recordset(IDispatch *v) = 0;
    virtual HRESULT WINAPI get_recordset(IDispatch **p) = 0;
    virtual HRESULT WINAPI put_dataFld(BSTR v) = 0;
    virtual HRESULT WINAPI get_dataFld(BSTR *p) = 0;
    virtual HRESULT WINAPI putref_boundElements(IHTMLElementCollection *v) = 0;
    virtual HRESULT WINAPI get_boundElements(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI put_repeat(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_repeat(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_srcUrn(BSTR v) = 0;
    virtual HRESULT WINAPI get_srcUrn(BSTR *p) = 0;
    virtual HRESULT WINAPI putref_srcElement(IHTMLElement *v) = 0;
    virtual HRESULT WINAPI get_srcElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI put_altKey(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_altKey(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_ctrlKey(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_ctrlKey(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_shiftKey(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_shiftKey(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI putref_fromElement(IHTMLElement *v) = 0;
    virtual HRESULT WINAPI get_fromElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI putref_toElement(IHTMLElement *v) = 0;
    virtual HRESULT WINAPI get_toElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI put_button(long v) = 0;
    virtual HRESULT WINAPI get_button(long *p) = 0;
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_qualifier(BSTR v) = 0;
    virtual HRESULT WINAPI get_qualifier(BSTR *p) = 0;
    virtual HRESULT WINAPI put_reason(long v) = 0;
    virtual HRESULT WINAPI get_reason(long *p) = 0;
    virtual HRESULT WINAPI put_x(long v) = 0;
    virtual HRESULT WINAPI get_x(long *p) = 0;
    virtual HRESULT WINAPI put_y(long v) = 0;
    virtual HRESULT WINAPI get_y(long *p) = 0;
    virtual HRESULT WINAPI put_clientX(long v) = 0;
    virtual HRESULT WINAPI get_clientX(long *p) = 0;
    virtual HRESULT WINAPI put_clientY(long v) = 0;
    virtual HRESULT WINAPI get_clientY(long *p) = 0;
    virtual HRESULT WINAPI put_offsetX(long v) = 0;
    virtual HRESULT WINAPI get_offsetX(long *p) = 0;
    virtual HRESULT WINAPI put_offsetY(long v) = 0;
    virtual HRESULT WINAPI get_offsetY(long *p) = 0;
    virtual HRESULT WINAPI put_screenX(long v) = 0;
    virtual HRESULT WINAPI get_screenX(long *p) = 0;
    virtual HRESULT WINAPI put_screenY(long v) = 0;
    virtual HRESULT WINAPI get_screenY(long *p) = 0;
    virtual HRESULT WINAPI putref_srcFilter(IDispatch *v) = 0;
    virtual HRESULT WINAPI get_srcFilter(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_dataTransfer(IHTMLDataTransfer **p) = 0;
  };
  HRESULT WINAPI IHTMLEventObj2_setAttribute_Proxy(IHTMLEventObj2 *This,BSTR strAttributeName,VARIANT AttributeValue,LONG lFlags);
  void __RPC_STUB IHTMLEventObj2_setAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_getAttribute_Proxy(IHTMLEventObj2 *This,BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue);
  void __RPC_STUB IHTMLEventObj2_getAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_removeAttribute_Proxy(IHTMLEventObj2 *This,BSTR strAttributeName,LONG lFlags,VARIANT_BOOL *pfSuccess);
  void __RPC_STUB IHTMLEventObj2_removeAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_propertyName_Proxy(IHTMLEventObj2 *This,BSTR v);
  void __RPC_STUB IHTMLEventObj2_put_propertyName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_propertyName_Proxy(IHTMLEventObj2 *This,BSTR *p);
  void __RPC_STUB IHTMLEventObj2_get_propertyName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_putref_bookmarks_Proxy(IHTMLEventObj2 *This,IHTMLBookmarkCollection *v);
  void __RPC_STUB IHTMLEventObj2_putref_bookmarks_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_bookmarks_Proxy(IHTMLEventObj2 *This,IHTMLBookmarkCollection **p);
  void __RPC_STUB IHTMLEventObj2_get_bookmarks_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_putref_recordset_Proxy(IHTMLEventObj2 *This,IDispatch *v);
  void __RPC_STUB IHTMLEventObj2_putref_recordset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_recordset_Proxy(IHTMLEventObj2 *This,IDispatch **p);
  void __RPC_STUB IHTMLEventObj2_get_recordset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_dataFld_Proxy(IHTMLEventObj2 *This,BSTR v);
  void __RPC_STUB IHTMLEventObj2_put_dataFld_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_dataFld_Proxy(IHTMLEventObj2 *This,BSTR *p);
  void __RPC_STUB IHTMLEventObj2_get_dataFld_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_putref_boundElements_Proxy(IHTMLEventObj2 *This,IHTMLElementCollection *v);
  void __RPC_STUB IHTMLEventObj2_putref_boundElements_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_boundElements_Proxy(IHTMLEventObj2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLEventObj2_get_boundElements_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_repeat_Proxy(IHTMLEventObj2 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLEventObj2_put_repeat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_repeat_Proxy(IHTMLEventObj2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj2_get_repeat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_srcUrn_Proxy(IHTMLEventObj2 *This,BSTR v);
  void __RPC_STUB IHTMLEventObj2_put_srcUrn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_srcUrn_Proxy(IHTMLEventObj2 *This,BSTR *p);
  void __RPC_STUB IHTMLEventObj2_get_srcUrn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_putref_srcElement_Proxy(IHTMLEventObj2 *This,IHTMLElement *v);
  void __RPC_STUB IHTMLEventObj2_putref_srcElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_srcElement_Proxy(IHTMLEventObj2 *This,IHTMLElement **p);
  void __RPC_STUB IHTMLEventObj2_get_srcElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_altKey_Proxy(IHTMLEventObj2 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLEventObj2_put_altKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_altKey_Proxy(IHTMLEventObj2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj2_get_altKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_ctrlKey_Proxy(IHTMLEventObj2 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLEventObj2_put_ctrlKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_ctrlKey_Proxy(IHTMLEventObj2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj2_get_ctrlKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_shiftKey_Proxy(IHTMLEventObj2 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLEventObj2_put_shiftKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_shiftKey_Proxy(IHTMLEventObj2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj2_get_shiftKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_putref_fromElement_Proxy(IHTMLEventObj2 *This,IHTMLElement *v);
  void __RPC_STUB IHTMLEventObj2_putref_fromElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_fromElement_Proxy(IHTMLEventObj2 *This,IHTMLElement **p);
  void __RPC_STUB IHTMLEventObj2_get_fromElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_putref_toElement_Proxy(IHTMLEventObj2 *This,IHTMLElement *v);
  void __RPC_STUB IHTMLEventObj2_putref_toElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_toElement_Proxy(IHTMLEventObj2 *This,IHTMLElement **p);
  void __RPC_STUB IHTMLEventObj2_get_toElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_button_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_button_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_button_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_button_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_type_Proxy(IHTMLEventObj2 *This,BSTR v);
  void __RPC_STUB IHTMLEventObj2_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_type_Proxy(IHTMLEventObj2 *This,BSTR *p);
  void __RPC_STUB IHTMLEventObj2_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_qualifier_Proxy(IHTMLEventObj2 *This,BSTR v);
  void __RPC_STUB IHTMLEventObj2_put_qualifier_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_qualifier_Proxy(IHTMLEventObj2 *This,BSTR *p);
  void __RPC_STUB IHTMLEventObj2_get_qualifier_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_reason_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_reason_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_reason_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_reason_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_x_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_x_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_x_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_x_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_y_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_y_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_y_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_y_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_clientX_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_clientX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_clientX_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_clientX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_clientY_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_clientY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_clientY_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_clientY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_offsetX_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_offsetX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_offsetX_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_offsetX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_offsetY_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_offsetY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_offsetY_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_offsetY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_screenX_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_screenX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_screenX_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_screenX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_screenY_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_screenY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_screenY_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_screenY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_putref_srcFilter_Proxy(IHTMLEventObj2 *This,IDispatch *v);
  void __RPC_STUB IHTMLEventObj2_putref_srcFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_srcFilter_Proxy(IHTMLEventObj2 *This,IDispatch **p);
  void __RPC_STUB IHTMLEventObj2_get_srcFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_dataTransfer_Proxy(IHTMLEventObj2 *This,IHTMLDataTransfer **p);
  void __RPC_STUB IHTMLEventObj2_get_dataTransfer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLEventObj3_INTERFACE_DEFINED__
#define __IHTMLEventObj3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEventObj3;
  struct IHTMLEventObj3 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_contentOverflow(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_shiftLeft(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_shiftLeft(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_altLeft(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_altLeft(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_ctrlLeft(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_ctrlLeft(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_imeCompositionChange(LONG_PTR *p) = 0;
    virtual HRESULT WINAPI get_imeNotifyCommand(LONG_PTR *p) = 0;
    virtual HRESULT WINAPI get_imeNotifyData(LONG_PTR *p) = 0;
    virtual HRESULT WINAPI get_imeRequest(LONG_PTR *p) = 0;
    virtual HRESULT WINAPI get_imeRequestData(LONG_PTR *p) = 0;
    virtual HRESULT WINAPI get_keyboardLayout(LONG_PTR *p) = 0;
    virtual HRESULT WINAPI get_behaviorCookie(long *p) = 0;
    virtual HRESULT WINAPI get_behaviorPart(long *p) = 0;
    virtual HRESULT WINAPI get_nextPage(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLEventObj3_get_contentOverflow_Proxy(IHTMLEventObj3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj3_get_contentOverflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_put_shiftLeft_Proxy(IHTMLEventObj3 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLEventObj3_put_shiftLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_shiftLeft_Proxy(IHTMLEventObj3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj3_get_shiftLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_put_altLeft_Proxy(IHTMLEventObj3 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLEventObj3_put_altLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_altLeft_Proxy(IHTMLEventObj3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj3_get_altLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_put_ctrlLeft_Proxy(IHTMLEventObj3 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLEventObj3_put_ctrlLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_ctrlLeft_Proxy(IHTMLEventObj3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj3_get_ctrlLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_imeCompositionChange_Proxy(IHTMLEventObj3 *This,LONG_PTR *p);
  void __RPC_STUB IHTMLEventObj3_get_imeCompositionChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_imeNotifyCommand_Proxy(IHTMLEventObj3 *This,LONG_PTR *p);
  void __RPC_STUB IHTMLEventObj3_get_imeNotifyCommand_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_imeNotifyData_Proxy(IHTMLEventObj3 *This,LONG_PTR *p);
  void __RPC_STUB IHTMLEventObj3_get_imeNotifyData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_imeRequest_Proxy(IHTMLEventObj3 *This,LONG_PTR *p);
  void __RPC_STUB IHTMLEventObj3_get_imeRequest_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_imeRequestData_Proxy(IHTMLEventObj3 *This,LONG_PTR *p);
  void __RPC_STUB IHTMLEventObj3_get_imeRequestData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_keyboardLayout_Proxy(IHTMLEventObj3 *This,LONG_PTR *p);
  void __RPC_STUB IHTMLEventObj3_get_keyboardLayout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_behaviorCookie_Proxy(IHTMLEventObj3 *This,long *p);
  void __RPC_STUB IHTMLEventObj3_get_behaviorCookie_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_behaviorPart_Proxy(IHTMLEventObj3 *This,long *p);
  void __RPC_STUB IHTMLEventObj3_get_behaviorPart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_nextPage_Proxy(IHTMLEventObj3 *This,BSTR *p);
  void __RPC_STUB IHTMLEventObj3_get_nextPage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLEventObj4_INTERFACE_DEFINED__
#define __IHTMLEventObj4_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEventObj4;
  struct IHTMLEventObj4 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_wheelDelta(long *p) = 0;
  };
  HRESULT WINAPI IHTMLEventObj4_get_wheelDelta_Proxy(IHTMLEventObj4 *This,long *p);
  void __RPC_STUB IHTMLEventObj4_get_wheelDelta_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispCEventObj_DISPINTERFACE_DEFINED__
#define __DispCEventObj_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispCEventObj;
  struct DispCEventObj : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_CEventObj;
#ifdef __cplusplus
  class CEventObj;
#endif

#ifndef __HTMLWindowEvents2_DISPINTERFACE_DEFINED__
#define __HTMLWindowEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLWindowEvents2;
  struct HTMLWindowEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLWindowEvents_DISPINTERFACE_DEFINED__
#define __HTMLWindowEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLWindowEvents;
  struct HTMLWindowEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLDocument2_INTERFACE_DEFINED__
#define __IHTMLDocument2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDocument2;
  struct IHTMLDocument2 : public IHTMLDocument {
  public:
    virtual HRESULT WINAPI get_all(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI get_body(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI get_activeElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI get_images(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI get_applets(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI get_links(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI get_forms(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI get_anchors(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI put_title(BSTR v) = 0;
    virtual HRESULT WINAPI get_title(BSTR *p) = 0;
    virtual HRESULT WINAPI get_scripts(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI put_designMode(BSTR v) = 0;
    virtual HRESULT WINAPI get_designMode(BSTR *p) = 0;
    virtual HRESULT WINAPI get_selection(IHTMLSelectionObject **p) = 0;
    virtual HRESULT WINAPI get_readyState(BSTR *p) = 0;
    virtual HRESULT WINAPI get_frames(IHTMLFramesCollection2 **p) = 0;
    virtual HRESULT WINAPI get_embeds(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI get_plugins(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI put_alinkColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_alinkColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_bgColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bgColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_fgColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_fgColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_linkColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_linkColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_vlinkColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_vlinkColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_referrer(BSTR *p) = 0;
    virtual HRESULT WINAPI get_location(IHTMLLocation **p) = 0;
    virtual HRESULT WINAPI get_lastModified(BSTR *p) = 0;
    virtual HRESULT WINAPI put_URL(BSTR v) = 0;
    virtual HRESULT WINAPI get_URL(BSTR *p) = 0;
    virtual HRESULT WINAPI put_domain(BSTR v) = 0;
    virtual HRESULT WINAPI get_domain(BSTR *p) = 0;
    virtual HRESULT WINAPI put_cookie(BSTR v) = 0;
    virtual HRESULT WINAPI get_cookie(BSTR *p) = 0;
    virtual HRESULT WINAPI put_expando(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_expando(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_charset(BSTR v) = 0;
    virtual HRESULT WINAPI get_charset(BSTR *p) = 0;
    virtual HRESULT WINAPI put_defaultCharset(BSTR v) = 0;
    virtual HRESULT WINAPI get_defaultCharset(BSTR *p) = 0;
    virtual HRESULT WINAPI get_mimeType(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fileSize(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fileCreatedDate(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fileModifiedDate(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fileUpdatedDate(BSTR *p) = 0;
    virtual HRESULT WINAPI get_security(BSTR *p) = 0;
    virtual HRESULT WINAPI get_protocol(BSTR *p) = 0;
    virtual HRESULT WINAPI get_nameProp(BSTR *p) = 0;
    virtual HRESULT WINAPI write(SAFEARRAY *psarray) = 0;
    virtual HRESULT WINAPI writeln(SAFEARRAY *psarray) = 0;
    virtual HRESULT WINAPI open(BSTR url,VARIANT name,VARIANT features,VARIANT replace,IDispatch **pomWindowResult) = 0;
    virtual HRESULT WINAPI close(void) = 0;
    virtual HRESULT WINAPI clear(void) = 0;
    virtual HRESULT WINAPI queryCommandSupported(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandEnabled(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandState(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandIndeterm(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandText(BSTR cmdID,BSTR *pcmdText) = 0;
    virtual HRESULT WINAPI queryCommandValue(BSTR cmdID,VARIANT *pcmdValue) = 0;
    virtual HRESULT WINAPI execCommand(BSTR cmdID,VARIANT_BOOL showUI,VARIANT value,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI execCommandShowHelp(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI createElement(BSTR eTag,IHTMLElement **newElem) = 0;
    virtual HRESULT WINAPI put_onhelp(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onhelp(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onclick(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onclick(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondblclick(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondblclick(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onkeyup(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onkeyup(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onkeydown(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onkeydown(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onkeypress(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onkeypress(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmouseup(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmouseup(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmousedown(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmousedown(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmousemove(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmousemove(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmouseout(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmouseout(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmouseover(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmouseover(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onreadystatechange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onreadystatechange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onafterupdate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onafterupdate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onrowexit(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onrowexit(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onrowenter(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onrowenter(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondragstart(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondragstart(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onselectstart(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onselectstart(VARIANT *p) = 0;
    virtual HRESULT WINAPI elementFromPoint(long x,long y,IHTMLElement **elementHit) = 0;
    virtual HRESULT WINAPI get_parentWindow(IHTMLWindow2 **p) = 0;
    virtual HRESULT WINAPI get_styleSheets(IHTMLStyleSheetsCollection **p) = 0;
    virtual HRESULT WINAPI put_onbeforeupdate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeupdate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onerrorupdate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerrorupdate(VARIANT *p) = 0;
    virtual HRESULT WINAPI toString(BSTR *String) = 0;
    virtual HRESULT WINAPI createStyleSheet(BSTR bstrHref,long lIndex,IHTMLStyleSheet **ppnewStyleSheet) = 0;
  };
  HRESULT WINAPI IHTMLDocument2_get_all_Proxy(IHTMLDocument2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLDocument2_get_all_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_body_Proxy(IHTMLDocument2 *This,IHTMLElement **p);
  void __RPC_STUB IHTMLDocument2_get_body_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_activeElement_Proxy(IHTMLDocument2 *This,IHTMLElement **p);
  void __RPC_STUB IHTMLDocument2_get_activeElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_images_Proxy(IHTMLDocument2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLDocument2_get_images_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_applets_Proxy(IHTMLDocument2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLDocument2_get_applets_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_links_Proxy(IHTMLDocument2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLDocument2_get_links_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_forms_Proxy(IHTMLDocument2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLDocument2_get_forms_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_anchors_Proxy(IHTMLDocument2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLDocument2_get_anchors_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_title_Proxy(IHTMLDocument2 *This,BSTR v);
  void __RPC_STUB IHTMLDocument2_put_title_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_title_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_title_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_scripts_Proxy(IHTMLDocument2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLDocument2_get_scripts_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_designMode_Proxy(IHTMLDocument2 *This,BSTR v);
  void __RPC_STUB IHTMLDocument2_put_designMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_designMode_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_designMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_selection_Proxy(IHTMLDocument2 *This,IHTMLSelectionObject **p);
  void __RPC_STUB IHTMLDocument2_get_selection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_readyState_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_frames_Proxy(IHTMLDocument2 *This,IHTMLFramesCollection2 **p);
  void __RPC_STUB IHTMLDocument2_get_frames_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_embeds_Proxy(IHTMLDocument2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLDocument2_get_embeds_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_plugins_Proxy(IHTMLDocument2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLDocument2_get_plugins_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_alinkColor_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_alinkColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_alinkColor_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_alinkColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_bgColor_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_bgColor_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_fgColor_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_fgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_fgColor_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_fgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_linkColor_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_linkColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_linkColor_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_linkColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_vlinkColor_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_vlinkColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_vlinkColor_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_vlinkColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_referrer_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_referrer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_location_Proxy(IHTMLDocument2 *This,IHTMLLocation **p);
  void __RPC_STUB IHTMLDocument2_get_location_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_lastModified_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_lastModified_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_URL_Proxy(IHTMLDocument2 *This,BSTR v);
  void __RPC_STUB IHTMLDocument2_put_URL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_URL_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_URL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_domain_Proxy(IHTMLDocument2 *This,BSTR v);
  void __RPC_STUB IHTMLDocument2_put_domain_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_domain_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_domain_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_cookie_Proxy(IHTMLDocument2 *This,BSTR v);
  void __RPC_STUB IHTMLDocument2_put_cookie_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_cookie_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_cookie_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_expando_Proxy(IHTMLDocument2 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLDocument2_put_expando_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_expando_Proxy(IHTMLDocument2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLDocument2_get_expando_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_charset_Proxy(IHTMLDocument2 *This,BSTR v);
  void __RPC_STUB IHTMLDocument2_put_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_charset_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_defaultCharset_Proxy(IHTMLDocument2 *This,BSTR v);
  void __RPC_STUB IHTMLDocument2_put_defaultCharset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_defaultCharset_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_defaultCharset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_mimeType_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_mimeType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_fileSize_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_fileSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_fileCreatedDate_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_fileCreatedDate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_fileModifiedDate_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_fileModifiedDate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_fileUpdatedDate_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_fileUpdatedDate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_security_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_security_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_protocol_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_protocol_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_nameProp_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_nameProp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_write_Proxy(IHTMLDocument2 *This,SAFEARRAY *psarray);
  void __RPC_STUB IHTMLDocument2_write_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_writeln_Proxy(IHTMLDocument2 *This,SAFEARRAY *psarray);
  void __RPC_STUB IHTMLDocument2_writeln_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_open_Proxy(IHTMLDocument2 *This,BSTR url,VARIANT name,VARIANT features,VARIANT replace,IDispatch **pomWindowResult);
  void __RPC_STUB IHTMLDocument2_open_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_close_Proxy(IHTMLDocument2 *This);
  void __RPC_STUB IHTMLDocument2_close_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_clear_Proxy(IHTMLDocument2 *This);
  void __RPC_STUB IHTMLDocument2_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_queryCommandSupported_Proxy(IHTMLDocument2 *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLDocument2_queryCommandSupported_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_queryCommandEnabled_Proxy(IHTMLDocument2 *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLDocument2_queryCommandEnabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_queryCommandState_Proxy(IHTMLDocument2 *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLDocument2_queryCommandState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_queryCommandIndeterm_Proxy(IHTMLDocument2 *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLDocument2_queryCommandIndeterm_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_queryCommandText_Proxy(IHTMLDocument2 *This,BSTR cmdID,BSTR *pcmdText);
  void __RPC_STUB IHTMLDocument2_queryCommandText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_queryCommandValue_Proxy(IHTMLDocument2 *This,BSTR cmdID,VARIANT *pcmdValue);
  void __RPC_STUB IHTMLDocument2_queryCommandValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_execCommand_Proxy(IHTMLDocument2 *This,BSTR cmdID,VARIANT_BOOL showUI,VARIANT value,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLDocument2_execCommand_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_execCommandShowHelp_Proxy(IHTMLDocument2 *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLDocument2_execCommandShowHelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_createElement_Proxy(IHTMLDocument2 *This,BSTR eTag,IHTMLElement **newElem);
  void __RPC_STUB IHTMLDocument2_createElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onhelp_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onhelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onhelp_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onhelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onclick_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onclick_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onclick_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onclick_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_ondblclick_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_ondblclick_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_ondblclick_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_ondblclick_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onkeyup_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onkeyup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onkeyup_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onkeyup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onkeydown_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onkeydown_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onkeydown_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onkeydown_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onkeypress_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onkeypress_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onkeypress_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onkeypress_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onmouseup_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onmouseup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onmouseup_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onmouseup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onmousedown_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onmousedown_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onmousedown_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onmousedown_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onmousemove_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onmousemove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onmousemove_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onmousemove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onmouseout_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onmouseout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onmouseout_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onmouseout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onmouseover_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onmouseover_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onmouseover_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onmouseover_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onreadystatechange_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onreadystatechange_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onafterupdate_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onafterupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onafterupdate_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onafterupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onrowexit_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onrowexit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onrowexit_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onrowexit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onrowenter_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onrowenter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onrowenter_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onrowenter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_ondragstart_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_ondragstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_ondragstart_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_ondragstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onselectstart_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onselectstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onselectstart_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onselectstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_elementFromPoint_Proxy(IHTMLDocument2 *This,long x,long y,IHTMLElement **elementHit);
  void __RPC_STUB IHTMLDocument2_elementFromPoint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_parentWindow_Proxy(IHTMLDocument2 *This,IHTMLWindow2 **p);
  void __RPC_STUB IHTMLDocument2_get_parentWindow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_styleSheets_Proxy(IHTMLDocument2 *This,IHTMLStyleSheetsCollection **p);
  void __RPC_STUB IHTMLDocument2_get_styleSheets_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onbeforeupdate_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onbeforeupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onbeforeupdate_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onbeforeupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onerrorupdate_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onerrorupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onerrorupdate_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onerrorupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_toString_Proxy(IHTMLDocument2 *This,BSTR *String);
  void __RPC_STUB IHTMLDocument2_toString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_createStyleSheet_Proxy(IHTMLDocument2 *This,BSTR bstrHref,long lIndex,IHTMLStyleSheet **ppnewStyleSheet);
  void __RPC_STUB IHTMLDocument2_createStyleSheet_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFramesCollection2_INTERFACE_DEFINED__
#define __IHTMLFramesCollection2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFramesCollection2;
  struct IHTMLFramesCollection2 : public IDispatch {
  public:
    virtual HRESULT WINAPI item(VARIANT *pvarIndex,VARIANT *pvarResult) = 0;
    virtual HRESULT WINAPI get_length(long *p) = 0;
  };
  HRESULT WINAPI IHTMLFramesCollection2_item_Proxy(IHTMLFramesCollection2 *This,VARIANT *pvarIndex,VARIANT *pvarResult);
  void __RPC_STUB IHTMLFramesCollection2_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFramesCollection2_get_length_Proxy(IHTMLFramesCollection2 *This,long *p);
  void __RPC_STUB IHTMLFramesCollection2_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLWindow2_INTERFACE_DEFINED__
#define __IHTMLWindow2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLWindow2;
  struct IHTMLWindow2 : public IHTMLFramesCollection2 {
  public:
    virtual HRESULT WINAPI get_frames(IHTMLFramesCollection2 **p) = 0;
    virtual HRESULT WINAPI put_defaultStatus(BSTR v) = 0;
    virtual HRESULT WINAPI get_defaultStatus(BSTR *p) = 0;
    virtual HRESULT WINAPI put_status(BSTR v) = 0;
    virtual HRESULT WINAPI get_status(BSTR *p) = 0;
    virtual HRESULT WINAPI setTimeout(BSTR expression,long msec,VARIANT *language,long *timerID) = 0;
    virtual HRESULT WINAPI clearTimeout(long timerID) = 0;
    virtual HRESULT WINAPI alert(BSTR message = L"") = 0;
    virtual HRESULT WINAPI confirm(BSTR message,VARIANT_BOOL *confirmed) = 0;
    virtual HRESULT WINAPI prompt(BSTR message,BSTR defstr,VARIANT *textdata) = 0;
    virtual HRESULT WINAPI get_Image(IHTMLImageElementFactory **p) = 0;
    virtual HRESULT WINAPI get_location(IHTMLLocation **p) = 0;
    virtual HRESULT WINAPI get_history(IOmHistory **p) = 0;
    virtual HRESULT WINAPI close(void) = 0;
    virtual HRESULT WINAPI put_opener(VARIANT v) = 0;
    virtual HRESULT WINAPI get_opener(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_navigator(IOmNavigator **p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI get_parent(IHTMLWindow2 **p) = 0;
    virtual HRESULT WINAPI open(BSTR url,BSTR name,BSTR features,VARIANT_BOOL replace,IHTMLWindow2 **pomWindowResult) = 0;
    virtual HRESULT WINAPI get_self(IHTMLWindow2 **p) = 0;
    virtual HRESULT WINAPI get_top(IHTMLWindow2 **p) = 0;
    virtual HRESULT WINAPI get_window(IHTMLWindow2 **p) = 0;
    virtual HRESULT WINAPI navigate(BSTR url) = 0;
    virtual HRESULT WINAPI put_onfocus(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfocus(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onblur(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onblur(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onbeforeunload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeunload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onunload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onunload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onhelp(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onhelp(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onerror(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerror(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onresize(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onresize(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onscroll(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onscroll(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_document(IHTMLDocument2 **p) = 0;
    virtual HRESULT WINAPI get_event(IHTMLEventObj **p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI showModalDialog(BSTR dialog,VARIANT *varArgIn,VARIANT *varOptions,VARIANT *varArgOut) = 0;
    virtual HRESULT WINAPI showHelp(BSTR helpURL,VARIANT helpArg,BSTR features = L"") = 0;
    virtual HRESULT WINAPI get_screen(IHTMLScreen **p) = 0;
    virtual HRESULT WINAPI get_Option(IHTMLOptionElementFactory **p) = 0;
    virtual HRESULT WINAPI focus(void) = 0;
    virtual HRESULT WINAPI get_closed(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI blur(void) = 0;
    virtual HRESULT WINAPI scroll(long x,long y) = 0;
    virtual HRESULT WINAPI get_clientInformation(IOmNavigator **p) = 0;
    virtual HRESULT WINAPI setInterval(BSTR expression,long msec,VARIANT *language,long *timerID) = 0;
    virtual HRESULT WINAPI clearInterval(long timerID) = 0;
    virtual HRESULT WINAPI put_offscreenBuffering(VARIANT v) = 0;
    virtual HRESULT WINAPI get_offscreenBuffering(VARIANT *p) = 0;
    virtual HRESULT WINAPI execScript(BSTR code,BSTR language,VARIANT *pvarRet) = 0;
    virtual HRESULT WINAPI toString(BSTR *String) = 0;
    virtual HRESULT WINAPI scrollBy(long x,long y) = 0;
    virtual HRESULT WINAPI scrollTo(long x,long y) = 0;
    virtual HRESULT WINAPI moveTo(long x,long y) = 0;
    virtual HRESULT WINAPI moveBy(long x,long y) = 0;
    virtual HRESULT WINAPI resizeTo(long x,long y) = 0;
    virtual HRESULT WINAPI resizeBy(long x,long y) = 0;
    virtual HRESULT WINAPI get_external(IDispatch **p) = 0;
  };
  HRESULT WINAPI IHTMLWindow2_get_frames_Proxy(IHTMLWindow2 *This,IHTMLFramesCollection2 **p);
  void __RPC_STUB IHTMLWindow2_get_frames_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_defaultStatus_Proxy(IHTMLWindow2 *This,BSTR v);
  void __RPC_STUB IHTMLWindow2_put_defaultStatus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_defaultStatus_Proxy(IHTMLWindow2 *This,BSTR *p);
  void __RPC_STUB IHTMLWindow2_get_defaultStatus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_status_Proxy(IHTMLWindow2 *This,BSTR v);
  void __RPC_STUB IHTMLWindow2_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_status_Proxy(IHTMLWindow2 *This,BSTR *p);
  void __RPC_STUB IHTMLWindow2_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_setTimeout_Proxy(IHTMLWindow2 *This,BSTR expression,long msec,VARIANT *language,long *timerID);
  void __RPC_STUB IHTMLWindow2_setTimeout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_clearTimeout_Proxy(IHTMLWindow2 *This,long timerID);
  void __RPC_STUB IHTMLWindow2_clearTimeout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_alert_Proxy(IHTMLWindow2 *This,BSTR message);
  void __RPC_STUB IHTMLWindow2_alert_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_confirm_Proxy(IHTMLWindow2 *This,BSTR message,VARIANT_BOOL *confirmed);
  void __RPC_STUB IHTMLWindow2_confirm_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_prompt_Proxy(IHTMLWindow2 *This,BSTR message,BSTR defstr,VARIANT *textdata);
  void __RPC_STUB IHTMLWindow2_prompt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_Image_Proxy(IHTMLWindow2 *This,IHTMLImageElementFactory **p);
  void __RPC_STUB IHTMLWindow2_get_Image_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_location_Proxy(IHTMLWindow2 *This,IHTMLLocation **p);
  void __RPC_STUB IHTMLWindow2_get_location_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_history_Proxy(IHTMLWindow2 *This,IOmHistory **p);
  void __RPC_STUB IHTMLWindow2_get_history_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_close_Proxy(IHTMLWindow2 *This);
  void __RPC_STUB IHTMLWindow2_close_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_opener_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_opener_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_opener_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_opener_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_navigator_Proxy(IHTMLWindow2 *This,IOmNavigator **p);
  void __RPC_STUB IHTMLWindow2_get_navigator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_name_Proxy(IHTMLWindow2 *This,BSTR v);
  void __RPC_STUB IHTMLWindow2_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_name_Proxy(IHTMLWindow2 *This,BSTR *p);
  void __RPC_STUB IHTMLWindow2_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_parent_Proxy(IHTMLWindow2 *This,IHTMLWindow2 **p);
  void __RPC_STUB IHTMLWindow2_get_parent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_open_Proxy(IHTMLWindow2 *This,BSTR url,BSTR name,BSTR features,VARIANT_BOOL replace,IHTMLWindow2 **pomWindowResult);
  void __RPC_STUB IHTMLWindow2_open_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_self_Proxy(IHTMLWindow2 *This,IHTMLWindow2 **p);
  void __RPC_STUB IHTMLWindow2_get_self_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_top_Proxy(IHTMLWindow2 *This,IHTMLWindow2 **p);
  void __RPC_STUB IHTMLWindow2_get_top_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_window_Proxy(IHTMLWindow2 *This,IHTMLWindow2 **p);
  void __RPC_STUB IHTMLWindow2_get_window_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_navigate_Proxy(IHTMLWindow2 *This,BSTR url);
  void __RPC_STUB IHTMLWindow2_navigate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_onfocus_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_onfocus_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_onblur_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_onblur_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_onload_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_onload_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_onbeforeunload_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_onbeforeunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_onbeforeunload_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_onbeforeunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_onunload_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_onunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_onunload_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_onunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_onhelp_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_onhelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_onhelp_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_onhelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_onerror_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_onerror_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_onresize_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_onresize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_onresize_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_onresize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_onscroll_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_onscroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_onscroll_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_onscroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_document_Proxy(IHTMLWindow2 *This,IHTMLDocument2 **p);
  void __RPC_STUB IHTMLWindow2_get_document_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_event_Proxy(IHTMLWindow2 *This,IHTMLEventObj **p);
  void __RPC_STUB IHTMLWindow2_get_event_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get__newEnum_Proxy(IHTMLWindow2 *This,IUnknown **p);
  void __RPC_STUB IHTMLWindow2_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_showModalDialog_Proxy(IHTMLWindow2 *This,BSTR dialog,VARIANT *varArgIn,VARIANT *varOptions,VARIANT *varArgOut);
  void __RPC_STUB IHTMLWindow2_showModalDialog_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_showHelp_Proxy(IHTMLWindow2 *This,BSTR helpURL,VARIANT helpArg,BSTR features);
  void __RPC_STUB IHTMLWindow2_showHelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_screen_Proxy(IHTMLWindow2 *This,IHTMLScreen **p);
  void __RPC_STUB IHTMLWindow2_get_screen_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_Option_Proxy(IHTMLWindow2 *This,IHTMLOptionElementFactory **p);
  void __RPC_STUB IHTMLWindow2_get_Option_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_focus_Proxy(IHTMLWindow2 *This);
  void __RPC_STUB IHTMLWindow2_focus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_closed_Proxy(IHTMLWindow2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLWindow2_get_closed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_blur_Proxy(IHTMLWindow2 *This);
  void __RPC_STUB IHTMLWindow2_blur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_scroll_Proxy(IHTMLWindow2 *This,long x,long y);
  void __RPC_STUB IHTMLWindow2_scroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_clientInformation_Proxy(IHTMLWindow2 *This,IOmNavigator **p);
  void __RPC_STUB IHTMLWindow2_get_clientInformation_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_setInterval_Proxy(IHTMLWindow2 *This,BSTR expression,long msec,VARIANT *language,long *timerID);
  void __RPC_STUB IHTMLWindow2_setInterval_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_clearInterval_Proxy(IHTMLWindow2 *This,long timerID);
  void __RPC_STUB IHTMLWindow2_clearInterval_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_offscreenBuffering_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_offscreenBuffering_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_offscreenBuffering_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_offscreenBuffering_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_execScript_Proxy(IHTMLWindow2 *This,BSTR code,BSTR language,VARIANT *pvarRet);
  void __RPC_STUB IHTMLWindow2_execScript_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_toString_Proxy(IHTMLWindow2 *This,BSTR *String);
  void __RPC_STUB IHTMLWindow2_toString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_scrollBy_Proxy(IHTMLWindow2 *This,long x,long y);
  void __RPC_STUB IHTMLWindow2_scrollBy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_scrollTo_Proxy(IHTMLWindow2 *This,long x,long y);
  void __RPC_STUB IHTMLWindow2_scrollTo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_moveTo_Proxy(IHTMLWindow2 *This,long x,long y);
  void __RPC_STUB IHTMLWindow2_moveTo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_moveBy_Proxy(IHTMLWindow2 *This,long x,long y);
  void __RPC_STUB IHTMLWindow2_moveBy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_resizeTo_Proxy(IHTMLWindow2 *This,long x,long y);
  void __RPC_STUB IHTMLWindow2_resizeTo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_resizeBy_Proxy(IHTMLWindow2 *This,long x,long y);
  void __RPC_STUB IHTMLWindow2_resizeBy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_external_Proxy(IHTMLWindow2 *This,IDispatch **p);
  void __RPC_STUB IHTMLWindow2_get_external_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLWindow3_INTERFACE_DEFINED__
#define __IHTMLWindow3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLWindow3;
  struct IHTMLWindow3 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_screenLeft(long *p) = 0;
    virtual HRESULT WINAPI get_screenTop(long *p) = 0;
    virtual HRESULT WINAPI attachEvent(BSTR event,IDispatch *pDisp,VARIANT_BOOL *pfResult) = 0;
    virtual HRESULT WINAPI detachEvent(BSTR event,IDispatch *pDisp) = 0;
    virtual HRESULT WINAPI setTimeout(VARIANT *expression,long msec,VARIANT *language,long *timerID) = 0;
    virtual HRESULT WINAPI setInterval(VARIANT *expression,long msec,VARIANT *language,long *timerID) = 0;
    virtual HRESULT WINAPI print(void) = 0;
    virtual HRESULT WINAPI put_onbeforeprint(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeprint(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onafterprint(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onafterprint(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_clipboardData(IHTMLDataTransfer **p) = 0;
    virtual HRESULT WINAPI showModelessDialog(BSTR url,VARIANT *varArgIn,VARIANT *options,IHTMLWindow2 **pDialog) = 0;
  };
  HRESULT WINAPI IHTMLWindow3_get_screenLeft_Proxy(IHTMLWindow3 *This,long *p);
  void __RPC_STUB IHTMLWindow3_get_screenLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_get_screenTop_Proxy(IHTMLWindow3 *This,long *p);
  void __RPC_STUB IHTMLWindow3_get_screenTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_attachEvent_Proxy(IHTMLWindow3 *This,BSTR event,IDispatch *pDisp,VARIANT_BOOL *pfResult);
  void __RPC_STUB IHTMLWindow3_attachEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_detachEvent_Proxy(IHTMLWindow3 *This,BSTR event,IDispatch *pDisp);
  void __RPC_STUB IHTMLWindow3_detachEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_setTimeout_Proxy(IHTMLWindow3 *This,VARIANT *expression,long msec,VARIANT *language,long *timerID);
  void __RPC_STUB IHTMLWindow3_setTimeout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_setInterval_Proxy(IHTMLWindow3 *This,VARIANT *expression,long msec,VARIANT *language,long *timerID);
  void __RPC_STUB IHTMLWindow3_setInterval_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_print_Proxy(IHTMLWindow3 *This);
  void __RPC_STUB IHTMLWindow3_print_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_put_onbeforeprint_Proxy(IHTMLWindow3 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow3_put_onbeforeprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_get_onbeforeprint_Proxy(IHTMLWindow3 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow3_get_onbeforeprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_put_onafterprint_Proxy(IHTMLWindow3 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow3_put_onafterprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_get_onafterprint_Proxy(IHTMLWindow3 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow3_get_onafterprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_get_clipboardData_Proxy(IHTMLWindow3 *This,IHTMLDataTransfer **p);
  void __RPC_STUB IHTMLWindow3_get_clipboardData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_showModelessDialog_Proxy(IHTMLWindow3 *This,BSTR url,VARIANT *varArgIn,VARIANT *options,IHTMLWindow2 **pDialog);
  void __RPC_STUB IHTMLWindow3_showModelessDialog_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFrameBase_INTERFACE_DEFINED__
#define __IHTMLFrameBase_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFrameBase;
  struct IHTMLFrameBase : public IDispatch {
  public:
    virtual HRESULT WINAPI put_src(BSTR v) = 0;
    virtual HRESULT WINAPI get_src(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_border(VARIANT v) = 0;
    virtual HRESULT WINAPI get_border(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_frameBorder(BSTR v) = 0;
    virtual HRESULT WINAPI get_frameBorder(BSTR *p) = 0;
    virtual HRESULT WINAPI put_frameSpacing(VARIANT v) = 0;
    virtual HRESULT WINAPI get_frameSpacing(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginHeight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginHeight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_noResize(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_noResize(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_scrolling(BSTR v) = 0;
    virtual HRESULT WINAPI get_scrolling(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLFrameBase_put_src_Proxy(IHTMLFrameBase *This,BSTR v);
  void __RPC_STUB IHTMLFrameBase_put_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_get_src_Proxy(IHTMLFrameBase *This,BSTR *p);
  void __RPC_STUB IHTMLFrameBase_get_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_put_name_Proxy(IHTMLFrameBase *This,BSTR v);
  void __RPC_STUB IHTMLFrameBase_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_get_name_Proxy(IHTMLFrameBase *This,BSTR *p);
  void __RPC_STUB IHTMLFrameBase_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_put_border_Proxy(IHTMLFrameBase *This,VARIANT v);
  void __RPC_STUB IHTMLFrameBase_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_get_border_Proxy(IHTMLFrameBase *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameBase_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_put_frameBorder_Proxy(IHTMLFrameBase *This,BSTR v);
  void __RPC_STUB IHTMLFrameBase_put_frameBorder_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_get_frameBorder_Proxy(IHTMLFrameBase *This,BSTR *p);
  void __RPC_STUB IHTMLFrameBase_get_frameBorder_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_put_frameSpacing_Proxy(IHTMLFrameBase *This,VARIANT v);
  void __RPC_STUB IHTMLFrameBase_put_frameSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_get_frameSpacing_Proxy(IHTMLFrameBase *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameBase_get_frameSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_put_marginWidth_Proxy(IHTMLFrameBase *This,VARIANT v);
  void __RPC_STUB IHTMLFrameBase_put_marginWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_get_marginWidth_Proxy(IHTMLFrameBase *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameBase_get_marginWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_put_marginHeight_Proxy(IHTMLFrameBase *This,VARIANT v);
  void __RPC_STUB IHTMLFrameBase_put_marginHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_get_marginHeight_Proxy(IHTMLFrameBase *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameBase_get_marginHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_put_noResize_Proxy(IHTMLFrameBase *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLFrameBase_put_noResize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_get_noResize_Proxy(IHTMLFrameBase *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLFrameBase_get_noResize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_put_scrolling_Proxy(IHTMLFrameBase *This,BSTR v);
  void __RPC_STUB IHTMLFrameBase_put_scrolling_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_get_scrolling_Proxy(IHTMLFrameBase *This,BSTR *p);
  void __RPC_STUB IHTMLFrameBase_get_scrolling_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLScreen_INTERFACE_DEFINED__
#define __IHTMLScreen_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLScreen;
  struct IHTMLScreen : public IDispatch {
  public:
    virtual HRESULT WINAPI get_colorDepth(long *p) = 0;
    virtual HRESULT WINAPI put_bufferDepth(long v) = 0;
    virtual HRESULT WINAPI get_bufferDepth(long *p) = 0;
    virtual HRESULT WINAPI get_width(long *p) = 0;
    virtual HRESULT WINAPI get_height(long *p) = 0;
    virtual HRESULT WINAPI put_updateInterval(long v) = 0;
    virtual HRESULT WINAPI get_updateInterval(long *p) = 0;
    virtual HRESULT WINAPI get_availHeight(long *p) = 0;
    virtual HRESULT WINAPI get_availWidth(long *p) = 0;
    virtual HRESULT WINAPI get_fontSmoothingEnabled(VARIANT_BOOL *p) = 0;
  };
  HRESULT WINAPI IHTMLScreen_get_colorDepth_Proxy(IHTMLScreen *This,long *p);
  void __RPC_STUB IHTMLScreen_get_colorDepth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen_put_bufferDepth_Proxy(IHTMLScreen *This,long v);
  void __RPC_STUB IHTMLScreen_put_bufferDepth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen_get_bufferDepth_Proxy(IHTMLScreen *This,long *p);
  void __RPC_STUB IHTMLScreen_get_bufferDepth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen_get_width_Proxy(IHTMLScreen *This,long *p);
  void __RPC_STUB IHTMLScreen_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen_get_height_Proxy(IHTMLScreen *This,long *p);
  void __RPC_STUB IHTMLScreen_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen_put_updateInterval_Proxy(IHTMLScreen *This,long v);
  void __RPC_STUB IHTMLScreen_put_updateInterval_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen_get_updateInterval_Proxy(IHTMLScreen *This,long *p);
  void __RPC_STUB IHTMLScreen_get_updateInterval_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen_get_availHeight_Proxy(IHTMLScreen *This,long *p);
  void __RPC_STUB IHTMLScreen_get_availHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen_get_availWidth_Proxy(IHTMLScreen *This,long *p);
  void __RPC_STUB IHTMLScreen_get_availWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen_get_fontSmoothingEnabled_Proxy(IHTMLScreen *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLScreen_get_fontSmoothingEnabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLScreen2_INTERFACE_DEFINED__
#define __IHTMLScreen2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLScreen2;
  struct IHTMLScreen2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_logicalXDPI(long *p) = 0;
    virtual HRESULT WINAPI get_logicalYDPI(long *p) = 0;
    virtual HRESULT WINAPI get_deviceXDPI(long *p) = 0;
    virtual HRESULT WINAPI get_deviceYDPI(long *p) = 0;
  };
  HRESULT WINAPI IHTMLScreen2_get_logicalXDPI_Proxy(IHTMLScreen2 *This,long *p);
  void __RPC_STUB IHTMLScreen2_get_logicalXDPI_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen2_get_logicalYDPI_Proxy(IHTMLScreen2 *This,long *p);
  void __RPC_STUB IHTMLScreen2_get_logicalYDPI_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen2_get_deviceXDPI_Proxy(IHTMLScreen2 *This,long *p);
  void __RPC_STUB IHTMLScreen2_get_deviceXDPI_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen2_get_deviceYDPI_Proxy(IHTMLScreen2 *This,long *p);
  void __RPC_STUB IHTMLScreen2_get_deviceYDPI_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLWindow4_INTERFACE_DEFINED__
#define __IHTMLWindow4_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLWindow4;
  struct IHTMLWindow4 : public IDispatch {
  public:
    virtual HRESULT WINAPI createPopup(VARIANT *varArgIn,IDispatch **ppPopup) = 0;
    virtual HRESULT WINAPI get_frameElement(IHTMLFrameBase **p) = 0;
  };
  HRESULT WINAPI IHTMLWindow4_createPopup_Proxy(IHTMLWindow4 *This,VARIANT *varArgIn,IDispatch **ppPopup);
  void __RPC_STUB IHTMLWindow4_createPopup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow4_get_frameElement_Proxy(IHTMLWindow4 *This,IHTMLFrameBase **p);
  void __RPC_STUB IHTMLWindow4_get_frameElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif
  EXTERN_C const CLSID CLSID_FramesCollection;
#ifdef __cplusplus
  class FramesCollection;
#endif

#ifndef __DispHTMLScreen_DISPINTERFACE_DEFINED__
#define __DispHTMLScreen_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLScreen;
  struct DispHTMLScreen : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLScreen;
#ifdef __cplusplus
  class HTMLScreen;
#endif

#ifndef __DispHTMLWindow2_DISPINTERFACE_DEFINED__
#define __DispHTMLWindow2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLWindow2;
  struct DispHTMLWindow2 : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLWindow2;
#ifdef __cplusplus
  class HTMLWindow2;
#endif

#ifndef __DispHTMLWindowProxy_DISPINTERFACE_DEFINED__
#define __DispHTMLWindowProxy_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLWindowProxy;
  struct DispHTMLWindowProxy : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLWindowProxy;
#ifdef __cplusplus
  class HTMLWindowProxy;
#endif

#ifndef __HTMLDocumentEvents2_DISPINTERFACE_DEFINED__
#define __HTMLDocumentEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLDocumentEvents2;
  struct HTMLDocumentEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLDocumentEvents_DISPINTERFACE_DEFINED__
#define __HTMLDocumentEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLDocumentEvents;
  struct HTMLDocumentEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLDocument3_INTERFACE_DEFINED__
#define __IHTMLDocument3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDocument3;
  struct IHTMLDocument3 : public IDispatch {
  public:
    virtual HRESULT WINAPI releaseCapture(void) = 0;
    virtual HRESULT WINAPI recalc(VARIANT_BOOL fForce = 0) = 0;
    virtual HRESULT WINAPI createTextNode(BSTR text,IHTMLDOMNode **newTextNode) = 0;
    virtual HRESULT WINAPI get_documentElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI get_uniqueID(BSTR *p) = 0;
    virtual HRESULT WINAPI attachEvent(BSTR event,IDispatch *pDisp,VARIANT_BOOL *pfResult) = 0;
    virtual HRESULT WINAPI detachEvent(BSTR event,IDispatch *pDisp) = 0;
    virtual HRESULT WINAPI put_onrowsdelete(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onrowsdelete(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onrowsinserted(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onrowsinserted(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_oncellchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_oncellchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondatasetchanged(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondatasetchanged(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondataavailable(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondataavailable(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondatasetcomplete(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondatasetcomplete(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onpropertychange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onpropertychange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_dir(BSTR v) = 0;
    virtual HRESULT WINAPI get_dir(BSTR *p) = 0;
    virtual HRESULT WINAPI put_oncontextmenu(VARIANT v) = 0;
    virtual HRESULT WINAPI get_oncontextmenu(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onstop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onstop(VARIANT *p) = 0;
    virtual HRESULT WINAPI createDocumentFragment(IHTMLDocument2 **pNewDoc) = 0;
    virtual HRESULT WINAPI get_parentDocument(IHTMLDocument2 **p) = 0;
    virtual HRESULT WINAPI put_enableDownload(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_enableDownload(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_baseUrl(BSTR v) = 0;
    virtual HRESULT WINAPI get_baseUrl(BSTR *p) = 0;
    virtual HRESULT WINAPI get_childNodes(IDispatch **p) = 0;
    virtual HRESULT WINAPI put_inheritStyleSheets(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_inheritStyleSheets(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_onbeforeeditfocus(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeeditfocus(VARIANT *p) = 0;
    virtual HRESULT WINAPI getElementsByName(BSTR v,IHTMLElementCollection **pelColl) = 0;
    virtual HRESULT WINAPI getElementById(BSTR v,IHTMLElement **pel) = 0;
    virtual HRESULT WINAPI getElementsByTagName(BSTR v,IHTMLElementCollection **pelColl) = 0;
  };
  HRESULT WINAPI IHTMLDocument3_releaseCapture_Proxy(IHTMLDocument3 *This);
  void __RPC_STUB IHTMLDocument3_releaseCapture_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_recalc_Proxy(IHTMLDocument3 *This,VARIANT_BOOL fForce);
  void __RPC_STUB IHTMLDocument3_recalc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_createTextNode_Proxy(IHTMLDocument3 *This,BSTR text,IHTMLDOMNode **newTextNode);
  void __RPC_STUB IHTMLDocument3_createTextNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_documentElement_Proxy(IHTMLDocument3 *This,IHTMLElement **p);
  void __RPC_STUB IHTMLDocument3_get_documentElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_uniqueID_Proxy(IHTMLDocument3 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument3_get_uniqueID_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_attachEvent_Proxy(IHTMLDocument3 *This,BSTR event,IDispatch *pDisp,VARIANT_BOOL *pfResult);
  void __RPC_STUB IHTMLDocument3_attachEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_detachEvent_Proxy(IHTMLDocument3 *This,BSTR event,IDispatch *pDisp);
  void __RPC_STUB IHTMLDocument3_detachEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_onrowsdelete_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_onrowsdelete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_onrowsdelete_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_onrowsdelete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_onrowsinserted_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_onrowsinserted_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_onrowsinserted_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_onrowsinserted_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_oncellchange_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_oncellchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_oncellchange_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_oncellchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_ondatasetchanged_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_ondatasetchanged_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_ondatasetchanged_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_ondatasetchanged_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_ondataavailable_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_ondataavailable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_ondataavailable_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_ondataavailable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_ondatasetcomplete_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_ondatasetcomplete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_ondatasetcomplete_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_ondatasetcomplete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_onpropertychange_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_onpropertychange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_onpropertychange_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_onpropertychange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_dir_Proxy(IHTMLDocument3 *This,BSTR v);
  void __RPC_STUB IHTMLDocument3_put_dir_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_dir_Proxy(IHTMLDocument3 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument3_get_dir_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_oncontextmenu_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_oncontextmenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_oncontextmenu_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_oncontextmenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_onstop_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_onstop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_onstop_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_onstop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_createDocumentFragment_Proxy(IHTMLDocument3 *This,IHTMLDocument2 **pNewDoc);
  void __RPC_STUB IHTMLDocument3_createDocumentFragment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_parentDocument_Proxy(IHTMLDocument3 *This,IHTMLDocument2 **p);
  void __RPC_STUB IHTMLDocument3_get_parentDocument_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_enableDownload_Proxy(IHTMLDocument3 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLDocument3_put_enableDownload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_enableDownload_Proxy(IHTMLDocument3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLDocument3_get_enableDownload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_baseUrl_Proxy(IHTMLDocument3 *This,BSTR v);
  void __RPC_STUB IHTMLDocument3_put_baseUrl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_baseUrl_Proxy(IHTMLDocument3 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument3_get_baseUrl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_childNodes_Proxy(IHTMLDocument3 *This,IDispatch **p);
  void __RPC_STUB IHTMLDocument3_get_childNodes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_inheritStyleSheets_Proxy(IHTMLDocument3 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLDocument3_put_inheritStyleSheets_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_inheritStyleSheets_Proxy(IHTMLDocument3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLDocument3_get_inheritStyleSheets_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_onbeforeeditfocus_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_onbeforeeditfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_onbeforeeditfocus_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_onbeforeeditfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_getElementsByName_Proxy(IHTMLDocument3 *This,BSTR v,IHTMLElementCollection **pelColl);
  void __RPC_STUB IHTMLDocument3_getElementsByName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_getElementById_Proxy(IHTMLDocument3 *This,BSTR v,IHTMLElement **pel);
  void __RPC_STUB IHTMLDocument3_getElementById_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_getElementsByTagName_Proxy(IHTMLDocument3 *This,BSTR v,IHTMLElementCollection **pelColl);
  void __RPC_STUB IHTMLDocument3_getElementsByTagName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDocument4_INTERFACE_DEFINED__
#define __IHTMLDocument4_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDocument4;
  struct IHTMLDocument4 : public IDispatch {
  public:
    virtual HRESULT WINAPI focus(void) = 0;
    virtual HRESULT WINAPI hasFocus(VARIANT_BOOL *pfFocus) = 0;
    virtual HRESULT WINAPI put_onselectionchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onselectionchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_namespaces(IDispatch **p) = 0;
    virtual HRESULT WINAPI createDocumentFromUrl(BSTR bstrUrl,BSTR bstrOptions,IHTMLDocument2 **newDoc) = 0;
    virtual HRESULT WINAPI put_media(BSTR v) = 0;
    virtual HRESULT WINAPI get_media(BSTR *p) = 0;
    virtual HRESULT WINAPI createEventObject(VARIANT *pvarEventObject,IHTMLEventObj **ppEventObj) = 0;
    virtual HRESULT WINAPI fireEvent(BSTR bstrEventName,VARIANT *pvarEventObject,VARIANT_BOOL *pfCancelled) = 0;
    virtual HRESULT WINAPI createRenderStyle(BSTR v,IHTMLRenderStyle **ppIHTMLRenderStyle) = 0;
    virtual HRESULT WINAPI put_oncontrolselect(VARIANT v) = 0;
    virtual HRESULT WINAPI get_oncontrolselect(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_URLUnencoded(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLDocument4_focus_Proxy(IHTMLDocument4 *This);
  void __RPC_STUB IHTMLDocument4_focus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_hasFocus_Proxy(IHTMLDocument4 *This,VARIANT_BOOL *pfFocus);
  void __RPC_STUB IHTMLDocument4_hasFocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_put_onselectionchange_Proxy(IHTMLDocument4 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument4_put_onselectionchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_get_onselectionchange_Proxy(IHTMLDocument4 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument4_get_onselectionchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_get_namespaces_Proxy(IHTMLDocument4 *This,IDispatch **p);
  void __RPC_STUB IHTMLDocument4_get_namespaces_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_createDocumentFromUrl_Proxy(IHTMLDocument4 *This,BSTR bstrUrl,BSTR bstrOptions,IHTMLDocument2 **newDoc);
  void __RPC_STUB IHTMLDocument4_createDocumentFromUrl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_put_media_Proxy(IHTMLDocument4 *This,BSTR v);
  void __RPC_STUB IHTMLDocument4_put_media_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_get_media_Proxy(IHTMLDocument4 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument4_get_media_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_createEventObject_Proxy(IHTMLDocument4 *This,VARIANT *pvarEventObject,IHTMLEventObj **ppEventObj);
  void __RPC_STUB IHTMLDocument4_createEventObject_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_fireEvent_Proxy(IHTMLDocument4 *This,BSTR bstrEventName,VARIANT *pvarEventObject,VARIANT_BOOL *pfCancelled);
  void __RPC_STUB IHTMLDocument4_fireEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_createRenderStyle_Proxy(IHTMLDocument4 *This,BSTR v,IHTMLRenderStyle **ppIHTMLRenderStyle);
  void __RPC_STUB IHTMLDocument4_createRenderStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_put_oncontrolselect_Proxy(IHTMLDocument4 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument4_put_oncontrolselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_get_oncontrolselect_Proxy(IHTMLDocument4 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument4_get_oncontrolselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_get_URLUnencoded_Proxy(IHTMLDocument4 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument4_get_URLUnencoded_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDocument5_INTERFACE_DEFINED__
#define __IHTMLDocument5_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDocument5;
  struct IHTMLDocument5 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_onmousewheel(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmousewheel(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_doctype(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI get_implementation(IHTMLDOMImplementation **p) = 0;
    virtual HRESULT WINAPI createAttribute(BSTR bstrattrName,IHTMLDOMAttribute **ppattribute) = 0;
    virtual HRESULT WINAPI createComment(BSTR bstrdata,IHTMLDOMNode **ppRetNode) = 0;
    virtual HRESULT WINAPI put_onfocusin(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfocusin(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onfocusout(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfocusout(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onactivate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onactivate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondeactivate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondeactivate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onbeforeactivate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeactivate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onbeforedeactivate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforedeactivate(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_compatMode(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLDocument5_put_onmousewheel_Proxy(IHTMLDocument5 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument5_put_onmousewheel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_onmousewheel_Proxy(IHTMLDocument5 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument5_get_onmousewheel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_doctype_Proxy(IHTMLDocument5 *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDocument5_get_doctype_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_implementation_Proxy(IHTMLDocument5 *This,IHTMLDOMImplementation **p);
  void __RPC_STUB IHTMLDocument5_get_implementation_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_createAttribute_Proxy(IHTMLDocument5 *This,BSTR bstrattrName,IHTMLDOMAttribute **ppattribute);
  void __RPC_STUB IHTMLDocument5_createAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_createComment_Proxy(IHTMLDocument5 *This,BSTR bstrdata,IHTMLDOMNode **ppRetNode);
  void __RPC_STUB IHTMLDocument5_createComment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_put_onfocusin_Proxy(IHTMLDocument5 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument5_put_onfocusin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_onfocusin_Proxy(IHTMLDocument5 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument5_get_onfocusin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_put_onfocusout_Proxy(IHTMLDocument5 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument5_put_onfocusout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_onfocusout_Proxy(IHTMLDocument5 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument5_get_onfocusout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_put_onactivate_Proxy(IHTMLDocument5 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument5_put_onactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_onactivate_Proxy(IHTMLDocument5 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument5_get_onactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_put_ondeactivate_Proxy(IHTMLDocument5 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument5_put_ondeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_ondeactivate_Proxy(IHTMLDocument5 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument5_get_ondeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_put_onbeforeactivate_Proxy(IHTMLDocument5 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument5_put_onbeforeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_onbeforeactivate_Proxy(IHTMLDocument5 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument5_get_onbeforeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_put_onbeforedeactivate_Proxy(IHTMLDocument5 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument5_put_onbeforedeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_onbeforedeactivate_Proxy(IHTMLDocument5 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument5_get_onbeforedeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_compatMode_Proxy(IHTMLDocument5 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument5_get_compatMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLDocument_DISPINTERFACE_DEFINED__
#define __DispHTMLDocument_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDocument;
  struct DispHTMLDocument : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLDocument;
#ifdef __cplusplus
  class HTMLDocument;
#endif

#ifndef __DWebBridgeEvents_DISPINTERFACE_DEFINED__
#define __DWebBridgeEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DWebBridgeEvents;
  struct DWebBridgeEvents : public IDispatch {
  };
#endif

#ifndef __IWebBridge_INTERFACE_DEFINED__
#define __IWebBridge_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IWebBridge;
  struct IWebBridge : public IDispatch {
  public:
    virtual HRESULT WINAPI put_URL(BSTR v) = 0;
    virtual HRESULT WINAPI get_URL(BSTR *p) = 0;
    virtual HRESULT WINAPI put_Scrollbar(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_Scrollbar(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_embed(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_embed(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_event(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_readyState(long *p) = 0;
    virtual HRESULT WINAPI AboutBox(void) = 0;
  };
  HRESULT WINAPI IWebBridge_put_URL_Proxy(IWebBridge *This,BSTR v);
  void __RPC_STUB IWebBridge_put_URL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWebBridge_get_URL_Proxy(IWebBridge *This,BSTR *p);
  void __RPC_STUB IWebBridge_get_URL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWebBridge_put_Scrollbar_Proxy(IWebBridge *This,VARIANT_BOOL v);
  void __RPC_STUB IWebBridge_put_Scrollbar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWebBridge_get_Scrollbar_Proxy(IWebBridge *This,VARIANT_BOOL *p);
  void __RPC_STUB IWebBridge_get_Scrollbar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWebBridge_put_embed_Proxy(IWebBridge *This,VARIANT_BOOL v);
  void __RPC_STUB IWebBridge_put_embed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWebBridge_get_embed_Proxy(IWebBridge *This,VARIANT_BOOL *p);
  void __RPC_STUB IWebBridge_get_embed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWebBridge_get_event_Proxy(IWebBridge *This,IDispatch **p);
  void __RPC_STUB IWebBridge_get_event_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWebBridge_get_readyState_Proxy(IWebBridge *This,long *p);
  void __RPC_STUB IWebBridge_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWebBridge_AboutBox_Proxy(IWebBridge *This);
  void __RPC_STUB IWebBridge_AboutBox_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IWBScriptControl_INTERFACE_DEFINED__
#define __IWBScriptControl_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IWBScriptControl;
  struct IWBScriptControl : public IDispatch {
  public:
    virtual HRESULT WINAPI raiseEvent(BSTR name,VARIANT eventData) = 0;
    virtual HRESULT WINAPI bubbleEvent(void) = 0;
    virtual HRESULT WINAPI setContextMenu(VARIANT menuItemPairs) = 0;
    virtual HRESULT WINAPI put_selectableContent(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_selectableContent(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_frozen(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_scrollbar(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_scrollbar(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_version(BSTR *p) = 0;
    virtual HRESULT WINAPI get_visibility(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_onvisibilitychange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onvisibilitychange(VARIANT *p) = 0;
  };
  HRESULT WINAPI IWBScriptControl_raiseEvent_Proxy(IWBScriptControl *This,BSTR name,VARIANT eventData);
  void __RPC_STUB IWBScriptControl_raiseEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_bubbleEvent_Proxy(IWBScriptControl *This);
  void __RPC_STUB IWBScriptControl_bubbleEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_setContextMenu_Proxy(IWBScriptControl *This,VARIANT menuItemPairs);
  void __RPC_STUB IWBScriptControl_setContextMenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_put_selectableContent_Proxy(IWBScriptControl *This,VARIANT_BOOL v);
  void __RPC_STUB IWBScriptControl_put_selectableContent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_get_selectableContent_Proxy(IWBScriptControl *This,VARIANT_BOOL *p);
  void __RPC_STUB IWBScriptControl_get_selectableContent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_get_frozen_Proxy(IWBScriptControl *This,VARIANT_BOOL *p);
  void __RPC_STUB IWBScriptControl_get_frozen_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_put_scrollbar_Proxy(IWBScriptControl *This,VARIANT_BOOL v);
  void __RPC_STUB IWBScriptControl_put_scrollbar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_get_scrollbar_Proxy(IWBScriptControl *This,VARIANT_BOOL *p);
  void __RPC_STUB IWBScriptControl_get_scrollbar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_get_version_Proxy(IWBScriptControl *This,BSTR *p);
  void __RPC_STUB IWBScriptControl_get_version_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_get_visibility_Proxy(IWBScriptControl *This,VARIANT_BOOL *p);
  void __RPC_STUB IWBScriptControl_get_visibility_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_put_onvisibilitychange_Proxy(IWBScriptControl *This,VARIANT v);
  void __RPC_STUB IWBScriptControl_put_onvisibilitychange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_get_onvisibilitychange_Proxy(IWBScriptControl *This,VARIANT *p);
  void __RPC_STUB IWBScriptControl_get_onvisibilitychange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif
  EXTERN_C const CLSID CLSID_Scriptlet;
#ifdef __cplusplus
  class Scriptlet;
#endif

#ifndef __IHTMLEmbedElement_INTERFACE_DEFINED__
#define __IHTMLEmbedElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEmbedElement;
  struct IHTMLEmbedElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_hidden(BSTR v) = 0;
    virtual HRESULT WINAPI get_hidden(BSTR *p) = 0;
    virtual HRESULT WINAPI get_palette(BSTR *p) = 0;
    virtual HRESULT WINAPI get_pluginspage(BSTR *p) = 0;
    virtual HRESULT WINAPI put_src(BSTR v) = 0;
    virtual HRESULT WINAPI get_src(BSTR *p) = 0;
    virtual HRESULT WINAPI put_units(BSTR v) = 0;
    virtual HRESULT WINAPI get_units(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLEmbedElement_put_hidden_Proxy(IHTMLEmbedElement *This,BSTR v);
  void __RPC_STUB IHTMLEmbedElement_put_hidden_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_get_hidden_Proxy(IHTMLEmbedElement *This,BSTR *p);
  void __RPC_STUB IHTMLEmbedElement_get_hidden_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_get_palette_Proxy(IHTMLEmbedElement *This,BSTR *p);
  void __RPC_STUB IHTMLEmbedElement_get_palette_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_get_pluginspage_Proxy(IHTMLEmbedElement *This,BSTR *p);
  void __RPC_STUB IHTMLEmbedElement_get_pluginspage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_put_src_Proxy(IHTMLEmbedElement *This,BSTR v);
  void __RPC_STUB IHTMLEmbedElement_put_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_get_src_Proxy(IHTMLEmbedElement *This,BSTR *p);
  void __RPC_STUB IHTMLEmbedElement_get_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_put_units_Proxy(IHTMLEmbedElement *This,BSTR v);
  void __RPC_STUB IHTMLEmbedElement_put_units_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_get_units_Proxy(IHTMLEmbedElement *This,BSTR *p);
  void __RPC_STUB IHTMLEmbedElement_get_units_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_put_name_Proxy(IHTMLEmbedElement *This,BSTR v);
  void __RPC_STUB IHTMLEmbedElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_get_name_Proxy(IHTMLEmbedElement *This,BSTR *p);
  void __RPC_STUB IHTMLEmbedElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_put_width_Proxy(IHTMLEmbedElement *This,VARIANT v);
  void __RPC_STUB IHTMLEmbedElement_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_get_width_Proxy(IHTMLEmbedElement *This,VARIANT *p);
  void __RPC_STUB IHTMLEmbedElement_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_put_height_Proxy(IHTMLEmbedElement *This,VARIANT v);
  void __RPC_STUB IHTMLEmbedElement_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_get_height_Proxy(IHTMLEmbedElement *This,VARIANT *p);
  void __RPC_STUB IHTMLEmbedElement_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLEmbed_DISPINTERFACE_DEFINED__
#define __DispHTMLEmbed_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLEmbed;
  struct DispHTMLEmbed : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLEmbed;
#ifdef __cplusplus
  class HTMLEmbed;
#endif

#ifndef __HTMLMapEvents2_DISPINTERFACE_DEFINED__
#define __HTMLMapEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLMapEvents2;
  struct HTMLMapEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLMapEvents_DISPINTERFACE_DEFINED__
#define __HTMLMapEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLMapEvents;
  struct HTMLMapEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLAreasCollection_INTERFACE_DEFINED__
#define __IHTMLAreasCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAreasCollection;
  struct IHTMLAreasCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI put_length(long v) = 0;
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(VARIANT name,VARIANT index,IDispatch **pdisp) = 0;
    virtual HRESULT WINAPI tags(VARIANT tagName,IDispatch **pdisp) = 0;
    virtual HRESULT WINAPI add(IHTMLElement *element,VARIANT before) = 0;
    virtual HRESULT WINAPI remove(long index = -1) = 0;
  };
  HRESULT WINAPI IHTMLAreasCollection_put_length_Proxy(IHTMLAreasCollection *This,long v);
  void __RPC_STUB IHTMLAreasCollection_put_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreasCollection_get_length_Proxy(IHTMLAreasCollection *This,long *p);
  void __RPC_STUB IHTMLAreasCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreasCollection_get__newEnum_Proxy(IHTMLAreasCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLAreasCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreasCollection_item_Proxy(IHTMLAreasCollection *This,VARIANT name,VARIANT index,IDispatch **pdisp);
  void __RPC_STUB IHTMLAreasCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreasCollection_tags_Proxy(IHTMLAreasCollection *This,VARIANT tagName,IDispatch **pdisp);
  void __RPC_STUB IHTMLAreasCollection_tags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreasCollection_add_Proxy(IHTMLAreasCollection *This,IHTMLElement *element,VARIANT before);
  void __RPC_STUB IHTMLAreasCollection_add_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreasCollection_remove_Proxy(IHTMLAreasCollection *This,long index);
  void __RPC_STUB IHTMLAreasCollection_remove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLAreasCollection2_INTERFACE_DEFINED__
#define __IHTMLAreasCollection2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAreasCollection2;
  struct IHTMLAreasCollection2 : public IDispatch {
  public:
    virtual HRESULT WINAPI urns(VARIANT urn,IDispatch **pdisp) = 0;
  };
  HRESULT WINAPI IHTMLAreasCollection2_urns_Proxy(IHTMLAreasCollection2 *This,VARIANT urn,IDispatch **pdisp);
  void __RPC_STUB IHTMLAreasCollection2_urns_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLAreasCollection3_INTERFACE_DEFINED__
#define __IHTMLAreasCollection3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAreasCollection3;
  struct IHTMLAreasCollection3 : public IDispatch {
  public:
    virtual HRESULT WINAPI namedItem(BSTR name,IDispatch **pdisp) = 0;
  };
  HRESULT WINAPI IHTMLAreasCollection3_namedItem_Proxy(IHTMLAreasCollection3 *This,BSTR name,IDispatch **pdisp);
  void __RPC_STUB IHTMLAreasCollection3_namedItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLMapElement_INTERFACE_DEFINED__
#define __IHTMLMapElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLMapElement;
  struct IHTMLMapElement : public IDispatch {
  public:
    virtual HRESULT WINAPI get_areas(IHTMLAreasCollection **p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLMapElement_get_areas_Proxy(IHTMLMapElement *This,IHTMLAreasCollection **p);
  void __RPC_STUB IHTMLMapElement_get_areas_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMapElement_put_name_Proxy(IHTMLMapElement *This,BSTR v);
  void __RPC_STUB IHTMLMapElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMapElement_get_name_Proxy(IHTMLMapElement *This,BSTR *p);
  void __RPC_STUB IHTMLMapElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLAreasCollection_DISPINTERFACE_DEFINED__
#define __DispHTMLAreasCollection_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLAreasCollection;
  struct DispHTMLAreasCollection : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLAreasCollection;
#ifdef __cplusplus
  class HTMLAreasCollection;
#endif

#ifndef __DispHTMLMapElement_DISPINTERFACE_DEFINED__
#define __DispHTMLMapElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLMapElement;
  struct DispHTMLMapElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLMapElement;
#ifdef __cplusplus
  class HTMLMapElement;
#endif

#ifndef __HTMLAreaEvents2_DISPINTERFACE_DEFINED__
#define __HTMLAreaEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLAreaEvents2;
  struct HTMLAreaEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLAreaEvents_DISPINTERFACE_DEFINED__
#define __HTMLAreaEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLAreaEvents;
  struct HTMLAreaEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLAreaElement_INTERFACE_DEFINED__
#define __IHTMLAreaElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAreaElement;
  struct IHTMLAreaElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_shape(BSTR v) = 0;
    virtual HRESULT WINAPI get_shape(BSTR *p) = 0;
    virtual HRESULT WINAPI put_coords(BSTR v) = 0;
    virtual HRESULT WINAPI get_coords(BSTR *p) = 0;
    virtual HRESULT WINAPI put_href(BSTR v) = 0;
    virtual HRESULT WINAPI get_href(BSTR *p) = 0;
    virtual HRESULT WINAPI put_target(BSTR v) = 0;
    virtual HRESULT WINAPI get_target(BSTR *p) = 0;
    virtual HRESULT WINAPI put_alt(BSTR v) = 0;
    virtual HRESULT WINAPI get_alt(BSTR *p) = 0;
    virtual HRESULT WINAPI put_noHref(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_noHref(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_host(BSTR v) = 0;
    virtual HRESULT WINAPI get_host(BSTR *p) = 0;
    virtual HRESULT WINAPI put_hostname(BSTR v) = 0;
    virtual HRESULT WINAPI get_hostname(BSTR *p) = 0;
    virtual HRESULT WINAPI put_pathname(BSTR v) = 0;
    virtual HRESULT WINAPI get_pathname(BSTR *p) = 0;
    virtual HRESULT WINAPI put_port(BSTR v) = 0;
    virtual HRESULT WINAPI get_port(BSTR *p) = 0;
    virtual HRESULT WINAPI put_protocol(BSTR v) = 0;
    virtual HRESULT WINAPI get_protocol(BSTR *p) = 0;
    virtual HRESULT WINAPI put_search(BSTR v) = 0;
    virtual HRESULT WINAPI get_search(BSTR *p) = 0;
    virtual HRESULT WINAPI put_hash(BSTR v) = 0;
    virtual HRESULT WINAPI get_hash(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onblur(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onblur(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onfocus(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfocus(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_tabIndex(short v) = 0;
    virtual HRESULT WINAPI get_tabIndex(short *p) = 0;
    virtual HRESULT WINAPI focus(void) = 0;
    virtual HRESULT WINAPI blur(void) = 0;
  };
  HRESULT WINAPI IHTMLAreaElement_put_shape_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_shape_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_shape_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_shape_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_coords_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_coords_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_coords_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_coords_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_href_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_href_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_target_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_target_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_alt_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_alt_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_noHref_Proxy(IHTMLAreaElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLAreaElement_put_noHref_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_noHref_Proxy(IHTMLAreaElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLAreaElement_get_noHref_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_host_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_host_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_host_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_host_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_hostname_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_hostname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_hostname_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_hostname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_pathname_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_pathname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_pathname_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_pathname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_port_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_port_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_port_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_port_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_protocol_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_protocol_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_protocol_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_protocol_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_search_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_search_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_search_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_search_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_hash_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_hash_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_hash_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_hash_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_onblur_Proxy(IHTMLAreaElement *This,VARIANT v);
  void __RPC_STUB IHTMLAreaElement_put_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_onblur_Proxy(IHTMLAreaElement *This,VARIANT *p);
  void __RPC_STUB IHTMLAreaElement_get_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_onfocus_Proxy(IHTMLAreaElement *This,VARIANT v);
  void __RPC_STUB IHTMLAreaElement_put_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_onfocus_Proxy(IHTMLAreaElement *This,VARIANT *p);
  void __RPC_STUB IHTMLAreaElement_get_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_tabIndex_Proxy(IHTMLAreaElement *This,short v);
  void __RPC_STUB IHTMLAreaElement_put_tabIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_tabIndex_Proxy(IHTMLAreaElement *This,short *p);
  void __RPC_STUB IHTMLAreaElement_get_tabIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_focus_Proxy(IHTMLAreaElement *This);
  void __RPC_STUB IHTMLAreaElement_focus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_blur_Proxy(IHTMLAreaElement *This);
  void __RPC_STUB IHTMLAreaElement_blur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLAreaElement_DISPINTERFACE_DEFINED__
#define __DispHTMLAreaElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLAreaElement;
  struct DispHTMLAreaElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLAreaElement;
#ifdef __cplusplus
  class HTMLAreaElement;
#endif

#ifndef __IHTMLTableCaption_INTERFACE_DEFINED__
#define __IHTMLTableCaption_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableCaption;
  struct IHTMLTableCaption : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_vAlign(BSTR v) = 0;
    virtual HRESULT WINAPI get_vAlign(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLTableCaption_put_align_Proxy(IHTMLTableCaption *This,BSTR v);
  void __RPC_STUB IHTMLTableCaption_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCaption_get_align_Proxy(IHTMLTableCaption *This,BSTR *p);
  void __RPC_STUB IHTMLTableCaption_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCaption_put_vAlign_Proxy(IHTMLTableCaption *This,BSTR v);
  void __RPC_STUB IHTMLTableCaption_put_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCaption_get_vAlign_Proxy(IHTMLTableCaption *This,BSTR *p);
  void __RPC_STUB IHTMLTableCaption_get_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLTableCaption_DISPINTERFACE_DEFINED__
#define __DispHTMLTableCaption_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLTableCaption;
  struct DispHTMLTableCaption : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLTableCaption;
#ifdef __cplusplus
  class HTMLTableCaption;
#endif

#ifndef __IHTMLCommentElement_INTERFACE_DEFINED__
#define __IHTMLCommentElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLCommentElement;
  struct IHTMLCommentElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_text(BSTR v) = 0;
    virtual HRESULT WINAPI get_text(BSTR *p) = 0;
    virtual HRESULT WINAPI put_atomic(long v) = 0;
    virtual HRESULT WINAPI get_atomic(long *p) = 0;
  };
  HRESULT WINAPI IHTMLCommentElement_put_text_Proxy(IHTMLCommentElement *This,BSTR v);
  void __RPC_STUB IHTMLCommentElement_put_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement_get_text_Proxy(IHTMLCommentElement *This,BSTR *p);
  void __RPC_STUB IHTMLCommentElement_get_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement_put_atomic_Proxy(IHTMLCommentElement *This,long v);
  void __RPC_STUB IHTMLCommentElement_put_atomic_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement_get_atomic_Proxy(IHTMLCommentElement *This,long *p);
  void __RPC_STUB IHTMLCommentElement_get_atomic_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLCommentElement2_INTERFACE_DEFINED__
#define __IHTMLCommentElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLCommentElement2;
  struct IHTMLCommentElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_data(BSTR v) = 0;
    virtual HRESULT WINAPI get_data(BSTR *p) = 0;
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI substringData(long offset,long Count,BSTR *pbstrsubString) = 0;
    virtual HRESULT WINAPI appendData(BSTR bstrstring) = 0;
    virtual HRESULT WINAPI insertData(long offset,BSTR bstrstring) = 0;
    virtual HRESULT WINAPI deleteData(long offset,long Count) = 0;
    virtual HRESULT WINAPI replaceData(long offset,long Count,BSTR bstrstring) = 0;
  };
  HRESULT WINAPI IHTMLCommentElement2_put_data_Proxy(IHTMLCommentElement2 *This,BSTR v);
  void __RPC_STUB IHTMLCommentElement2_put_data_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement2_get_data_Proxy(IHTMLCommentElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLCommentElement2_get_data_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement2_get_length_Proxy(IHTMLCommentElement2 *This,long *p);
  void __RPC_STUB IHTMLCommentElement2_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement2_substringData_Proxy(IHTMLCommentElement2 *This,long offset,long Count,BSTR *pbstrsubString);
  void __RPC_STUB IHTMLCommentElement2_substringData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement2_appendData_Proxy(IHTMLCommentElement2 *This,BSTR bstrstring);
  void __RPC_STUB IHTMLCommentElement2_appendData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement2_insertData_Proxy(IHTMLCommentElement2 *This,long offset,BSTR bstrstring);
  void __RPC_STUB IHTMLCommentElement2_insertData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement2_deleteData_Proxy(IHTMLCommentElement2 *This,long offset,long Count);
  void __RPC_STUB IHTMLCommentElement2_deleteData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement2_replaceData_Proxy(IHTMLCommentElement2 *This,long offset,long Count,BSTR bstrstring);
  void __RPC_STUB IHTMLCommentElement2_replaceData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLCommentElement_DISPINTERFACE_DEFINED__
#define __DispHTMLCommentElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLCommentElement;
  struct DispHTMLCommentElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLCommentElement;
#ifdef __cplusplus
  class HTMLCommentElement;
#endif

#ifndef __IHTMLPhraseElement_INTERFACE_DEFINED__
#define __IHTMLPhraseElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLPhraseElement;
  struct IHTMLPhraseElement : public IDispatch {
  };
#endif

#ifndef __IHTMLPhraseElement2_INTERFACE_DEFINED__
#define __IHTMLPhraseElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLPhraseElement2;
  struct IHTMLPhraseElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_cite(BSTR v) = 0;
    virtual HRESULT WINAPI get_cite(BSTR *p) = 0;
    virtual HRESULT WINAPI put_dateTime(BSTR v) = 0;
    virtual HRESULT WINAPI get_dateTime(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLPhraseElement2_put_cite_Proxy(IHTMLPhraseElement2 *This,BSTR v);
  void __RPC_STUB IHTMLPhraseElement2_put_cite_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPhraseElement2_get_cite_Proxy(IHTMLPhraseElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLPhraseElement2_get_cite_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPhraseElement2_put_dateTime_Proxy(IHTMLPhraseElement2 *This,BSTR v);
  void __RPC_STUB IHTMLPhraseElement2_put_dateTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPhraseElement2_get_dateTime_Proxy(IHTMLPhraseElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLPhraseElement2_get_dateTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLSpanElement_INTERFACE_DEFINED__
#define __IHTMLSpanElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLSpanElement;
  struct IHTMLSpanElement : public IDispatch {
  };
#endif

#ifndef __DispHTMLPhraseElement_DISPINTERFACE_DEFINED__
#define __DispHTMLPhraseElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLPhraseElement;
  struct DispHTMLPhraseElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLPhraseElement;
#ifdef __cplusplus
  class HTMLPhraseElement;
#endif

#ifndef __DispHTMLSpanElement_DISPINTERFACE_DEFINED__
#define __DispHTMLSpanElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLSpanElement;
  struct DispHTMLSpanElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLSpanElement;
#ifdef __cplusplus
  class HTMLSpanElement;
#endif

#ifndef __HTMLTableEvents2_DISPINTERFACE_DEFINED__
#define __HTMLTableEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLTableEvents2;
  struct HTMLTableEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLTableEvents_DISPINTERFACE_DEFINED__
#define __HTMLTableEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLTableEvents;
  struct HTMLTableEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLTableSection_INTERFACE_DEFINED__
#define __IHTMLTableSection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableSection;
  struct IHTMLTableSection : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_vAlign(BSTR v) = 0;
    virtual HRESULT WINAPI get_vAlign(BSTR *p) = 0;
    virtual HRESULT WINAPI put_bgColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bgColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_rows(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI insertRow(long index,IDispatch **row) = 0;
    virtual HRESULT WINAPI deleteRow(long index = -1) = 0;
  };
  HRESULT WINAPI IHTMLTableSection_put_align_Proxy(IHTMLTableSection *This,BSTR v);
  void __RPC_STUB IHTMLTableSection_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection_get_align_Proxy(IHTMLTableSection *This,BSTR *p);
  void __RPC_STUB IHTMLTableSection_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection_put_vAlign_Proxy(IHTMLTableSection *This,BSTR v);
  void __RPC_STUB IHTMLTableSection_put_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection_get_vAlign_Proxy(IHTMLTableSection *This,BSTR *p);
  void __RPC_STUB IHTMLTableSection_get_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection_put_bgColor_Proxy(IHTMLTableSection *This,VARIANT v);
  void __RPC_STUB IHTMLTableSection_put_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection_get_bgColor_Proxy(IHTMLTableSection *This,VARIANT *p);
  void __RPC_STUB IHTMLTableSection_get_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection_get_rows_Proxy(IHTMLTableSection *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLTableSection_get_rows_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection_insertRow_Proxy(IHTMLTableSection *This,long index,IDispatch **row);
  void __RPC_STUB IHTMLTableSection_insertRow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection_deleteRow_Proxy(IHTMLTableSection *This,long index);
  void __RPC_STUB IHTMLTableSection_deleteRow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTable_INTERFACE_DEFINED__
#define __IHTMLTable_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTable;
  struct IHTMLTable : public IDispatch {
  public:
    virtual HRESULT WINAPI put_cols(long v) = 0;
    virtual HRESULT WINAPI get_cols(long *p) = 0;
    virtual HRESULT WINAPI put_border(VARIANT v) = 0;
    virtual HRESULT WINAPI get_border(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_frame(BSTR v) = 0;
    virtual HRESULT WINAPI get_frame(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rules(BSTR v) = 0;
    virtual HRESULT WINAPI get_rules(BSTR *p) = 0;
    virtual HRESULT WINAPI put_cellSpacing(VARIANT v) = 0;
    virtual HRESULT WINAPI get_cellSpacing(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_cellPadding(VARIANT v) = 0;
    virtual HRESULT WINAPI get_cellPadding(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_background(BSTR v) = 0;
    virtual HRESULT WINAPI get_background(BSTR *p) = 0;
    virtual HRESULT WINAPI put_bgColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bgColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderColorLight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColorLight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderColorDark(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColorDark(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI refresh(void) = 0;
    virtual HRESULT WINAPI get_rows(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_dataPageSize(long v) = 0;
    virtual HRESULT WINAPI get_dataPageSize(long *p) = 0;
    virtual HRESULT WINAPI nextPage(void) = 0;
    virtual HRESULT WINAPI previousPage(void) = 0;
    virtual HRESULT WINAPI get_tHead(IHTMLTableSection **p) = 0;
    virtual HRESULT WINAPI get_tFoot(IHTMLTableSection **p) = 0;
    virtual HRESULT WINAPI get_tBodies(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI get_caption(IHTMLTableCaption **p) = 0;
    virtual HRESULT WINAPI createTHead(IDispatch **head) = 0;
    virtual HRESULT WINAPI deleteTHead(void) = 0;
    virtual HRESULT WINAPI createTFoot(IDispatch **foot) = 0;
    virtual HRESULT WINAPI deleteTFoot(void) = 0;
    virtual HRESULT WINAPI createCaption(IHTMLTableCaption **caption) = 0;
    virtual HRESULT WINAPI deleteCaption(void) = 0;
    virtual HRESULT WINAPI insertRow(long index,IDispatch **row) = 0;
    virtual HRESULT WINAPI deleteRow(long index = -1) = 0;
    virtual HRESULT WINAPI get_readyState(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onreadystatechange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onreadystatechange(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLTable_put_cols_Proxy(IHTMLTable *This,long v);
  void __RPC_STUB IHTMLTable_put_cols_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_cols_Proxy(IHTMLTable *This,long *p);
  void __RPC_STUB IHTMLTable_get_cols_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_border_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_border_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_frame_Proxy(IHTMLTable *This,BSTR v);
  void __RPC_STUB IHTMLTable_put_frame_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_frame_Proxy(IHTMLTable *This,BSTR *p);
  void __RPC_STUB IHTMLTable_get_frame_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_rules_Proxy(IHTMLTable *This,BSTR v);
  void __RPC_STUB IHTMLTable_put_rules_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_rules_Proxy(IHTMLTable *This,BSTR *p);
  void __RPC_STUB IHTMLTable_get_rules_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_cellSpacing_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_cellSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_cellSpacing_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_cellSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_cellPadding_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_cellPadding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_cellPadding_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_cellPadding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_background_Proxy(IHTMLTable *This,BSTR v);
  void __RPC_STUB IHTMLTable_put_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_background_Proxy(IHTMLTable *This,BSTR *p);
  void __RPC_STUB IHTMLTable_get_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_bgColor_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_bgColor_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_borderColor_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_borderColor_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_borderColorLight_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_borderColorLight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_borderColorLight_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_borderColorLight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_borderColorDark_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_borderColorDark_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_borderColorDark_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_borderColorDark_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_align_Proxy(IHTMLTable *This,BSTR v);
  void __RPC_STUB IHTMLTable_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_align_Proxy(IHTMLTable *This,BSTR *p);
  void __RPC_STUB IHTMLTable_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_refresh_Proxy(IHTMLTable *This);
  void __RPC_STUB IHTMLTable_refresh_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_rows_Proxy(IHTMLTable *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLTable_get_rows_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_width_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_width_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_height_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_height_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_dataPageSize_Proxy(IHTMLTable *This,long v);
  void __RPC_STUB IHTMLTable_put_dataPageSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_dataPageSize_Proxy(IHTMLTable *This,long *p);
  void __RPC_STUB IHTMLTable_get_dataPageSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_nextPage_Proxy(IHTMLTable *This);
  void __RPC_STUB IHTMLTable_nextPage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_previousPage_Proxy(IHTMLTable *This);
  void __RPC_STUB IHTMLTable_previousPage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_tHead_Proxy(IHTMLTable *This,IHTMLTableSection **p);
  void __RPC_STUB IHTMLTable_get_tHead_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_tFoot_Proxy(IHTMLTable *This,IHTMLTableSection **p);
  void __RPC_STUB IHTMLTable_get_tFoot_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_tBodies_Proxy(IHTMLTable *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLTable_get_tBodies_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_caption_Proxy(IHTMLTable *This,IHTMLTableCaption **p);
  void __RPC_STUB IHTMLTable_get_caption_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_createTHead_Proxy(IHTMLTable *This,IDispatch **head);
  void __RPC_STUB IHTMLTable_createTHead_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_deleteTHead_Proxy(IHTMLTable *This);
  void __RPC_STUB IHTMLTable_deleteTHead_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_createTFoot_Proxy(IHTMLTable *This,IDispatch **foot);
  void __RPC_STUB IHTMLTable_createTFoot_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_deleteTFoot_Proxy(IHTMLTable *This);
  void __RPC_STUB IHTMLTable_deleteTFoot_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_createCaption_Proxy(IHTMLTable *This,IHTMLTableCaption **caption);
  void __RPC_STUB IHTMLTable_createCaption_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_deleteCaption_Proxy(IHTMLTable *This);
  void __RPC_STUB IHTMLTable_deleteCaption_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_insertRow_Proxy(IHTMLTable *This,long index,IDispatch **row);
  void __RPC_STUB IHTMLTable_insertRow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_deleteRow_Proxy(IHTMLTable *This,long index);
  void __RPC_STUB IHTMLTable_deleteRow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_readyState_Proxy(IHTMLTable *This,BSTR *p);
  void __RPC_STUB IHTMLTable_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_onreadystatechange_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_onreadystatechange_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTable2_INTERFACE_DEFINED__
#define __IHTMLTable2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTable2;
  struct IHTMLTable2 : public IDispatch {
  public:
    virtual HRESULT WINAPI firstPage(void) = 0;
    virtual HRESULT WINAPI lastPage(void) = 0;
    virtual HRESULT WINAPI get_cells(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI moveRow(long indexFrom,long indexTo,IDispatch **row) = 0;
  };
  HRESULT WINAPI IHTMLTable2_firstPage_Proxy(IHTMLTable2 *This);
  void __RPC_STUB IHTMLTable2_firstPage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable2_lastPage_Proxy(IHTMLTable2 *This);
  void __RPC_STUB IHTMLTable2_lastPage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable2_get_cells_Proxy(IHTMLTable2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLTable2_get_cells_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable2_moveRow_Proxy(IHTMLTable2 *This,long indexFrom,long indexTo,IDispatch **row);
  void __RPC_STUB IHTMLTable2_moveRow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTable3_INTERFACE_DEFINED__
#define __IHTMLTable3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTable3;
  struct IHTMLTable3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_summary(BSTR v) = 0;
    virtual HRESULT WINAPI get_summary(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLTable3_put_summary_Proxy(IHTMLTable3 *This,BSTR v);
  void __RPC_STUB IHTMLTable3_put_summary_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable3_get_summary_Proxy(IHTMLTable3 *This,BSTR *p);
  void __RPC_STUB IHTMLTable3_get_summary_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableCol_INTERFACE_DEFINED__
#define __IHTMLTableCol_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableCol;
  struct IHTMLTableCol : public IDispatch {
  public:
    virtual HRESULT WINAPI put_span(long v) = 0;
    virtual HRESULT WINAPI get_span(long *p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_vAlign(BSTR v) = 0;
    virtual HRESULT WINAPI get_vAlign(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLTableCol_put_span_Proxy(IHTMLTableCol *This,long v);
  void __RPC_STUB IHTMLTableCol_put_span_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol_get_span_Proxy(IHTMLTableCol *This,long *p);
  void __RPC_STUB IHTMLTableCol_get_span_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol_put_width_Proxy(IHTMLTableCol *This,VARIANT v);
  void __RPC_STUB IHTMLTableCol_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol_get_width_Proxy(IHTMLTableCol *This,VARIANT *p);
  void __RPC_STUB IHTMLTableCol_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol_put_align_Proxy(IHTMLTableCol *This,BSTR v);
  void __RPC_STUB IHTMLTableCol_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol_get_align_Proxy(IHTMLTableCol *This,BSTR *p);
  void __RPC_STUB IHTMLTableCol_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol_put_vAlign_Proxy(IHTMLTableCol *This,BSTR v);
  void __RPC_STUB IHTMLTableCol_put_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol_get_vAlign_Proxy(IHTMLTableCol *This,BSTR *p);
  void __RPC_STUB IHTMLTableCol_get_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableCol2_INTERFACE_DEFINED__
#define __IHTMLTableCol2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableCol2;
  struct IHTMLTableCol2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_ch(BSTR v) = 0;
    virtual HRESULT WINAPI get_ch(BSTR *p) = 0;
    virtual HRESULT WINAPI put_chOff(BSTR v) = 0;
    virtual HRESULT WINAPI get_chOff(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLTableCol2_put_ch_Proxy(IHTMLTableCol2 *This,BSTR v);
  void __RPC_STUB IHTMLTableCol2_put_ch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol2_get_ch_Proxy(IHTMLTableCol2 *This,BSTR *p);
  void __RPC_STUB IHTMLTableCol2_get_ch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol2_put_chOff_Proxy(IHTMLTableCol2 *This,BSTR v);
  void __RPC_STUB IHTMLTableCol2_put_chOff_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol2_get_chOff_Proxy(IHTMLTableCol2 *This,BSTR *p);
  void __RPC_STUB IHTMLTableCol2_get_chOff_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableSection2_INTERFACE_DEFINED__
#define __IHTMLTableSection2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableSection2;
  struct IHTMLTableSection2 : public IDispatch {
  public:
    virtual HRESULT WINAPI moveRow(long indexFrom,long indexTo,IDispatch **row) = 0;
  };
  HRESULT WINAPI IHTMLTableSection2_moveRow_Proxy(IHTMLTableSection2 *This,long indexFrom,long indexTo,IDispatch **row);
  void __RPC_STUB IHTMLTableSection2_moveRow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableSection3_INTERFACE_DEFINED__
#define __IHTMLTableSection3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableSection3;
  struct IHTMLTableSection3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_ch(BSTR v) = 0;
    virtual HRESULT WINAPI get_ch(BSTR *p) = 0;
    virtual HRESULT WINAPI put_chOff(BSTR v) = 0;
    virtual HRESULT WINAPI get_chOff(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLTableSection3_put_ch_Proxy(IHTMLTableSection3 *This,BSTR v);
  void __RPC_STUB IHTMLTableSection3_put_ch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection3_get_ch_Proxy(IHTMLTableSection3 *This,BSTR *p);
  void __RPC_STUB IHTMLTableSection3_get_ch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection3_put_chOff_Proxy(IHTMLTableSection3 *This,BSTR v);
  void __RPC_STUB IHTMLTableSection3_put_chOff_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection3_get_chOff_Proxy(IHTMLTableSection3 *This,BSTR *p);
  void __RPC_STUB IHTMLTableSection3_get_chOff_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableRow_INTERFACE_DEFINED__
#define __IHTMLTableRow_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableRow;
  struct IHTMLTableRow : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_vAlign(BSTR v) = 0;
    virtual HRESULT WINAPI get_vAlign(BSTR *p) = 0;
    virtual HRESULT WINAPI put_bgColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bgColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderColorLight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColorLight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderColorDark(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColorDark(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_rowIndex(long *p) = 0;
    virtual HRESULT WINAPI get_sectionRowIndex(long *p) = 0;
    virtual HRESULT WINAPI get_cells(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI insertCell(long index,IDispatch **row) = 0;
    virtual HRESULT WINAPI deleteCell(long index = -1) = 0;
  };
  HRESULT WINAPI IHTMLTableRow_put_align_Proxy(IHTMLTableRow *This,BSTR v);
  void __RPC_STUB IHTMLTableRow_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_get_align_Proxy(IHTMLTableRow *This,BSTR *p);
  void __RPC_STUB IHTMLTableRow_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_put_vAlign_Proxy(IHTMLTableRow *This,BSTR v);
  void __RPC_STUB IHTMLTableRow_put_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_get_vAlign_Proxy(IHTMLTableRow *This,BSTR *p);
  void __RPC_STUB IHTMLTableRow_get_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_put_bgColor_Proxy(IHTMLTableRow *This,VARIANT v);
  void __RPC_STUB IHTMLTableRow_put_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_get_bgColor_Proxy(IHTMLTableRow *This,VARIANT *p);
  void __RPC_STUB IHTMLTableRow_get_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_put_borderColor_Proxy(IHTMLTableRow *This,VARIANT v);
  void __RPC_STUB IHTMLTableRow_put_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_get_borderColor_Proxy(IHTMLTableRow *This,VARIANT *p);
  void __RPC_STUB IHTMLTableRow_get_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_put_borderColorLight_Proxy(IHTMLTableRow *This,VARIANT v);
  void __RPC_STUB IHTMLTableRow_put_borderColorLight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_get_borderColorLight_Proxy(IHTMLTableRow *This,VARIANT *p);
  void __RPC_STUB IHTMLTableRow_get_borderColorLight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_put_borderColorDark_Proxy(IHTMLTableRow *This,VARIANT v);
  void __RPC_STUB IHTMLTableRow_put_borderColorDark_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_get_borderColorDark_Proxy(IHTMLTableRow *This,VARIANT *p);
  void __RPC_STUB IHTMLTableRow_get_borderColorDark_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_get_rowIndex_Proxy(IHTMLTableRow *This,long *p);
  void __RPC_STUB IHTMLTableRow_get_rowIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_get_sectionRowIndex_Proxy(IHTMLTableRow *This,long *p);
  void __RPC_STUB IHTMLTableRow_get_sectionRowIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_get_cells_Proxy(IHTMLTableRow *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLTableRow_get_cells_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_insertCell_Proxy(IHTMLTableRow *This,long index,IDispatch **row);
  void __RPC_STUB IHTMLTableRow_insertCell_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_deleteCell_Proxy(IHTMLTableRow *This,long index);
  void __RPC_STUB IHTMLTableRow_deleteCell_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableRow2_INTERFACE_DEFINED__
#define __IHTMLTableRow2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableRow2;
  struct IHTMLTableRow2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLTableRow2_put_height_Proxy(IHTMLTableRow2 *This,VARIANT v);
  void __RPC_STUB IHTMLTableRow2_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow2_get_height_Proxy(IHTMLTableRow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLTableRow2_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableRow3_INTERFACE_DEFINED__
#define __IHTMLTableRow3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableRow3;
  struct IHTMLTableRow3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_ch(BSTR v) = 0;
    virtual HRESULT WINAPI get_ch(BSTR *p) = 0;
    virtual HRESULT WINAPI put_chOff(BSTR v) = 0;
    virtual HRESULT WINAPI get_chOff(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLTableRow3_put_ch_Proxy(IHTMLTableRow3 *This,BSTR v);
  void __RPC_STUB IHTMLTableRow3_put_ch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow3_get_ch_Proxy(IHTMLTableRow3 *This,BSTR *p);
  void __RPC_STUB IHTMLTableRow3_get_ch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow3_put_chOff_Proxy(IHTMLTableRow3 *This,BSTR v);
  void __RPC_STUB IHTMLTableRow3_put_chOff_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow3_get_chOff_Proxy(IHTMLTableRow3 *This,BSTR *p);
  void __RPC_STUB IHTMLTableRow3_get_chOff_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableRowMetrics_INTERFACE_DEFINED__
#define __IHTMLTableRowMetrics_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableRowMetrics;
  struct IHTMLTableRowMetrics : public IDispatch {
  public:
    virtual HRESULT WINAPI get_clientHeight(long *p) = 0;
    virtual HRESULT WINAPI get_clientWidth(long *p) = 0;
    virtual HRESULT WINAPI get_clientTop(long *p) = 0;
    virtual HRESULT WINAPI get_clientLeft(long *p) = 0;
  };
  HRESULT WINAPI IHTMLTableRowMetrics_get_clientHeight_Proxy(IHTMLTableRowMetrics *This,long *p);
  void __RPC_STUB IHTMLTableRowMetrics_get_clientHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRowMetrics_get_clientWidth_Proxy(IHTMLTableRowMetrics *This,long *p);
  void __RPC_STUB IHTMLTableRowMetrics_get_clientWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRowMetrics_get_clientTop_Proxy(IHTMLTableRowMetrics *This,long *p);
  void __RPC_STUB IHTMLTableRowMetrics_get_clientTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRowMetrics_get_clientLeft_Proxy(IHTMLTableRowMetrics *This,long *p);
  void __RPC_STUB IHTMLTableRowMetrics_get_clientLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableCell_INTERFACE_DEFINED__
#define __IHTMLTableCell_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableCell;
  struct IHTMLTableCell : public IDispatch {
  public:
    virtual HRESULT WINAPI put_rowSpan(long v) = 0;
    virtual HRESULT WINAPI get_rowSpan(long *p) = 0;
    virtual HRESULT WINAPI put_colSpan(long v) = 0;
    virtual HRESULT WINAPI get_colSpan(long *p) = 0;
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_vAlign(BSTR v) = 0;
    virtual HRESULT WINAPI get_vAlign(BSTR *p) = 0;
    virtual HRESULT WINAPI put_bgColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bgColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_noWrap(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_noWrap(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_background(BSTR v) = 0;
    virtual HRESULT WINAPI get_background(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderColorLight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColorLight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderColorDark(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColorDark(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_cellIndex(long *p) = 0;
  };
  HRESULT WINAPI IHTMLTableCell_put_rowSpan_Proxy(IHTMLTableCell *This,long v);
  void __RPC_STUB IHTMLTableCell_put_rowSpan_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_rowSpan_Proxy(IHTMLTableCell *This,long *p);
  void __RPC_STUB IHTMLTableCell_get_rowSpan_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_colSpan_Proxy(IHTMLTableCell *This,long v);
  void __RPC_STUB IHTMLTableCell_put_colSpan_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_colSpan_Proxy(IHTMLTableCell *This,long *p);
  void __RPC_STUB IHTMLTableCell_get_colSpan_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_align_Proxy(IHTMLTableCell *This,BSTR v);
  void __RPC_STUB IHTMLTableCell_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_align_Proxy(IHTMLTableCell *This,BSTR *p);
  void __RPC_STUB IHTMLTableCell_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_vAlign_Proxy(IHTMLTableCell *This,BSTR v);
  void __RPC_STUB IHTMLTableCell_put_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_vAlign_Proxy(IHTMLTableCell *This,BSTR *p);
  void __RPC_STUB IHTMLTableCell_get_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_bgColor_Proxy(IHTMLTableCell *This,VARIANT v);
  void __RPC_STUB IHTMLTableCell_put_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_bgColor_Proxy(IHTMLTableCell *This,VARIANT *p);
  void __RPC_STUB IHTMLTableCell_get_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_noWrap_Proxy(IHTMLTableCell *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLTableCell_put_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_noWrap_Proxy(IHTMLTableCell *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLTableCell_get_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_background_Proxy(IHTMLTableCell *This,BSTR v);
  void __RPC_STUB IHTMLTableCell_put_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_background_Proxy(IHTMLTableCell *This,BSTR *p);
  void __RPC_STUB IHTMLTableCell_get_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_borderColor_Proxy(IHTMLTableCell *This,VARIANT v);
  void __RPC_STUB IHTMLTableCell_put_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_borderColor_Proxy(IHTMLTableCell *This,VARIANT *p);
  void __RPC_STUB IHTMLTableCell_get_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_borderColorLight_Proxy(IHTMLTableCell *This,VARIANT v);
  void __RPC_STUB IHTMLTableCell_put_borderColorLight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_borderColorLight_Proxy(IHTMLTableCell *This,VARIANT *p);
  void __RPC_STUB IHTMLTableCell_get_borderColorLight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_borderColorDark_Proxy(IHTMLTableCell *This,VARIANT v);
  void __RPC_STUB IHTMLTableCell_put_borderColorDark_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_borderColorDark_Proxy(IHTMLTableCell *This,VARIANT *p);
  void __RPC_STUB IHTMLTableCell_get_borderColorDark_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_width_Proxy(IHTMLTableCell *This,VARIANT v);
  void __RPC_STUB IHTMLTableCell_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_width_Proxy(IHTMLTableCell *This,VARIANT *p);
  void __RPC_STUB IHTMLTableCell_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_height_Proxy(IHTMLTableCell *This,VARIANT v);
  void __RPC_STUB IHTMLTableCell_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_height_Proxy(IHTMLTableCell *This,VARIANT *p);
  void __RPC_STUB IHTMLTableCell_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_cellIndex_Proxy(IHTMLTableCell *This,long *p);
  void __RPC_STUB IHTMLTableCell_get_cellIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableCell2_INTERFACE_DEFINED__
#define __IHTMLTableCell2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableCell2;
  struct IHTMLTableCell2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_abbr(BSTR v) = 0;
    virtual HRESULT WINAPI get_abbr(BSTR *p) = 0;
    virtual HRESULT WINAPI put_axis(BSTR v) = 0;
    virtual HRESULT WINAPI get_axis(BSTR *p) = 0;
    virtual HRESULT WINAPI put_ch(BSTR v) = 0;
    virtual HRESULT WINAPI get_ch(BSTR *p) = 0;
    virtual HRESULT WINAPI put_chOff(BSTR v) = 0;
    virtual HRESULT WINAPI get_chOff(BSTR *p) = 0;
    virtual HRESULT WINAPI put_headers(BSTR v) = 0;
    virtual HRESULT WINAPI get_headers(BSTR *p) = 0;
    virtual HRESULT WINAPI put_scope(BSTR v) = 0;
    virtual HRESULT WINAPI get_scope(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLTableCell2_put_abbr_Proxy(IHTMLTableCell2 *This,BSTR v);
  void __RPC_STUB IHTMLTableCell2_put_abbr_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_get_abbr_Proxy(IHTMLTableCell2 *This,BSTR *p);
  void __RPC_STUB IHTMLTableCell2_get_abbr_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_put_axis_Proxy(IHTMLTableCell2 *This,BSTR v);
  void __RPC_STUB IHTMLTableCell2_put_axis_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_get_axis_Proxy(IHTMLTableCell2 *This,BSTR *p);
  void __RPC_STUB IHTMLTableCell2_get_axis_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_put_ch_Proxy(IHTMLTableCell2 *This,BSTR v);
  void __RPC_STUB IHTMLTableCell2_put_ch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_get_ch_Proxy(IHTMLTableCell2 *This,BSTR *p);
  void __RPC_STUB IHTMLTableCell2_get_ch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_put_chOff_Proxy(IHTMLTableCell2 *This,BSTR v);
  void __RPC_STUB IHTMLTableCell2_put_chOff_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_get_chOff_Proxy(IHTMLTableCell2 *This,BSTR *p);
  void __RPC_STUB IHTMLTableCell2_get_chOff_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_put_headers_Proxy(IHTMLTableCell2 *This,BSTR v);
  void __RPC_STUB IHTMLTableCell2_put_headers_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_get_headers_Proxy(IHTMLTableCell2 *This,BSTR *p);
  void __RPC_STUB IHTMLTableCell2_get_headers_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_put_scope_Proxy(IHTMLTableCell2 *This,BSTR v);
  void __RPC_STUB IHTMLTableCell2_put_scope_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_get_scope_Proxy(IHTMLTableCell2 *This,BSTR *p);
  void __RPC_STUB IHTMLTableCell2_get_scope_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLTable_DISPINTERFACE_DEFINED__
#define __DispHTMLTable_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLTable;
  struct DispHTMLTable : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLTable;
#ifdef __cplusplus
  class HTMLTable;
#endif

#ifndef __DispHTMLTableCol_DISPINTERFACE_DEFINED__
#define __DispHTMLTableCol_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLTableCol;
  struct DispHTMLTableCol : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLTableCol;
#ifdef __cplusplus
  class HTMLTableCol;
#endif

#ifndef __DispHTMLTableSection_DISPINTERFACE_DEFINED__
#define __DispHTMLTableSection_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLTableSection;
  struct DispHTMLTableSection : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLTableSection;
#ifdef __cplusplus
  class HTMLTableSection;
#endif

#ifndef __DispHTMLTableRow_DISPINTERFACE_DEFINED__
#define __DispHTMLTableRow_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLTableRow;
  struct DispHTMLTableRow : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLTableRow;
#ifdef __cplusplus
  class HTMLTableRow;
#endif

#ifndef __DispHTMLTableCell_DISPINTERFACE_DEFINED__
#define __DispHTMLTableCell_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLTableCell;
  struct DispHTMLTableCell : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLTableCell;
#ifdef __cplusplus
  class HTMLTableCell;
#endif

#ifndef __HTMLScriptEvents2_DISPINTERFACE_DEFINED__
#define __HTMLScriptEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLScriptEvents2;
  struct HTMLScriptEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLScriptEvents_DISPINTERFACE_DEFINED__
#define __HTMLScriptEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLScriptEvents;
  struct HTMLScriptEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLScriptElement_INTERFACE_DEFINED__
#define __IHTMLScriptElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLScriptElement;
  struct IHTMLScriptElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_src(BSTR v) = 0;
    virtual HRESULT WINAPI get_src(BSTR *p) = 0;
    virtual HRESULT WINAPI put_htmlFor(BSTR v) = 0;
    virtual HRESULT WINAPI get_htmlFor(BSTR *p) = 0;
    virtual HRESULT WINAPI put_event(BSTR v) = 0;
    virtual HRESULT WINAPI get_event(BSTR *p) = 0;
    virtual HRESULT WINAPI put_text(BSTR v) = 0;
    virtual HRESULT WINAPI get_text(BSTR *p) = 0;
    virtual HRESULT WINAPI put_defer(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_defer(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_readyState(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onerror(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerror(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLScriptElement_put_src_Proxy(IHTMLScriptElement *This,BSTR v);
  void __RPC_STUB IHTMLScriptElement_put_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_get_src_Proxy(IHTMLScriptElement *This,BSTR *p);
  void __RPC_STUB IHTMLScriptElement_get_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_put_htmlFor_Proxy(IHTMLScriptElement *This,BSTR v);
  void __RPC_STUB IHTMLScriptElement_put_htmlFor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_get_htmlFor_Proxy(IHTMLScriptElement *This,BSTR *p);
  void __RPC_STUB IHTMLScriptElement_get_htmlFor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_put_event_Proxy(IHTMLScriptElement *This,BSTR v);
  void __RPC_STUB IHTMLScriptElement_put_event_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_get_event_Proxy(IHTMLScriptElement *This,BSTR *p);
  void __RPC_STUB IHTMLScriptElement_get_event_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_put_text_Proxy(IHTMLScriptElement *This,BSTR v);
  void __RPC_STUB IHTMLScriptElement_put_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_get_text_Proxy(IHTMLScriptElement *This,BSTR *p);
  void __RPC_STUB IHTMLScriptElement_get_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_put_defer_Proxy(IHTMLScriptElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLScriptElement_put_defer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_get_defer_Proxy(IHTMLScriptElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLScriptElement_get_defer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_get_readyState_Proxy(IHTMLScriptElement *This,BSTR *p);
  void __RPC_STUB IHTMLScriptElement_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_put_onerror_Proxy(IHTMLScriptElement *This,VARIANT v);
  void __RPC_STUB IHTMLScriptElement_put_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_get_onerror_Proxy(IHTMLScriptElement *This,VARIANT *p);
  void __RPC_STUB IHTMLScriptElement_get_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_put_type_Proxy(IHTMLScriptElement *This,BSTR v);
  void __RPC_STUB IHTMLScriptElement_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_get_type_Proxy(IHTMLScriptElement *This,BSTR *p);
  void __RPC_STUB IHTMLScriptElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLScriptElement2_INTERFACE_DEFINED__
#define __IHTMLScriptElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLScriptElement2;
  struct IHTMLScriptElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_charset(BSTR v) = 0;
    virtual HRESULT WINAPI get_charset(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLScriptElement2_put_charset_Proxy(IHTMLScriptElement2 *This,BSTR v);
  void __RPC_STUB IHTMLScriptElement2_put_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement2_get_charset_Proxy(IHTMLScriptElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLScriptElement2_get_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLScriptElement_DISPINTERFACE_DEFINED__
#define __DispHTMLScriptElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLScriptElement;
  struct DispHTMLScriptElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLScriptElement;
#ifdef __cplusplus
  class HTMLScriptElement;
#endif

#ifndef __IHTMLNoShowElement_INTERFACE_DEFINED__
#define __IHTMLNoShowElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLNoShowElement;
  struct IHTMLNoShowElement : public IDispatch {
  };
#endif

#ifndef __DispHTMLNoShowElement_DISPINTERFACE_DEFINED__
#define __DispHTMLNoShowElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLNoShowElement;
  struct DispHTMLNoShowElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLNoShowElement;
#ifdef __cplusplus
  class HTMLNoShowElement;
#endif

#ifndef __HTMLObjectElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLObjectElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLObjectElementEvents2;
  struct HTMLObjectElementEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLObjectElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLObjectElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLObjectElementEvents;
  struct HTMLObjectElementEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLObjectElement_INTERFACE_DEFINED__
#define __IHTMLObjectElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLObjectElement;
  struct IHTMLObjectElement : public IDispatch {
  public:
    virtual HRESULT WINAPI get_object(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_classid(BSTR *p) = 0;
    virtual HRESULT WINAPI get_data(BSTR *p) = 0;
    virtual HRESULT WINAPI putref_recordset(IDispatch *v) = 0;
    virtual HRESULT WINAPI get_recordset(IDispatch **p) = 0;
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_codeBase(BSTR v) = 0;
    virtual HRESULT WINAPI get_codeBase(BSTR *p) = 0;
    virtual HRESULT WINAPI put_codeType(BSTR v) = 0;
    virtual HRESULT WINAPI get_codeType(BSTR *p) = 0;
    virtual HRESULT WINAPI put_code(BSTR v) = 0;
    virtual HRESULT WINAPI get_code(BSTR *p) = 0;
    virtual HRESULT WINAPI get_BaseHref(BSTR *p) = 0;
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_readyState(long *p) = 0;
    virtual HRESULT WINAPI put_onreadystatechange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onreadystatechange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onerror(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerror(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_altHtml(BSTR v) = 0;
    virtual HRESULT WINAPI get_altHtml(BSTR *p) = 0;
    virtual HRESULT WINAPI put_vspace(long v) = 0;
    virtual HRESULT WINAPI get_vspace(long *p) = 0;
    virtual HRESULT WINAPI put_hspace(long v) = 0;
    virtual HRESULT WINAPI get_hspace(long *p) = 0;
  };
  HRESULT WINAPI IHTMLObjectElement_get_object_Proxy(IHTMLObjectElement *This,IDispatch **p);
  void __RPC_STUB IHTMLObjectElement_get_object_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_classid_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_classid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_data_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_data_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_putref_recordset_Proxy(IHTMLObjectElement *This,IDispatch *v);
  void __RPC_STUB IHTMLObjectElement_putref_recordset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_recordset_Proxy(IHTMLObjectElement *This,IDispatch **p);
  void __RPC_STUB IHTMLObjectElement_get_recordset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_align_Proxy(IHTMLObjectElement *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_align_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_name_Proxy(IHTMLObjectElement *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_name_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_codeBase_Proxy(IHTMLObjectElement *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement_put_codeBase_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_codeBase_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_codeBase_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_codeType_Proxy(IHTMLObjectElement *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement_put_codeType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_codeType_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_codeType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_code_Proxy(IHTMLObjectElement *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement_put_code_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_code_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_code_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_BaseHref_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_BaseHref_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_type_Proxy(IHTMLObjectElement *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_type_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_form_Proxy(IHTMLObjectElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLObjectElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_width_Proxy(IHTMLObjectElement *This,VARIANT v);
  void __RPC_STUB IHTMLObjectElement_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_width_Proxy(IHTMLObjectElement *This,VARIANT *p);
  void __RPC_STUB IHTMLObjectElement_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_height_Proxy(IHTMLObjectElement *This,VARIANT v);
  void __RPC_STUB IHTMLObjectElement_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_height_Proxy(IHTMLObjectElement *This,VARIANT *p);
  void __RPC_STUB IHTMLObjectElement_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_readyState_Proxy(IHTMLObjectElement *This,long *p);
  void __RPC_STUB IHTMLObjectElement_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_onreadystatechange_Proxy(IHTMLObjectElement *This,VARIANT v);
  void __RPC_STUB IHTMLObjectElement_put_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_onreadystatechange_Proxy(IHTMLObjectElement *This,VARIANT *p);
  void __RPC_STUB IHTMLObjectElement_get_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_onerror_Proxy(IHTMLObjectElement *This,VARIANT v);
  void __RPC_STUB IHTMLObjectElement_put_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_onerror_Proxy(IHTMLObjectElement *This,VARIANT *p);
  void __RPC_STUB IHTMLObjectElement_get_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_altHtml_Proxy(IHTMLObjectElement *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement_put_altHtml_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_altHtml_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_altHtml_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_vspace_Proxy(IHTMLObjectElement *This,long v);
  void __RPC_STUB IHTMLObjectElement_put_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_vspace_Proxy(IHTMLObjectElement *This,long *p);
  void __RPC_STUB IHTMLObjectElement_get_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_hspace_Proxy(IHTMLObjectElement *This,long v);
  void __RPC_STUB IHTMLObjectElement_put_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_hspace_Proxy(IHTMLObjectElement *This,long *p);
  void __RPC_STUB IHTMLObjectElement_get_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLObjectElement2_INTERFACE_DEFINED__
#define __IHTMLObjectElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLObjectElement2;
  struct IHTMLObjectElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI namedRecordset(BSTR dataMember,VARIANT *hierarchy,IDispatch **ppRecordset) = 0;
    virtual HRESULT WINAPI put_classid(BSTR v) = 0;
    virtual HRESULT WINAPI get_classid(BSTR *p) = 0;
    virtual HRESULT WINAPI put_data(BSTR v) = 0;
    virtual HRESULT WINAPI get_data(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLObjectElement2_namedRecordset_Proxy(IHTMLObjectElement2 *This,BSTR dataMember,VARIANT *hierarchy,IDispatch **ppRecordset);
  void __RPC_STUB IHTMLObjectElement2_namedRecordset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement2_put_classid_Proxy(IHTMLObjectElement2 *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement2_put_classid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement2_get_classid_Proxy(IHTMLObjectElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement2_get_classid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement2_put_data_Proxy(IHTMLObjectElement2 *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement2_put_data_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement2_get_data_Proxy(IHTMLObjectElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement2_get_data_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLObjectElement3_INTERFACE_DEFINED__
#define __IHTMLObjectElement3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLObjectElement3;
  struct IHTMLObjectElement3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_archive(BSTR v) = 0;
    virtual HRESULT WINAPI get_archive(BSTR *p) = 0;
    virtual HRESULT WINAPI put_alt(BSTR v) = 0;
    virtual HRESULT WINAPI get_alt(BSTR *p) = 0;
    virtual HRESULT WINAPI put_declare(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_declare(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_standby(BSTR v) = 0;
    virtual HRESULT WINAPI get_standby(BSTR *p) = 0;
    virtual HRESULT WINAPI put_border(VARIANT v) = 0;
    virtual HRESULT WINAPI get_border(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_useMap(BSTR v) = 0;
    virtual HRESULT WINAPI get_useMap(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLObjectElement3_put_archive_Proxy(IHTMLObjectElement3 *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement3_put_archive_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_get_archive_Proxy(IHTMLObjectElement3 *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement3_get_archive_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_put_alt_Proxy(IHTMLObjectElement3 *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement3_put_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_get_alt_Proxy(IHTMLObjectElement3 *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement3_get_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_put_declare_Proxy(IHTMLObjectElement3 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLObjectElement3_put_declare_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_get_declare_Proxy(IHTMLObjectElement3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLObjectElement3_get_declare_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_put_standby_Proxy(IHTMLObjectElement3 *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement3_put_standby_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_get_standby_Proxy(IHTMLObjectElement3 *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement3_get_standby_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_put_border_Proxy(IHTMLObjectElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLObjectElement3_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_get_border_Proxy(IHTMLObjectElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLObjectElement3_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_put_useMap_Proxy(IHTMLObjectElement3 *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement3_put_useMap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_get_useMap_Proxy(IHTMLObjectElement3 *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement3_get_useMap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLParamElement_INTERFACE_DEFINED__
#define __IHTMLParamElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLParamElement;
  struct IHTMLParamElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_valueType(BSTR v) = 0;
    virtual HRESULT WINAPI get_valueType(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLParamElement_put_name_Proxy(IHTMLParamElement *This,BSTR v);
  void __RPC_STUB IHTMLParamElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLParamElement_get_name_Proxy(IHTMLParamElement *This,BSTR *p);
  void __RPC_STUB IHTMLParamElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLParamElement_put_value_Proxy(IHTMLParamElement *This,BSTR v);
  void __RPC_STUB IHTMLParamElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLParamElement_get_value_Proxy(IHTMLParamElement *This,BSTR *p);
  void __RPC_STUB IHTMLParamElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLParamElement_put_type_Proxy(IHTMLParamElement *This,BSTR v);
  void __RPC_STUB IHTMLParamElement_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLParamElement_get_type_Proxy(IHTMLParamElement *This,BSTR *p);
  void __RPC_STUB IHTMLParamElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLParamElement_put_valueType_Proxy(IHTMLParamElement *This,BSTR v);
  void __RPC_STUB IHTMLParamElement_put_valueType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLParamElement_get_valueType_Proxy(IHTMLParamElement *This,BSTR *p);
  void __RPC_STUB IHTMLParamElement_get_valueType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLObjectElement_DISPINTERFACE_DEFINED__
#define __DispHTMLObjectElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLObjectElement;
  struct DispHTMLObjectElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLObjectElement;
#ifdef __cplusplus
  class HTMLObjectElement;
#endif

#ifndef __DispHTMLParamElement_DISPINTERFACE_DEFINED__
#define __DispHTMLParamElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLParamElement;
  struct DispHTMLParamElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLParamElement;
#ifdef __cplusplus
  class HTMLParamElement;
#endif

#ifndef __HTMLFrameSiteEvents2_DISPINTERFACE_DEFINED__
#define __HTMLFrameSiteEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLFrameSiteEvents2;
  struct HTMLFrameSiteEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLFrameSiteEvents_DISPINTERFACE_DEFINED__
#define __HTMLFrameSiteEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLFrameSiteEvents;
  struct HTMLFrameSiteEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLFrameBase2_INTERFACE_DEFINED__
#define __IHTMLFrameBase2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFrameBase2;
  struct IHTMLFrameBase2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_contentWindow(IHTMLWindow2 **p) = 0;
    virtual HRESULT WINAPI put_onload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onreadystatechange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onreadystatechange(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_readyState(BSTR *p) = 0;
    virtual HRESULT WINAPI put_allowTransparency(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_allowTransparency(VARIANT_BOOL *p) = 0;
  };
  HRESULT WINAPI IHTMLFrameBase2_get_contentWindow_Proxy(IHTMLFrameBase2 *This,IHTMLWindow2 **p);
  void __RPC_STUB IHTMLFrameBase2_get_contentWindow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase2_put_onload_Proxy(IHTMLFrameBase2 *This,VARIANT v);
  void __RPC_STUB IHTMLFrameBase2_put_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase2_get_onload_Proxy(IHTMLFrameBase2 *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameBase2_get_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase2_put_onreadystatechange_Proxy(IHTMLFrameBase2 *This,VARIANT v);
  void __RPC_STUB IHTMLFrameBase2_put_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase2_get_onreadystatechange_Proxy(IHTMLFrameBase2 *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameBase2_get_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase2_get_readyState_Proxy(IHTMLFrameBase2 *This,BSTR *p);
  void __RPC_STUB IHTMLFrameBase2_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase2_put_allowTransparency_Proxy(IHTMLFrameBase2 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLFrameBase2_put_allowTransparency_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase2_get_allowTransparency_Proxy(IHTMLFrameBase2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLFrameBase2_get_allowTransparency_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFrameBase3_INTERFACE_DEFINED__
#define __IHTMLFrameBase3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFrameBase3;
  struct IHTMLFrameBase3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_longDesc(BSTR v) = 0;
    virtual HRESULT WINAPI get_longDesc(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLFrameBase3_put_longDesc_Proxy(IHTMLFrameBase3 *This,BSTR v);
  void __RPC_STUB IHTMLFrameBase3_put_longDesc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase3_get_longDesc_Proxy(IHTMLFrameBase3 *This,BSTR *p);
  void __RPC_STUB IHTMLFrameBase3_get_longDesc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLFrameBase_DISPINTERFACE_DEFINED__
#define __DispHTMLFrameBase_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLFrameBase;
  struct DispHTMLFrameBase : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLFrameBase;
#ifdef __cplusplus
  class HTMLFrameBase;
#endif

#ifndef __IHTMLFrameElement_INTERFACE_DEFINED__
#define __IHTMLFrameElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFrameElement;
  struct IHTMLFrameElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_borderColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColor(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLFrameElement_put_borderColor_Proxy(IHTMLFrameElement *This,VARIANT v);
  void __RPC_STUB IHTMLFrameElement_put_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameElement_get_borderColor_Proxy(IHTMLFrameElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameElement_get_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFrameElement2_INTERFACE_DEFINED__
#define __IHTMLFrameElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFrameElement2;
  struct IHTMLFrameElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLFrameElement2_put_height_Proxy(IHTMLFrameElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLFrameElement2_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameElement2_get_height_Proxy(IHTMLFrameElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameElement2_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameElement2_put_width_Proxy(IHTMLFrameElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLFrameElement2_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameElement2_get_width_Proxy(IHTMLFrameElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameElement2_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLFrameElement_DISPINTERFACE_DEFINED__
#define __DispHTMLFrameElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLFrameElement;
  struct DispHTMLFrameElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLFrameElement;
#ifdef __cplusplus
  class HTMLFrameElement;
#endif

#ifndef __IHTMLIFrameElement_INTERFACE_DEFINED__
#define __IHTMLIFrameElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLIFrameElement;
  struct IHTMLIFrameElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_vspace(long v) = 0;
    virtual HRESULT WINAPI get_vspace(long *p) = 0;
    virtual HRESULT WINAPI put_hspace(long v) = 0;
    virtual HRESULT WINAPI get_hspace(long *p) = 0;
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLIFrameElement_put_vspace_Proxy(IHTMLIFrameElement *This,long v);
  void __RPC_STUB IHTMLIFrameElement_put_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIFrameElement_get_vspace_Proxy(IHTMLIFrameElement *This,long *p);
  void __RPC_STUB IHTMLIFrameElement_get_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIFrameElement_put_hspace_Proxy(IHTMLIFrameElement *This,long v);
  void __RPC_STUB IHTMLIFrameElement_put_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIFrameElement_get_hspace_Proxy(IHTMLIFrameElement *This,long *p);
  void __RPC_STUB IHTMLIFrameElement_get_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIFrameElement_put_align_Proxy(IHTMLIFrameElement *This,BSTR v);
  void __RPC_STUB IHTMLIFrameElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIFrameElement_get_align_Proxy(IHTMLIFrameElement *This,BSTR *p);
  void __RPC_STUB IHTMLIFrameElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLIFrameElement2_INTERFACE_DEFINED__
#define __IHTMLIFrameElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLIFrameElement2;
  struct IHTMLIFrameElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLIFrameElement2_put_height_Proxy(IHTMLIFrameElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLIFrameElement2_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIFrameElement2_get_height_Proxy(IHTMLIFrameElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLIFrameElement2_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIFrameElement2_put_width_Proxy(IHTMLIFrameElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLIFrameElement2_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIFrameElement2_get_width_Proxy(IHTMLIFrameElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLIFrameElement2_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLIFrame_DISPINTERFACE_DEFINED__
#define __DispHTMLIFrame_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLIFrame;
  struct DispHTMLIFrame : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLIFrame;
#ifdef __cplusplus
  class HTMLIFrame;
#endif

#ifndef __IHTMLDivPosition_INTERFACE_DEFINED__
#define __IHTMLDivPosition_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDivPosition;
  struct IHTMLDivPosition : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLDivPosition_put_align_Proxy(IHTMLDivPosition *This,BSTR v);
  void __RPC_STUB IHTMLDivPosition_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDivPosition_get_align_Proxy(IHTMLDivPosition *This,BSTR *p);
  void __RPC_STUB IHTMLDivPosition_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFieldSetElement_INTERFACE_DEFINED__
#define __IHTMLFieldSetElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFieldSetElement;
  struct IHTMLFieldSetElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLFieldSetElement_put_align_Proxy(IHTMLFieldSetElement *This,BSTR v);
  void __RPC_STUB IHTMLFieldSetElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFieldSetElement_get_align_Proxy(IHTMLFieldSetElement *This,BSTR *p);
  void __RPC_STUB IHTMLFieldSetElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFieldSetElement2_INTERFACE_DEFINED__
#define __IHTMLFieldSetElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFieldSetElement2;
  struct IHTMLFieldSetElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
  };
  HRESULT WINAPI IHTMLFieldSetElement2_get_form_Proxy(IHTMLFieldSetElement2 *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLFieldSetElement2_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLLegendElement_INTERFACE_DEFINED__
#define __IHTMLLegendElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLLegendElement;
  struct IHTMLLegendElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLLegendElement_put_align_Proxy(IHTMLLegendElement *This,BSTR v);
  void __RPC_STUB IHTMLLegendElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLegendElement_get_align_Proxy(IHTMLLegendElement *This,BSTR *p);
  void __RPC_STUB IHTMLLegendElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLLegendElement2_INTERFACE_DEFINED__
#define __IHTMLLegendElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLLegendElement2;
  struct IHTMLLegendElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
  };
  HRESULT WINAPI IHTMLLegendElement2_get_form_Proxy(IHTMLLegendElement2 *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLLegendElement2_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLDivPosition_DISPINTERFACE_DEFINED__
#define __DispHTMLDivPosition_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDivPosition;
  struct DispHTMLDivPosition : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLDivPosition;
#ifdef __cplusplus
  class HTMLDivPosition;
#endif

#ifndef __DispHTMLFieldSetElement_DISPINTERFACE_DEFINED__
#define __DispHTMLFieldSetElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLFieldSetElement;
  struct DispHTMLFieldSetElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLFieldSetElement;
#ifdef __cplusplus
  class HTMLFieldSetElement;
#endif

#ifndef __DispHTMLLegendElement_DISPINTERFACE_DEFINED__
#define __DispHTMLLegendElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLLegendElement;
  struct DispHTMLLegendElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLLegendElement;
#ifdef __cplusplus
  class HTMLLegendElement;
#endif

#ifndef __IHTMLSpanFlow_INTERFACE_DEFINED__
#define __IHTMLSpanFlow_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLSpanFlow;
  struct IHTMLSpanFlow : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLSpanFlow_put_align_Proxy(IHTMLSpanFlow *This,BSTR v);
  void __RPC_STUB IHTMLSpanFlow_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSpanFlow_get_align_Proxy(IHTMLSpanFlow *This,BSTR *p);
  void __RPC_STUB IHTMLSpanFlow_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLSpanFlow_DISPINTERFACE_DEFINED__
#define __DispHTMLSpanFlow_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLSpanFlow;
  struct DispHTMLSpanFlow : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLSpanFlow;
#ifdef __cplusplus
  class HTMLSpanFlow;
#endif

#ifndef __IHTMLFrameSetElement_INTERFACE_DEFINED__
#define __IHTMLFrameSetElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFrameSetElement;
  struct IHTMLFrameSetElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_rows(BSTR v) = 0;
    virtual HRESULT WINAPI get_rows(BSTR *p) = 0;
    virtual HRESULT WINAPI put_cols(BSTR v) = 0;
    virtual HRESULT WINAPI get_cols(BSTR *p) = 0;
    virtual HRESULT WINAPI put_border(VARIANT v) = 0;
    virtual HRESULT WINAPI get_border(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_frameBorder(BSTR v) = 0;
    virtual HRESULT WINAPI get_frameBorder(BSTR *p) = 0;
    virtual HRESULT WINAPI put_frameSpacing(VARIANT v) = 0;
    virtual HRESULT WINAPI get_frameSpacing(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onunload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onunload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onbeforeunload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeunload(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLFrameSetElement_put_rows_Proxy(IHTMLFrameSetElement *This,BSTR v);
  void __RPC_STUB IHTMLFrameSetElement_put_rows_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_rows_Proxy(IHTMLFrameSetElement *This,BSTR *p);
  void __RPC_STUB IHTMLFrameSetElement_get_rows_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_put_cols_Proxy(IHTMLFrameSetElement *This,BSTR v);
  void __RPC_STUB IHTMLFrameSetElement_put_cols_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_cols_Proxy(IHTMLFrameSetElement *This,BSTR *p);
  void __RPC_STUB IHTMLFrameSetElement_get_cols_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_put_border_Proxy(IHTMLFrameSetElement *This,VARIANT v);
  void __RPC_STUB IHTMLFrameSetElement_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_border_Proxy(IHTMLFrameSetElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameSetElement_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_put_borderColor_Proxy(IHTMLFrameSetElement *This,VARIANT v);
  void __RPC_STUB IHTMLFrameSetElement_put_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_borderColor_Proxy(IHTMLFrameSetElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameSetElement_get_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_put_frameBorder_Proxy(IHTMLFrameSetElement *This,BSTR v);
  void __RPC_STUB IHTMLFrameSetElement_put_frameBorder_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_frameBorder_Proxy(IHTMLFrameSetElement *This,BSTR *p);
  void __RPC_STUB IHTMLFrameSetElement_get_frameBorder_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_put_frameSpacing_Proxy(IHTMLFrameSetElement *This,VARIANT v);
  void __RPC_STUB IHTMLFrameSetElement_put_frameSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_frameSpacing_Proxy(IHTMLFrameSetElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameSetElement_get_frameSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_put_name_Proxy(IHTMLFrameSetElement *This,BSTR v);
  void __RPC_STUB IHTMLFrameSetElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_name_Proxy(IHTMLFrameSetElement *This,BSTR *p);
  void __RPC_STUB IHTMLFrameSetElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_put_onload_Proxy(IHTMLFrameSetElement *This,VARIANT v);
  void __RPC_STUB IHTMLFrameSetElement_put_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_onload_Proxy(IHTMLFrameSetElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameSetElement_get_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_put_onunload_Proxy(IHTMLFrameSetElement *This,VARIANT v);
  void __RPC_STUB IHTMLFrameSetElement_put_onunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_onunload_Proxy(IHTMLFrameSetElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameSetElement_get_onunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_put_onbeforeunload_Proxy(IHTMLFrameSetElement *This,VARIANT v);
  void __RPC_STUB IHTMLFrameSetElement_put_onbeforeunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_onbeforeunload_Proxy(IHTMLFrameSetElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameSetElement_get_onbeforeunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFrameSetElement2_INTERFACE_DEFINED__
#define __IHTMLFrameSetElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFrameSetElement2;
  struct IHTMLFrameSetElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_onbeforeprint(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeprint(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onafterprint(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onafterprint(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLFrameSetElement2_put_onbeforeprint_Proxy(IHTMLFrameSetElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLFrameSetElement2_put_onbeforeprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement2_get_onbeforeprint_Proxy(IHTMLFrameSetElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameSetElement2_get_onbeforeprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement2_put_onafterprint_Proxy(IHTMLFrameSetElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLFrameSetElement2_put_onafterprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement2_get_onafterprint_Proxy(IHTMLFrameSetElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameSetElement2_get_onafterprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLFrameSetSite_DISPINTERFACE_DEFINED__
#define __DispHTMLFrameSetSite_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLFrameSetSite;
  struct DispHTMLFrameSetSite : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLFrameSetSite;
#ifdef __cplusplus
  class HTMLFrameSetSite;
#endif

#ifndef __IHTMLBGsound_INTERFACE_DEFINED__
#define __IHTMLBGsound_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLBGsound;
  struct IHTMLBGsound : public IDispatch {
  public:
    virtual HRESULT WINAPI put_src(BSTR v) = 0;
    virtual HRESULT WINAPI get_src(BSTR *p) = 0;
    virtual HRESULT WINAPI put_loop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_loop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_volume(VARIANT v) = 0;
    virtual HRESULT WINAPI get_volume(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_balance(VARIANT v) = 0;
    virtual HRESULT WINAPI get_balance(VARIANT *p) = 0;
  };
  HRESULT WINAPI IHTMLBGsound_put_src_Proxy(IHTMLBGsound *This,BSTR v);
  void __RPC_STUB IHTMLBGsound_put_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBGsound_get_src_Proxy(IHTMLBGsound *This,BSTR *p);
  void __RPC_STUB IHTMLBGsound_get_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBGsound_put_loop_Proxy(IHTMLBGsound *This,VARIANT v);
  void __RPC_STUB IHTMLBGsound_put_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBGsound_get_loop_Proxy(IHTMLBGsound *This,VARIANT *p);
  void __RPC_STUB IHTMLBGsound_get_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBGsound_put_volume_Proxy(IHTMLBGsound *This,VARIANT v);
  void __RPC_STUB IHTMLBGsound_put_volume_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBGsound_get_volume_Proxy(IHTMLBGsound *This,VARIANT *p);
  void __RPC_STUB IHTMLBGsound_get_volume_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBGsound_put_balance_Proxy(IHTMLBGsound *This,VARIANT v);
  void __RPC_STUB IHTMLBGsound_put_balance_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBGsound_get_balance_Proxy(IHTMLBGsound *This,VARIANT *p);
  void __RPC_STUB IHTMLBGsound_get_balance_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLBGsound_DISPINTERFACE_DEFINED__
#define __DispHTMLBGsound_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLBGsound;
  struct DispHTMLBGsound : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLBGsound;
#ifdef __cplusplus
  class HTMLBGsound;
#endif

#ifndef __IHTMLFontNamesCollection_INTERFACE_DEFINED__
#define __IHTMLFontNamesCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFontNamesCollection;
  struct IHTMLFontNamesCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(long index,BSTR *pBstr) = 0;
  };
  HRESULT WINAPI IHTMLFontNamesCollection_get_length_Proxy(IHTMLFontNamesCollection *This,long *p);
  void __RPC_STUB IHTMLFontNamesCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontNamesCollection_get__newEnum_Proxy(IHTMLFontNamesCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLFontNamesCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontNamesCollection_item_Proxy(IHTMLFontNamesCollection *This,long index,BSTR *pBstr);
  void __RPC_STUB IHTMLFontNamesCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFontSizesCollection_INTERFACE_DEFINED__
#define __IHTMLFontSizesCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFontSizesCollection;
  struct IHTMLFontSizesCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI get_forFont(BSTR *p) = 0;
    virtual HRESULT WINAPI item(long index,long *plSize) = 0;
  };
  HRESULT WINAPI IHTMLFontSizesCollection_get_length_Proxy(IHTMLFontSizesCollection *This,long *p);
  void __RPC_STUB IHTMLFontSizesCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontSizesCollection_get__newEnum_Proxy(IHTMLFontSizesCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLFontSizesCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontSizesCollection_get_forFont_Proxy(IHTMLFontSizesCollection *This,BSTR *p);
  void __RPC_STUB IHTMLFontSizesCollection_get_forFont_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontSizesCollection_item_Proxy(IHTMLFontSizesCollection *This,long index,long *plSize);
  void __RPC_STUB IHTMLFontSizesCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLOptionsHolder_INTERFACE_DEFINED__
#define __IHTMLOptionsHolder_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLOptionsHolder;
  struct IHTMLOptionsHolder : public IDispatch {
  public:
    virtual HRESULT WINAPI get_document(IHTMLDocument2 **p) = 0;
    virtual HRESULT WINAPI get_fonts(IHTMLFontNamesCollection **p) = 0;
    virtual HRESULT WINAPI put_execArg(VARIANT v) = 0;
    virtual HRESULT WINAPI get_execArg(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_errorLine(long v) = 0;
    virtual HRESULT WINAPI get_errorLine(long *p) = 0;
    virtual HRESULT WINAPI put_errorCharacter(long v) = 0;
    virtual HRESULT WINAPI get_errorCharacter(long *p) = 0;
    virtual HRESULT WINAPI put_errorCode(long v) = 0;
    virtual HRESULT WINAPI get_errorCode(long *p) = 0;
    virtual HRESULT WINAPI put_errorMessage(BSTR v) = 0;
    virtual HRESULT WINAPI get_errorMessage(BSTR *p) = 0;
    virtual HRESULT WINAPI put_errorDebug(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_errorDebug(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_unsecuredWindowOfDocument(IHTMLWindow2 **p) = 0;
    virtual HRESULT WINAPI put_findText(BSTR v) = 0;
    virtual HRESULT WINAPI get_findText(BSTR *p) = 0;
    virtual HRESULT WINAPI put_anythingAfterFrameset(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_anythingAfterFrameset(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI sizes(BSTR fontName,IHTMLFontSizesCollection **pSizesCollection) = 0;
    virtual HRESULT WINAPI openfiledlg(VARIANT initFile,VARIANT initDir,VARIANT filter,VARIANT title,BSTR *pathName) = 0;
    virtual HRESULT WINAPI savefiledlg(VARIANT initFile,VARIANT initDir,VARIANT filter,VARIANT title,BSTR *pathName) = 0;
    virtual HRESULT WINAPI choosecolordlg(VARIANT initColor,long *rgbColor) = 0;
    virtual HRESULT WINAPI showSecurityInfo(void) = 0;
    virtual HRESULT WINAPI isApartmentModel(IHTMLObjectElement *object,VARIANT_BOOL *fApartment) = 0;
    virtual HRESULT WINAPI getCharset(BSTR fontName,long *charset) = 0;
    virtual HRESULT WINAPI get_secureConnectionInfo(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLOptionsHolder_get_document_Proxy(IHTMLOptionsHolder *This,IHTMLDocument2 **p);
  void __RPC_STUB IHTMLOptionsHolder_get_document_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_fonts_Proxy(IHTMLOptionsHolder *This,IHTMLFontNamesCollection **p);
  void __RPC_STUB IHTMLOptionsHolder_get_fonts_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_put_execArg_Proxy(IHTMLOptionsHolder *This,VARIANT v);
  void __RPC_STUB IHTMLOptionsHolder_put_execArg_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_execArg_Proxy(IHTMLOptionsHolder *This,VARIANT *p);
  void __RPC_STUB IHTMLOptionsHolder_get_execArg_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_put_errorLine_Proxy(IHTMLOptionsHolder *This,long v);
  void __RPC_STUB IHTMLOptionsHolder_put_errorLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_errorLine_Proxy(IHTMLOptionsHolder *This,long *p);
  void __RPC_STUB IHTMLOptionsHolder_get_errorLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_put_errorCharacter_Proxy(IHTMLOptionsHolder *This,long v);
  void __RPC_STUB IHTMLOptionsHolder_put_errorCharacter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_errorCharacter_Proxy(IHTMLOptionsHolder *This,long *p);
  void __RPC_STUB IHTMLOptionsHolder_get_errorCharacter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_put_errorCode_Proxy(IHTMLOptionsHolder *This,long v);
  void __RPC_STUB IHTMLOptionsHolder_put_errorCode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_errorCode_Proxy(IHTMLOptionsHolder *This,long *p);
  void __RPC_STUB IHTMLOptionsHolder_get_errorCode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_put_errorMessage_Proxy(IHTMLOptionsHolder *This,BSTR v);
  void __RPC_STUB IHTMLOptionsHolder_put_errorMessage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_errorMessage_Proxy(IHTMLOptionsHolder *This,BSTR *p);
  void __RPC_STUB IHTMLOptionsHolder_get_errorMessage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_put_errorDebug_Proxy(IHTMLOptionsHolder *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOptionsHolder_put_errorDebug_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_errorDebug_Proxy(IHTMLOptionsHolder *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOptionsHolder_get_errorDebug_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_unsecuredWindowOfDocument_Proxy(IHTMLOptionsHolder *This,IHTMLWindow2 **p);
  void __RPC_STUB IHTMLOptionsHolder_get_unsecuredWindowOfDocument_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_put_findText_Proxy(IHTMLOptionsHolder *This,BSTR v);
  void __RPC_STUB IHTMLOptionsHolder_put_findText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_findText_Proxy(IHTMLOptionsHolder *This,BSTR *p);
  void __RPC_STUB IHTMLOptionsHolder_get_findText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_put_anythingAfterFrameset_Proxy(IHTMLOptionsHolder *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOptionsHolder_put_anythingAfterFrameset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_anythingAfterFrameset_Proxy(IHTMLOptionsHolder *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOptionsHolder_get_anythingAfterFrameset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_sizes_Proxy(IHTMLOptionsHolder *This,BSTR fontName,IHTMLFontSizesCollection **pSizesCollection);
  void __RPC_STUB IHTMLOptionsHolder_sizes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_openfiledlg_Proxy(IHTMLOptionsHolder *This,VARIANT initFile,VARIANT initDir,VARIANT filter,VARIANT title,BSTR *pathName);
  void __RPC_STUB IHTMLOptionsHolder_openfiledlg_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_savefiledlg_Proxy(IHTMLOptionsHolder *This,VARIANT initFile,VARIANT initDir,VARIANT filter,VARIANT title,BSTR *pathName);
  void __RPC_STUB IHTMLOptionsHolder_savefiledlg_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_choosecolordlg_Proxy(IHTMLOptionsHolder *This,VARIANT initColor,long *rgbColor);
  void __RPC_STUB IHTMLOptionsHolder_choosecolordlg_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_showSecurityInfo_Proxy(IHTMLOptionsHolder *This);
  void __RPC_STUB IHTMLOptionsHolder_showSecurityInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_isApartmentModel_Proxy(IHTMLOptionsHolder *This,IHTMLObjectElement *object,VARIANT_BOOL *fApartment);
  void __RPC_STUB IHTMLOptionsHolder_isApartmentModel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_getCharset_Proxy(IHTMLOptionsHolder *This,BSTR fontName,long *charset);
  void __RPC_STUB IHTMLOptionsHolder_getCharset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_secureConnectionInfo_Proxy(IHTMLOptionsHolder *This,BSTR *p);
  void __RPC_STUB IHTMLOptionsHolder_get_secureConnectionInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __HTMLStyleElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLStyleElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLStyleElementEvents2;
  struct HTMLStyleElementEvents2 : public IDispatch {
  };
#endif

#ifndef __HTMLStyleElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLStyleElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLStyleElementEvents;
  struct HTMLStyleElementEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLStyleElement_INTERFACE_DEFINED__
#define __IHTMLStyleElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyleElement;
  struct IHTMLStyleElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI get_readyState(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onreadystatechange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onreadystatechange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onerror(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerror(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_styleSheet(IHTMLStyleSheet **p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_media(BSTR v) = 0;
    virtual HRESULT WINAPI get_media(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLStyleElement_put_type_Proxy(IHTMLStyleElement *This,BSTR v);
  void __RPC_STUB IHTMLStyleElement_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_get_type_Proxy(IHTMLStyleElement *This,BSTR *p);
  void __RPC_STUB IHTMLStyleElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_get_readyState_Proxy(IHTMLStyleElement *This,BSTR *p);
  void __RPC_STUB IHTMLStyleElement_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_put_onreadystatechange_Proxy(IHTMLStyleElement *This,VARIANT v);
  void __RPC_STUB IHTMLStyleElement_put_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_get_onreadystatechange_Proxy(IHTMLStyleElement *This,VARIANT *p);
  void __RPC_STUB IHTMLStyleElement_get_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_put_onload_Proxy(IHTMLStyleElement *This,VARIANT v);
  void __RPC_STUB IHTMLStyleElement_put_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_get_onload_Proxy(IHTMLStyleElement *This,VARIANT *p);
  void __RPC_STUB IHTMLStyleElement_get_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_put_onerror_Proxy(IHTMLStyleElement *This,VARIANT v);
  void __RPC_STUB IHTMLStyleElement_put_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_get_onerror_Proxy(IHTMLStyleElement *This,VARIANT *p);
  void __RPC_STUB IHTMLStyleElement_get_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_get_styleSheet_Proxy(IHTMLStyleElement *This,IHTMLStyleSheet **p);
  void __RPC_STUB IHTMLStyleElement_get_styleSheet_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_put_disabled_Proxy(IHTMLStyleElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLStyleElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_get_disabled_Proxy(IHTMLStyleElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLStyleElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_put_media_Proxy(IHTMLStyleElement *This,BSTR v);
  void __RPC_STUB IHTMLStyleElement_put_media_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_get_media_Proxy(IHTMLStyleElement *This,BSTR *p);
  void __RPC_STUB IHTMLStyleElement_get_media_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLStyleElement_DISPINTERFACE_DEFINED__
#define __DispHTMLStyleElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLStyleElement;
  struct DispHTMLStyleElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLStyleElement;
#ifdef __cplusplus
  class HTMLStyleElement;
#endif

#ifndef __IHTMLStyleFontFace_INTERFACE_DEFINED__
#define __IHTMLStyleFontFace_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyleFontFace;
  struct IHTMLStyleFontFace : public IDispatch {
  public:
    virtual HRESULT WINAPI put_fontsrc(BSTR v) = 0;
    virtual HRESULT WINAPI get_fontsrc(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLStyleFontFace_put_fontsrc_Proxy(IHTMLStyleFontFace *This,BSTR v);
  void __RPC_STUB IHTMLStyleFontFace_put_fontsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleFontFace_get_fontsrc_Proxy(IHTMLStyleFontFace *This,BSTR *p);
  void __RPC_STUB IHTMLStyleFontFace_get_fontsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif
  EXTERN_C const CLSID CLSID_HTMLStyleFontFace;
#ifdef __cplusplus
  class HTMLStyleFontFace;
#endif

#ifndef __ICSSFilterSite_INTERFACE_DEFINED__
#define __ICSSFilterSite_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ICSSFilterSite;
  struct ICSSFilterSite : public IUnknown {
  public:
    virtual HRESULT WINAPI GetElement(IHTMLElement **Element) = 0;
    virtual HRESULT WINAPI FireOnFilterChangeEvent(void) = 0;
  };
  HRESULT WINAPI ICSSFilterSite_GetElement_Proxy(ICSSFilterSite *This,IHTMLElement **Element);
  void __RPC_STUB ICSSFilterSite_GetElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ICSSFilterSite_FireOnFilterChangeEvent_Proxy(ICSSFilterSite *This);
  void __RPC_STUB ICSSFilterSite_FireOnFilterChangeEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMarkupPointer_INTERFACE_DEFINED__
#define __IMarkupPointer_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMarkupPointer;
  struct IMarkupPointer : public IUnknown {
  public:
    virtual HRESULT WINAPI OwningDoc(IHTMLDocument2 **ppDoc) = 0;
    virtual HRESULT WINAPI Gravity(POINTER_GRAVITY *pGravity) = 0;
    virtual HRESULT WINAPI SetGravity(POINTER_GRAVITY Gravity) = 0;
    virtual HRESULT WINAPI Cling(WINBOOL *pfCling) = 0;
    virtual HRESULT WINAPI SetCling(WINBOOL fCLing) = 0;
    virtual HRESULT WINAPI Unposition(void) = 0;
    virtual HRESULT WINAPI IsPositioned(WINBOOL *pfPositioned) = 0;
    virtual HRESULT WINAPI GetContainer(IMarkupContainer **ppContainer) = 0;
    virtual HRESULT WINAPI MoveAdjacentToElement(IHTMLElement *pElement,ELEMENT_ADJACENCY eAdj) = 0;
    virtual HRESULT WINAPI MoveToPointer(IMarkupPointer *pPointer) = 0;
    virtual HRESULT WINAPI MoveToContainer(IMarkupContainer *pContainer,WINBOOL fAtStart) = 0;
    virtual HRESULT WINAPI Left(WINBOOL fMove,MARKUP_CONTEXT_TYPE *pContext,IHTMLElement **ppElement,long *pcch,OLECHAR *pchText) = 0;
    virtual HRESULT WINAPI Right(WINBOOL fMove,MARKUP_CONTEXT_TYPE *pContext,IHTMLElement **ppElement,long *pcch,OLECHAR *pchText) = 0;
    virtual HRESULT WINAPI CurrentScope(IHTMLElement **ppElemCurrent) = 0;
    virtual HRESULT WINAPI IsLeftOf(IMarkupPointer *pPointerThat,WINBOOL *pfResult) = 0;
    virtual HRESULT WINAPI IsLeftOfOrEqualTo(IMarkupPointer *pPointerThat,WINBOOL *pfResult) = 0;
    virtual HRESULT WINAPI IsRightOf(IMarkupPointer *pPointerThat,WINBOOL *pfResult) = 0;
    virtual HRESULT WINAPI IsRightOfOrEqualTo(IMarkupPointer *pPointerThat,WINBOOL *pfResult) = 0;
    virtual HRESULT WINAPI IsEqualTo(IMarkupPointer *pPointerThat,WINBOOL *pfAreEqual) = 0;
    virtual HRESULT WINAPI MoveUnit(MOVEUNIT_ACTION muAction) = 0;
    virtual HRESULT WINAPI FindText(OLECHAR *pchFindText,DWORD dwFlags,IMarkupPointer *pIEndMatch,IMarkupPointer *pIEndSearch) = 0;
  };
  HRESULT WINAPI IMarkupPointer_OwningDoc_Proxy(IMarkupPointer *This,IHTMLDocument2 **ppDoc);
  void __RPC_STUB IMarkupPointer_OwningDoc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_Gravity_Proxy(IMarkupPointer *This,POINTER_GRAVITY *pGravity);
  void __RPC_STUB IMarkupPointer_Gravity_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_SetGravity_Proxy(IMarkupPointer *This,POINTER_GRAVITY Gravity);
  void __RPC_STUB IMarkupPointer_SetGravity_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_Cling_Proxy(IMarkupPointer *This,WINBOOL *pfCling);
  void __RPC_STUB IMarkupPointer_Cling_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_SetCling_Proxy(IMarkupPointer *This,WINBOOL fCLing);
  void __RPC_STUB IMarkupPointer_SetCling_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_Unposition_Proxy(IMarkupPointer *This);
  void __RPC_STUB IMarkupPointer_Unposition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_IsPositioned_Proxy(IMarkupPointer *This,WINBOOL *pfPositioned);
  void __RPC_STUB IMarkupPointer_IsPositioned_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_GetContainer_Proxy(IMarkupPointer *This,IMarkupContainer **ppContainer);
  void __RPC_STUB IMarkupPointer_GetContainer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_MoveAdjacentToElement_Proxy(IMarkupPointer *This,IHTMLElement *pElement,ELEMENT_ADJACENCY eAdj);
  void __RPC_STUB IMarkupPointer_MoveAdjacentToElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_MoveToPointer_Proxy(IMarkupPointer *This,IMarkupPointer *pPointer);
  void __RPC_STUB IMarkupPointer_MoveToPointer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_MoveToContainer_Proxy(IMarkupPointer *This,IMarkupContainer *pContainer,WINBOOL fAtStart);
  void __RPC_STUB IMarkupPointer_MoveToContainer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_Left_Proxy(IMarkupPointer *This,WINBOOL fMove,MARKUP_CONTEXT_TYPE *pContext,IHTMLElement **ppElement,long *pcch,OLECHAR *pchText);
  void __RPC_STUB IMarkupPointer_Left_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_Right_Proxy(IMarkupPointer *This,WINBOOL fMove,MARKUP_CONTEXT_TYPE *pContext,IHTMLElement **ppElement,long *pcch,OLECHAR *pchText);
  void __RPC_STUB IMarkupPointer_Right_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_CurrentScope_Proxy(IMarkupPointer *This,IHTMLElement **ppElemCurrent);
  void __RPC_STUB IMarkupPointer_CurrentScope_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_IsLeftOf_Proxy(IMarkupPointer *This,IMarkupPointer *pPointerThat,WINBOOL *pfResult);
  void __RPC_STUB IMarkupPointer_IsLeftOf_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_IsLeftOfOrEqualTo_Proxy(IMarkupPointer *This,IMarkupPointer *pPointerThat,WINBOOL *pfResult);
  void __RPC_STUB IMarkupPointer_IsLeftOfOrEqualTo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_IsRightOf_Proxy(IMarkupPointer *This,IMarkupPointer *pPointerThat,WINBOOL *pfResult);
  void __RPC_STUB IMarkupPointer_IsRightOf_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_IsRightOfOrEqualTo_Proxy(IMarkupPointer *This,IMarkupPointer *pPointerThat,WINBOOL *pfResult);
  void __RPC_STUB IMarkupPointer_IsRightOfOrEqualTo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_IsEqualTo_Proxy(IMarkupPointer *This,IMarkupPointer *pPointerThat,WINBOOL *pfAreEqual);
  void __RPC_STUB IMarkupPointer_IsEqualTo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_MoveUnit_Proxy(IMarkupPointer *This,MOVEUNIT_ACTION muAction);
  void __RPC_STUB IMarkupPointer_MoveUnit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_FindText_Proxy(IMarkupPointer *This,OLECHAR *pchFindText,DWORD dwFlags,IMarkupPointer *pIEndMatch,IMarkupPointer *pIEndSearch);
  void __RPC_STUB IMarkupPointer_FindText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMarkupContainer_INTERFACE_DEFINED__
#define __IMarkupContainer_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMarkupContainer;
  struct IMarkupContainer : public IUnknown {
  public:
    virtual HRESULT WINAPI OwningDoc(IHTMLDocument2 **ppDoc) = 0;
  };
  HRESULT WINAPI IMarkupContainer_OwningDoc_Proxy(IMarkupContainer *This,IHTMLDocument2 **ppDoc);
  void __RPC_STUB IMarkupContainer_OwningDoc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMarkupContainer2_INTERFACE_DEFINED__
#define __IMarkupContainer2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMarkupContainer2;
  struct IMarkupContainer2 : public IMarkupContainer {
  public:
    virtual HRESULT WINAPI CreateChangeLog(IHTMLChangeSink *pChangeSink,IHTMLChangeLog **ppChangeLog,WINBOOL fForward,WINBOOL fBackward) = 0;
    virtual HRESULT WINAPI RegisterForDirtyRange(IHTMLChangeSink *pChangeSink,DWORD *pdwCookie) = 0;
    virtual HRESULT WINAPI UnRegisterForDirtyRange(DWORD dwCookie) = 0;
    virtual HRESULT WINAPI GetAndClearDirtyRange(DWORD dwCookie,IMarkupPointer *pIPointerBegin,IMarkupPointer *pIPointerEnd) = 0;
    virtual long WINAPI GetVersionNumber(void) = 0;
    virtual HRESULT WINAPI GetMasterElement(IHTMLElement **ppElementMaster) = 0;
  };
  HRESULT WINAPI IMarkupContainer2_CreateChangeLog_Proxy(IMarkupContainer2 *This,IHTMLChangeSink *pChangeSink,IHTMLChangeLog **ppChangeLog,WINBOOL fForward,WINBOOL fBackward);
  void __RPC_STUB IMarkupContainer2_CreateChangeLog_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupContainer2_RegisterForDirtyRange_Proxy(IMarkupContainer2 *This,IHTMLChangeSink *pChangeSink,DWORD *pdwCookie);
  void __RPC_STUB IMarkupContainer2_RegisterForDirtyRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupContainer2_UnRegisterForDirtyRange_Proxy(IMarkupContainer2 *This,DWORD dwCookie);
  void __RPC_STUB IMarkupContainer2_UnRegisterForDirtyRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupContainer2_GetAndClearDirtyRange_Proxy(IMarkupContainer2 *This,DWORD dwCookie,IMarkupPointer *pIPointerBegin,IMarkupPointer *pIPointerEnd);
  void __RPC_STUB IMarkupContainer2_GetAndClearDirtyRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  long WINAPI IMarkupContainer2_GetVersionNumber_Proxy(IMarkupContainer2 *This);
  void __RPC_STUB IMarkupContainer2_GetVersionNumber_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupContainer2_GetMasterElement_Proxy(IMarkupContainer2 *This,IHTMLElement **ppElementMaster);
  void __RPC_STUB IMarkupContainer2_GetMasterElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLChangeLog_INTERFACE_DEFINED__
#define __IHTMLChangeLog_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLChangeLog;
  struct IHTMLChangeLog : public IUnknown {
  public:
    virtual HRESULT WINAPI GetNextChange(BYTE *pbBuffer,long nBufferSize,long *pnRecordLength) = 0;
  };
  HRESULT WINAPI IHTMLChangeLog_GetNextChange_Proxy(IHTMLChangeLog *This,BYTE *pbBuffer,long nBufferSize,long *pnRecordLength);
  void __RPC_STUB IHTMLChangeLog_GetNextChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLChangeSink_INTERFACE_DEFINED__
#define __IHTMLChangeSink_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLChangeSink;
  struct IHTMLChangeSink : public IUnknown {
  public:
    virtual HRESULT WINAPI Notify(void) = 0;
  };
  HRESULT WINAPI IHTMLChangeSink_Notify_Proxy(IHTMLChangeSink *This);
  void __RPC_STUB IHTMLChangeSink_Notify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IActiveIMMApp_INTERFACE_DEFINED__
#define __IActiveIMMApp_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IActiveIMMApp;
  struct IActiveIMMApp : public IUnknown {
  public:
    virtual HRESULT WINAPI AssociateContext(HWND hWnd,HIMC hIME,HIMC *phPrev) = 0;
    virtual HRESULT WINAPI ConfigureIMEA(HKL hKL,HWND hWnd,DWORD dwMode,REGISTERWORDA *pData) = 0;
    virtual HRESULT WINAPI ConfigureIMEW(HKL hKL,HWND hWnd,DWORD dwMode,REGISTERWORDW *pData) = 0;
    virtual HRESULT WINAPI CreateContext(HIMC *phIMC) = 0;
    virtual HRESULT WINAPI DestroyContext(HIMC hIME) = 0;
    virtual HRESULT WINAPI EnumRegisterWordA(HKL hKL,LPSTR szReading,DWORD dwStyle,LPSTR szRegister,LPVOID pData,IEnumRegisterWordA **pEnum) = 0;
    virtual HRESULT WINAPI EnumRegisterWordW(HKL hKL,LPWSTR szReading,DWORD dwStyle,LPWSTR szRegister,LPVOID pData,IEnumRegisterWordW **pEnum) = 0;
    virtual HRESULT WINAPI EscapeA(HKL hKL,HIMC hIMC,UINT uEscape,LPVOID pData,LRESULT *plResult) = 0;
    virtual HRESULT WINAPI EscapeW(HKL hKL,HIMC hIMC,UINT uEscape,LPVOID pData,LRESULT *plResult) = 0;
    virtual HRESULT WINAPI GetCandidateListA(HIMC hIMC,DWORD dwIndex,UINT uBufLen,CANDIDATELIST *pCandList,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetCandidateListW(HIMC hIMC,DWORD dwIndex,UINT uBufLen,CANDIDATELIST *pCandList,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetCandidateListCountA(HIMC hIMC,DWORD *pdwListSize,DWORD *pdwBufLen) = 0;
    virtual HRESULT WINAPI GetCandidateListCountW(HIMC hIMC,DWORD *pdwListSize,DWORD *pdwBufLen) = 0;
    virtual HRESULT WINAPI GetCandidateWindow(HIMC hIMC,DWORD dwIndex,CANDIDATEFORM *pCandidate) = 0;
    virtual HRESULT WINAPI GetCompositionFontA(HIMC hIMC,LOGFONTA *plf) = 0;
    virtual HRESULT WINAPI GetCompositionFontW(HIMC hIMC,LOGFONTW *plf) = 0;
    virtual HRESULT WINAPI GetCompositionStringA(HIMC hIMC,DWORD dwIndex,DWORD dwBufLen,LONG *plCopied,LPVOID pBuf) = 0;
    virtual HRESULT WINAPI GetCompositionStringW(HIMC hIMC,DWORD dwIndex,DWORD dwBufLen,LONG *plCopied,LPVOID pBuf) = 0;
    virtual HRESULT WINAPI GetCompositionWindow(HIMC hIMC,COMPOSITIONFORM *pCompForm) = 0;
    virtual HRESULT WINAPI GetContext(HWND hWnd,HIMC *phIMC) = 0;
    virtual HRESULT WINAPI GetConversionListA(HKL hKL,HIMC hIMC,LPSTR pSrc,UINT uBufLen,UINT uFlag,CANDIDATELIST *pDst,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetConversionListW(HKL hKL,HIMC hIMC,LPWSTR pSrc,UINT uBufLen,UINT uFlag,CANDIDATELIST *pDst,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetConversionStatus(HIMC hIMC,DWORD *pfdwConversion,DWORD *pfdwSentence) = 0;
    virtual HRESULT WINAPI GetDefaultIMEWnd(HWND hWnd,HWND *phDefWnd) = 0;
    virtual HRESULT WINAPI GetDescriptionA(HKL hKL,UINT uBufLen,LPSTR szDescription,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetDescriptionW(HKL hKL,UINT uBufLen,LPWSTR szDescription,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetGuideLineA(HIMC hIMC,DWORD dwIndex,DWORD dwBufLen,LPSTR pBuf,DWORD *pdwResult) = 0;
    virtual HRESULT WINAPI GetGuideLineW(HIMC hIMC,DWORD dwIndex,DWORD dwBufLen,LPWSTR pBuf,DWORD *pdwResult) = 0;
    virtual HRESULT WINAPI GetIMEFileNameA(HKL hKL,UINT uBufLen,LPSTR szFileName,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetIMEFileNameW(HKL hKL,UINT uBufLen,LPWSTR szFileName,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetOpenStatus(HIMC hIMC) = 0;
    virtual HRESULT WINAPI GetProperty(HKL hKL,DWORD fdwIndex,DWORD *pdwProperty) = 0;
    virtual HRESULT WINAPI GetRegisterWordStyleA(HKL hKL,UINT nItem,STYLEBUFA *pStyleBuf,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetRegisterWordStyleW(HKL hKL,UINT nItem,STYLEBUFW *pStyleBuf,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetStatusWindowPos(HIMC hIMC,POINT *pptPos) = 0;
    virtual HRESULT WINAPI GetVirtualKey(HWND hWnd,UINT *puVirtualKey) = 0;
    virtual HRESULT WINAPI InstallIMEA(LPSTR szIMEFileName,LPSTR szLayoutText,HKL *phKL) = 0;
    virtual HRESULT WINAPI InstallIMEW(LPWSTR szIMEFileName,LPWSTR szLayoutText,HKL *phKL) = 0;
    virtual HRESULT WINAPI IsIME(HKL hKL) = 0;
    virtual HRESULT WINAPI IsUIMessageA(HWND hWndIME,UINT msg,WPARAM wParam,LPARAM lParam) = 0;
    virtual HRESULT WINAPI IsUIMessageW(HWND hWndIME,UINT msg,WPARAM wParam,LPARAM lParam) = 0;
    virtual HRESULT WINAPI NotifyIME(HIMC hIMC,DWORD dwAction,DWORD dwIndex,DWORD dwValue) = 0;
    virtual HRESULT WINAPI RegisterWordA(HKL hKL,LPSTR szReading,DWORD dwStyle,LPSTR szRegister) = 0;
    virtual HRESULT WINAPI RegisterWordW(HKL hKL,LPWSTR szReading,DWORD dwStyle,LPWSTR szRegister) = 0;
    virtual HRESULT WINAPI ReleaseContext(HWND hWnd,HIMC hIMC) = 0;
    virtual HRESULT WINAPI SetCandidateWindow(HIMC hIMC,CANDIDATEFORM *pCandidate) = 0;
    virtual HRESULT WINAPI SetCompositionFontA(HIMC hIMC,LOGFONTA *plf) = 0;
    virtual HRESULT WINAPI SetCompositionFontW(HIMC hIMC,LOGFONTW *plf) = 0;
    virtual HRESULT WINAPI SetCompositionStringA(HIMC hIMC,DWORD dwIndex,LPVOID pComp,DWORD dwCompLen,LPVOID pRead,DWORD dwReadLen) = 0;
    virtual HRESULT WINAPI SetCompositionStringW(HIMC hIMC,DWORD dwIndex,LPVOID pComp,DWORD dwCompLen,LPVOID pRead,DWORD dwReadLen) = 0;
    virtual HRESULT WINAPI SetCompositionWindow(HIMC hIMC,COMPOSITIONFORM *pCompForm) = 0;
    virtual HRESULT WINAPI SetConversionStatus(HIMC hIMC,DWORD fdwConversion,DWORD fdwSentence) = 0;
    virtual HRESULT WINAPI SetOpenStatus(HIMC hIMC,WINBOOL fOpen) = 0;
    virtual HRESULT WINAPI SetStatusWindowPos(HIMC hIMC,POINT *pptPos) = 0;
    virtual HRESULT WINAPI SimulateHotKey(HWND hWnd,DWORD dwHotKeyID) = 0;
    virtual HRESULT WINAPI UnregisterWordA(HKL hKL,LPSTR szReading,DWORD dwStyle,LPSTR szUnregister) = 0;
    virtual HRESULT WINAPI UnregisterWordW(HKL hKL,LPWSTR szReading,DWORD dwStyle,LPWSTR szUnregister) = 0;
    virtual HRESULT WINAPI Activate(WINBOOL fRestoreLayout) = 0;
    virtual HRESULT WINAPI Deactivate(void) = 0;
    virtual HRESULT WINAPI OnDefWindowProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam,LRESULT *plResult) = 0;
    virtual HRESULT WINAPI FilterClientWindows(ATOM *aaClassList,UINT uSize) = 0;
    virtual HRESULT WINAPI GetCodePageA(HKL hKL,UINT *uCodePage) = 0;
    virtual HRESULT WINAPI GetLangId(HKL hKL,LANGID *plid) = 0;
    virtual HRESULT WINAPI AssociateContextEx(HWND hWnd,HIMC hIMC,DWORD dwFlags) = 0;
    virtual HRESULT WINAPI DisableIME(DWORD idThread) = 0;
    virtual HRESULT WINAPI GetImeMenuItemsA(HIMC hIMC,DWORD dwFlags,DWORD dwType,IMEMENUITEMINFOA *pImeParentMenu,IMEMENUITEMINFOA *pImeMenu,DWORD dwSize,DWORD *pdwResult) = 0;
    virtual HRESULT WINAPI GetImeMenuItemsW(HIMC hIMC,DWORD dwFlags,DWORD dwType,IMEMENUITEMINFOW *pImeParentMenu,IMEMENUITEMINFOW *pImeMenu,DWORD dwSize,DWORD *pdwResult) = 0;
    virtual HRESULT WINAPI EnumInputContext(DWORD idThread,IEnumInputContext **ppEnum) = 0;
  };
  HRESULT WINAPI IActiveIMMApp_AssociateContext_Proxy(IActiveIMMApp *This,HWND hWnd,HIMC hIME,HIMC *phPrev);
  void __RPC_STUB IActiveIMMApp_AssociateContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_ConfigureIMEA_Proxy(IActiveIMMApp *This,HKL hKL,HWND hWnd,DWORD dwMode,REGISTERWORDA *pData);
  void __RPC_STUB IActiveIMMApp_ConfigureIMEA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_ConfigureIMEW_Proxy(IActiveIMMApp *This,HKL hKL,HWND hWnd,DWORD dwMode,REGISTERWORDW *pData);
  void __RPC_STUB IActiveIMMApp_ConfigureIMEW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_CreateContext_Proxy(IActiveIMMApp *This,HIMC *phIMC);
  void __RPC_STUB IActiveIMMApp_CreateContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_DestroyContext_Proxy(IActiveIMMApp *This,HIMC hIME);
  void __RPC_STUB IActiveIMMApp_DestroyContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_EnumRegisterWordA_Proxy(IActiveIMMApp *This,HKL hKL,LPSTR szReading,DWORD dwStyle,LPSTR szRegister,LPVOID pData,IEnumRegisterWordA **pEnum);
  void __RPC_STUB IActiveIMMApp_EnumRegisterWordA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_EnumRegisterWordW_Proxy(IActiveIMMApp *This,HKL hKL,LPWSTR szReading,DWORD dwStyle,LPWSTR szRegister,LPVOID pData,IEnumRegisterWordW **pEnum);
  void __RPC_STUB IActiveIMMApp_EnumRegisterWordW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_EscapeA_Proxy(IActiveIMMApp *This,HKL hKL,HIMC hIMC,UINT uEscape,LPVOID pData,LRESULT *plResult);
  void __RPC_STUB IActiveIMMApp_EscapeA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_EscapeW_Proxy(IActiveIMMApp *This,HKL hKL,HIMC hIMC,UINT uEscape,LPVOID pData,LRESULT *plResult);
  void __RPC_STUB IActiveIMMApp_EscapeW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCandidateListA_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,UINT uBufLen,CANDIDATELIST *pCandList,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetCandidateListA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCandidateListW_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,UINT uBufLen,CANDIDATELIST *pCandList,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetCandidateListW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCandidateListCountA_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD *pdwListSize,DWORD *pdwBufLen);
  void __RPC_STUB IActiveIMMApp_GetCandidateListCountA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCandidateListCountW_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD *pdwListSize,DWORD *pdwBufLen);
  void __RPC_STUB IActiveIMMApp_GetCandidateListCountW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCandidateWindow_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,CANDIDATEFORM *pCandidate);
  void __RPC_STUB IActiveIMMApp_GetCandidateWindow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCompositionFontA_Proxy(IActiveIMMApp *This,HIMC hIMC,LOGFONTA *plf);
  void __RPC_STUB IActiveIMMApp_GetCompositionFontA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCompositionFontW_Proxy(IActiveIMMApp *This,HIMC hIMC,LOGFONTW *plf);
  void __RPC_STUB IActiveIMMApp_GetCompositionFontW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCompositionStringA_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,DWORD dwBufLen,LONG *plCopied,LPVOID pBuf);
  void __RPC_STUB IActiveIMMApp_GetCompositionStringA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCompositionStringW_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,DWORD dwBufLen,LONG *plCopied,LPVOID pBuf);
  void __RPC_STUB IActiveIMMApp_GetCompositionStringW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCompositionWindow_Proxy(IActiveIMMApp *This,HIMC hIMC,COMPOSITIONFORM *pCompForm);
  void __RPC_STUB IActiveIMMApp_GetCompositionWindow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetContext_Proxy(IActiveIMMApp *This,HWND hWnd,HIMC *phIMC);
  void __RPC_STUB IActiveIMMApp_GetContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetConversionListA_Proxy(IActiveIMMApp *This,HKL hKL,HIMC hIMC,LPSTR pSrc,UINT uBufLen,UINT uFlag,CANDIDATELIST *pDst,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetConversionListA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetConversionListW_Proxy(IActiveIMMApp *This,HKL hKL,HIMC hIMC,LPWSTR pSrc,UINT uBufLen,UINT uFlag,CANDIDATELIST *pDst,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetConversionListW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetConversionStatus_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD *pfdwConversion,DWORD *pfdwSentence);
  void __RPC_STUB IActiveIMMApp_GetConversionStatus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetDefaultIMEWnd_Proxy(IActiveIMMApp *This,HWND hWnd,HWND *phDefWnd);
  void __RPC_STUB IActiveIMMApp_GetDefaultIMEWnd_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetDescriptionA_Proxy(IActiveIMMApp *This,HKL hKL,UINT uBufLen,LPSTR szDescription,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetDescriptionA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetDescriptionW_Proxy(IActiveIMMApp *This,HKL hKL,UINT uBufLen,LPWSTR szDescription,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetDescriptionW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetGuideLineA_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,DWORD dwBufLen,LPSTR pBuf,DWORD *pdwResult);
  void __RPC_STUB IActiveIMMApp_GetGuideLineA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetGuideLineW_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,DWORD dwBufLen,LPWSTR pBuf,DWORD *pdwResult);
  void __RPC_STUB IActiveIMMApp_GetGuideLineW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetIMEFileNameA_Proxy(IActiveIMMApp *This,HKL hKL,UINT uBufLen,LPSTR szFileName,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetIMEFileNameA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetIMEFileNameW_Proxy(IActiveIMMApp *This,HKL hKL,UINT uBufLen,LPWSTR szFileName,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetIMEFileNameW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetOpenStatus_Proxy(IActiveIMMApp *This,HIMC hIMC);
  void __RPC_STUB IActiveIMMApp_GetOpenStatus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetProperty_Proxy(IActiveIMMApp *This,HKL hKL,DWORD fdwIndex,DWORD *pdwProperty);
  void __RPC_STUB IActiveIMMApp_GetProperty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetRegisterWordStyleA_Proxy(IActiveIMMApp *This,HKL hKL,UINT nItem,STYLEBUFA *pStyleBuf,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetRegisterWordStyleA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetRegisterWordStyleW_Proxy(IActiveIMMApp *This,HKL hKL,UINT nItem,STYLEBUFW *pStyleBuf,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetRegisterWordStyleW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetStatusWindowPos_Proxy(IActiveIMMApp *This,HIMC hIMC,POINT *pptPos);
  void __RPC_STUB IActiveIMMApp_GetStatusWindowPos_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetVirtualKey_Proxy(IActiveIMMApp *This,HWND hWnd,UINT *puVirtualKey);
  void __RPC_STUB IActiveIMMApp_GetVirtualKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_InstallIMEA_Proxy(IActiveIMMApp *This,LPSTR szIMEFileName,LPSTR szLayoutText,HKL *phKL);
  void __RPC_STUB IActiveIMMApp_InstallIMEA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_InstallIMEW_Proxy(IActiveIMMApp *This,LPWSTR szIMEFileName,LPWSTR szLayoutText,HKL *phKL);
  void __RPC_STUB IActiveIMMApp_InstallIMEW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_IsIME_Proxy(IActiveIMMApp *This,HKL hKL);
  void __RPC_STUB IActiveIMMApp_IsIME_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_IsUIMessageA_Proxy(IActiveIMMApp *This,HWND hWndIME,UINT msg,WPARAM wParam,LPARAM lParam);
  void __RPC_STUB IActiveIMMApp_IsUIMessageA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_IsUIMessageW_Proxy(IActiveIMMApp *This,HWND hWndIME,UINT msg,WPARAM wParam,LPARAM lParam);
  void __RPC_STUB IActiveIMMApp_IsUIMessageW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_NotifyIME_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwAction,DWORD dwIndex,DWORD dwValue);
  void __RPC_STUB IActiveIMMApp_NotifyIME_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_RegisterWordA_Proxy(IActiveIMMApp *This,HKL hKL,LPSTR szReading,DWORD dwStyle,LPSTR szRegister);
  void __RPC_STUB IActiveIMMApp_RegisterWordA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_RegisterWordW_Proxy(IActiveIMMApp *This,HKL hKL,LPWSTR szReading,DWORD dwStyle,LPWSTR szRegister);
  void __RPC_STUB IActiveIMMApp_RegisterWordW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_ReleaseContext_Proxy(IActiveIMMApp *This,HWND hWnd,HIMC hIMC);
  void __RPC_STUB IActiveIMMApp_ReleaseContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SetCandidateWindow_Proxy(IActiveIMMApp *This,HIMC hIMC,CANDIDATEFORM *pCandidate);
  void __RPC_STUB IActiveIMMApp_SetCandidateWindow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SetCompositionFontA_Proxy(IActiveIMMApp *This,HIMC hIMC,LOGFONTA *plf);
  void __RPC_STUB IActiveIMMApp_SetCompositionFontA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SetCompositionFontW_Proxy(IActiveIMMApp *This,HIMC hIMC,LOGFONTW *plf);
  void __RPC_STUB IActiveIMMApp_SetCompositionFontW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SetCompositionStringA_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,LPVOID pComp,DWORD dwCompLen,LPVOID pRead,DWORD dwReadLen);
  void __RPC_STUB IActiveIMMApp_SetCompositionStringA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SetCompositionStringW_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,LPVOID pComp,DWORD dwCompLen,LPVOID pRead,DWORD dwReadLen);
  void __RPC_STUB IActiveIMMApp_SetCompositionStringW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SetCompositionWindow_Proxy(IActiveIMMApp *This,HIMC hIMC,COMPOSITIONFORM *pCompForm);
  void __RPC_STUB IActiveIMMApp_SetCompositionWindow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SetConversionStatus_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD fdwConversion,DWORD fdwSentence);
  void __RPC_STUB IActiveIMMApp_SetConversionStatus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SetOpenStatus_Proxy(IActiveIMMApp *This,HIMC hIMC,WINBOOL fOpen);
  void __RPC_STUB IActiveIMMApp_SetOpenStatus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SetStatusWindowPos_Proxy(IActiveIMMApp *This,HIMC hIMC,POINT *pptPos);
  void __RPC_STUB IActiveIMMApp_SetStatusWindowPos_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SimulateHotKey_Proxy(IActiveIMMApp *This,HWND hWnd,DWORD dwHotKeyID);
  void __RPC_STUB IActiveIMMApp_SimulateHotKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_UnregisterWordA_Proxy(IActiveIMMApp *This,HKL hKL,LPSTR szReading,DWORD dwStyle,LPSTR szUnregister);
  void __RPC_STUB IActiveIMMApp_UnregisterWordA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_UnregisterWordW_Proxy(IActiveIMMApp *This,HKL hKL,LPWSTR szReading,DWORD dwStyle,LPWSTR szUnregister);
  void __RPC_STUB IActiveIMMApp_UnregisterWordW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_Activate_Proxy(IActiveIMMApp *This,WINBOOL fRestoreLayout);
  void __RPC_STUB IActiveIMMApp_Activate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_Deactivate_Proxy(IActiveIMMApp *This);
  void __RPC_STUB IActiveIMMApp_Deactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_OnDefWindowProc_Proxy(IActiveIMMApp *This,HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam,LRESULT *plResult);
  void __RPC_STUB IActiveIMMApp_OnDefWindowProc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_FilterClientWindows_Proxy(IActiveIMMApp *This,ATOM *aaClassList,UINT uSize);
  void __RPC_STUB IActiveIMMApp_FilterClientWindows_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCodePageA_Proxy(IActiveIMMApp *This,HKL hKL,UINT *uCodePage);
  void __RPC_STUB IActiveIMMApp_GetCodePageA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetLangId_Proxy(IActiveIMMApp *This,HKL hKL,LANGID *plid);
  void __RPC_STUB IActiveIMMApp_GetLangId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_AssociateContextEx_Proxy(IActiveIMMApp *This,HWND hWnd,HIMC hIMC,DWORD dwFlags);
  void __RPC_STUB IActiveIMMApp_AssociateContextEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_DisableIME_Proxy(IActiveIMMApp *This,DWORD idThread);
  void __RPC_STUB IActiveIMMApp_DisableIME_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetImeMenuItemsA_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwFlags,DWORD dwType,IMEMENUITEMINFOA *pImeParentMenu,IMEMENUITEMINFOA *pImeMenu,DWORD dwSize,DWORD *pdwResult);
  void __RPC_STUB IActiveIMMApp_GetImeMenuItemsA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetImeMenuItemsW_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwFlags,DWORD dwType,IMEMENUITEMINFOW *pImeParentMenu,IMEMENUITEMINFOW *pImeMenu,DWORD dwSize,DWORD *pdwResult);
  void __RPC_STUB IActiveIMMApp_GetImeMenuItemsW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_EnumInputContext_Proxy(IActiveIMMApp *This,DWORD idThread,IEnumInputContext **ppEnum);
  void __RPC_STUB IActiveIMMApp_EnumInputContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISegmentList_INTERFACE_DEFINED__
#define __ISegmentList_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ISegmentList;
  struct ISegmentList : public IUnknown {
  public:
    virtual HRESULT WINAPI CreateIterator(ISegmentListIterator **ppIIter) = 0;
    virtual HRESULT WINAPI GetType(SELECTION_TYPE *peType) = 0;
    virtual HRESULT WINAPI IsEmpty(WINBOOL *pfEmpty) = 0;
  };
  HRESULT WINAPI ISegmentList_CreateIterator_Proxy(ISegmentList *This,ISegmentListIterator **ppIIter);
  void __RPC_STUB ISegmentList_CreateIterator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISegmentList_GetType_Proxy(ISegmentList *This,SELECTION_TYPE *peType);
  void __RPC_STUB ISegmentList_GetType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISegmentList_IsEmpty_Proxy(ISegmentList *This,WINBOOL *pfEmpty);
  void __RPC_STUB ISegmentList_IsEmpty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISegmentListIterator_INTERFACE_DEFINED__
#define __ISegmentListIterator_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ISegmentListIterator;
  struct ISegmentListIterator : public IUnknown {
  public:
    virtual HRESULT WINAPI Current(ISegment **ppISegment) = 0;
    virtual HRESULT WINAPI First(void) = 0;
    virtual HRESULT WINAPI IsDone(void) = 0;
    virtual HRESULT WINAPI Advance(void) = 0;
  };
  HRESULT WINAPI ISegmentListIterator_Current_Proxy(ISegmentListIterator *This,ISegment **ppISegment);
  void __RPC_STUB ISegmentListIterator_Current_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISegmentListIterator_First_Proxy(ISegmentListIterator *This);
  void __RPC_STUB ISegmentListIterator_First_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISegmentListIterator_IsDone_Proxy(ISegmentListIterator *This);
  void __RPC_STUB ISegmentListIterator_IsDone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISegmentListIterator_Advance_Proxy(ISegmentListIterator *This);
  void __RPC_STUB ISegmentListIterator_Advance_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLCaret_INTERFACE_DEFINED__
#define __IHTMLCaret_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLCaret;
  struct  IHTMLCaret : public IUnknown {
  public:
    virtual HRESULT WINAPI MoveCaretToPointer(IDisplayPointer *pDispPointer,WINBOOL fScrollIntoView,CARET_DIRECTION eDir) = 0;
    virtual HRESULT WINAPI MoveCaretToPointerEx(IDisplayPointer *pDispPointer,WINBOOL fVisible,WINBOOL fScrollIntoView,CARET_DIRECTION eDir) = 0;
    virtual HRESULT WINAPI MoveMarkupPointerToCaret(IMarkupPointer *pIMarkupPointer) = 0;
    virtual HRESULT WINAPI MoveDisplayPointerToCaret(IDisplayPointer *pDispPointer) = 0;
    virtual HRESULT WINAPI IsVisible(WINBOOL *pIsVisible) = 0;
    virtual HRESULT WINAPI Show(WINBOOL fScrollIntoView) = 0;
    virtual HRESULT WINAPI Hide(void) = 0;
    virtual HRESULT WINAPI InsertText(OLECHAR *pText,LONG lLen) = 0;
    virtual HRESULT WINAPI ScrollIntoView(void) = 0;
    virtual HRESULT WINAPI GetLocation(POINT *pPoint,WINBOOL fTranslate) = 0;
    virtual HRESULT WINAPI GetCaretDirection(CARET_DIRECTION *peDir) = 0;
    virtual HRESULT WINAPI SetCaretDirection(CARET_DIRECTION eDir) = 0;
  };
  HRESULT WINAPI IHTMLCaret_MoveCaretToPointer_Proxy(IHTMLCaret *This,IDisplayPointer *pDispPointer,WINBOOL fScrollIntoView,CARET_DIRECTION eDir);
  void __RPC_STUB IHTMLCaret_MoveCaretToPointer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_MoveCaretToPointerEx_Proxy(IHTMLCaret *This,IDisplayPointer *pDispPointer,WINBOOL fVisible,WINBOOL fScrollIntoView,CARET_DIRECTION eDir);
  void __RPC_STUB IHTMLCaret_MoveCaretToPointerEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_MoveMarkupPointerToCaret_Proxy(IHTMLCaret *This,IMarkupPointer *pIMarkupPointer);
  void __RPC_STUB IHTMLCaret_MoveMarkupPointerToCaret_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_MoveDisplayPointerToCaret_Proxy(IHTMLCaret *This,IDisplayPointer *pDispPointer);
  void __RPC_STUB IHTMLCaret_MoveDisplayPointerToCaret_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_IsVisible_Proxy(IHTMLCaret *This,WINBOOL *pIsVisible);
  void __RPC_STUB IHTMLCaret_IsVisible_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_Show_Proxy(IHTMLCaret *This,WINBOOL fScrollIntoView);
  void __RPC_STUB IHTMLCaret_Show_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_Hide_Proxy(IHTMLCaret *This);
  void __RPC_STUB IHTMLCaret_Hide_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_InsertText_Proxy(IHTMLCaret *This,OLECHAR *pText,LONG lLen);
  void __RPC_STUB IHTMLCaret_InsertText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_ScrollIntoView_Proxy(IHTMLCaret *This);
  void __RPC_STUB IHTMLCaret_ScrollIntoView_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_GetLocation_Proxy(IHTMLCaret *This,POINT *pPoint,WINBOOL fTranslate);
  void __RPC_STUB IHTMLCaret_GetLocation_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_GetCaretDirection_Proxy(IHTMLCaret *This,CARET_DIRECTION *peDir);
  void __RPC_STUB IHTMLCaret_GetCaretDirection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_SetCaretDirection_Proxy(IHTMLCaret *This,CARET_DIRECTION eDir);
  void __RPC_STUB IHTMLCaret_SetCaretDirection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISegment_INTERFACE_DEFINED__
#define __ISegment_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ISegment;
  struct ISegment : public IUnknown {
  public:
    virtual HRESULT WINAPI GetPointers(IMarkupPointer *pIStart,IMarkupPointer *pIEnd) = 0;
  };
  HRESULT WINAPI ISegment_GetPointers_Proxy(ISegment *This,IMarkupPointer *pIStart,IMarkupPointer *pIEnd);
  void __RPC_STUB ISegment_GetPointers_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementSegment_INTERFACE_DEFINED__
#define __IElementSegment_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementSegment;
  struct  IElementSegment : public ISegment {
  public:
    virtual HRESULT WINAPI GetElement(IHTMLElement **ppIElement) = 0;
    virtual HRESULT WINAPI SetPrimary(WINBOOL fPrimary) = 0;
    virtual HRESULT WINAPI IsPrimary(WINBOOL *pfPrimary) = 0;
  };
  HRESULT WINAPI IElementSegment_GetElement_Proxy(IElementSegment *This,IHTMLElement **ppIElement);
  void __RPC_STUB IElementSegment_GetElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementSegment_SetPrimary_Proxy(IElementSegment *This,WINBOOL fPrimary);
  void __RPC_STUB IElementSegment_SetPrimary_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementSegment_IsPrimary_Proxy(IElementSegment *This,WINBOOL *pfPrimary);
  void __RPC_STUB IElementSegment_IsPrimary_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHighlightSegment_INTERFACE_DEFINED__
#define __IHighlightSegment_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHighlightSegment;
  struct IHighlightSegment : public ISegment {
  };
#endif

#ifndef __IHighlightRenderingServices_INTERFACE_DEFINED__
#define __IHighlightRenderingServices_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHighlightRenderingServices;
  struct IHighlightRenderingServices : public IUnknown {
  public:
    virtual HRESULT WINAPI AddSegment(IDisplayPointer *pDispPointerStart,IDisplayPointer *pDispPointerEnd,IHTMLRenderStyle *pIRenderStyle,IHighlightSegment **ppISegment) = 0;
    virtual HRESULT WINAPI MoveSegmentToPointers(IHighlightSegment *pISegment,IDisplayPointer *pDispPointerStart,IDisplayPointer *pDispPointerEnd) = 0;
    virtual HRESULT WINAPI RemoveSegment(IHighlightSegment *pISegment) = 0;
  };
  HRESULT WINAPI IHighlightRenderingServices_AddSegment_Proxy(IHighlightRenderingServices *This,IDisplayPointer *pDispPointerStart,IDisplayPointer *pDispPointerEnd,IHTMLRenderStyle *pIRenderStyle,IHighlightSegment **ppISegment);
  void __RPC_STUB IHighlightRenderingServices_AddSegment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHighlightRenderingServices_MoveSegmentToPointers_Proxy(IHighlightRenderingServices *This,IHighlightSegment *pISegment,IDisplayPointer *pDispPointerStart,IDisplayPointer *pDispPointerEnd);
  void __RPC_STUB IHighlightRenderingServices_MoveSegmentToPointers_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHighlightRenderingServices_RemoveSegment_Proxy(IHighlightRenderingServices *This,IHighlightSegment *pISegment);
  void __RPC_STUB IHighlightRenderingServices_RemoveSegment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ILineInfo_INTERFACE_DEFINED__
#define __ILineInfo_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ILineInfo;
  struct ILineInfo : public IUnknown {
  public:
    virtual HRESULT WINAPI get_x(long *p) = 0;
    virtual HRESULT WINAPI get_baseLine(long *p) = 0;
    virtual HRESULT WINAPI get_textDescent(long *p) = 0;
    virtual HRESULT WINAPI get_textHeight(long *p) = 0;
    virtual HRESULT WINAPI get_lineDirection(LONG *p) = 0;
  };
  HRESULT WINAPI ILineInfo_get_x_Proxy(ILineInfo *This,long *p);
  void __RPC_STUB ILineInfo_get_x_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ILineInfo_get_baseLine_Proxy(ILineInfo *This,long *p);
  void __RPC_STUB ILineInfo_get_baseLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ILineInfo_get_textDescent_Proxy(ILineInfo *This,long *p);
  void __RPC_STUB ILineInfo_get_textDescent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ILineInfo_get_textHeight_Proxy(ILineInfo *This,long *p);
  void __RPC_STUB ILineInfo_get_textHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ILineInfo_get_lineDirection_Proxy(ILineInfo *This,LONG *p);
  void __RPC_STUB ILineInfo_get_lineDirection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IDisplayPointer_INTERFACE_DEFINED__
#define __IDisplayPointer_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IDisplayPointer;
  struct  IDisplayPointer : public IUnknown {
  public:
    virtual HRESULT WINAPI MoveToPoint(POINT ptPoint,COORD_SYSTEM eCoordSystem,IHTMLElement *pElementContext,DWORD dwHitTestOptions,DWORD *pdwHitTestResults) = 0;
    virtual HRESULT WINAPI MoveUnit(DISPLAY_MOVEUNIT eMoveUnit,LONG lXPos) = 0;
    virtual HRESULT WINAPI PositionMarkupPointer(IMarkupPointer *pMarkupPointer) = 0;
    virtual HRESULT WINAPI MoveToPointer(IDisplayPointer *pDispPointer) = 0;
    virtual HRESULT WINAPI SetPointerGravity(POINTER_GRAVITY eGravity) = 0;
    virtual HRESULT WINAPI GetPointerGravity(POINTER_GRAVITY *peGravity) = 0;
    virtual HRESULT WINAPI SetDisplayGravity(DISPLAY_GRAVITY eGravity) = 0;
    virtual HRESULT WINAPI GetDisplayGravity(DISPLAY_GRAVITY *peGravity) = 0;
    virtual HRESULT WINAPI IsPositioned(WINBOOL *pfPositioned) = 0;
    virtual HRESULT WINAPI Unposition(void) = 0;
    virtual HRESULT WINAPI IsEqualTo(IDisplayPointer *pDispPointer,WINBOOL *pfIsEqual) = 0;
    virtual HRESULT WINAPI IsLeftOf(IDisplayPointer *pDispPointer,WINBOOL *pfIsLeftOf) = 0;
    virtual HRESULT WINAPI IsRightOf(IDisplayPointer *pDispPointer,WINBOOL *pfIsRightOf) = 0;
    virtual HRESULT WINAPI IsAtBOL(WINBOOL *pfBOL) = 0;
    virtual HRESULT WINAPI MoveToMarkupPointer(IMarkupPointer *pPointer,IDisplayPointer *pDispLineContext) = 0;
    virtual HRESULT WINAPI ScrollIntoView(void) = 0;
    virtual HRESULT WINAPI GetLineInfo(ILineInfo **ppLineInfo) = 0;
    virtual HRESULT WINAPI GetFlowElement(IHTMLElement **ppLayoutElement) = 0;
    virtual HRESULT WINAPI QueryBreaks(DWORD *pdwBreaks) = 0;
  };
  HRESULT WINAPI IDisplayPointer_MoveToPoint_Proxy(IDisplayPointer *This,POINT ptPoint,COORD_SYSTEM eCoordSystem,IHTMLElement *pElementContext,DWORD dwHitTestOptions,DWORD *pdwHitTestResults);
  void __RPC_STUB IDisplayPointer_MoveToPoint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_MoveUnit_Proxy(IDisplayPointer *This,DISPLAY_MOVEUNIT eMoveUnit,LONG lXPos);
  void __RPC_STUB IDisplayPointer_MoveUnit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_PositionMarkupPointer_Proxy(IDisplayPointer *This,IMarkupPointer *pMarkupPointer);
  void __RPC_STUB IDisplayPointer_PositionMarkupPointer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_MoveToPointer_Proxy(IDisplayPointer *This,IDisplayPointer *pDispPointer);
  void __RPC_STUB IDisplayPointer_MoveToPointer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_SetPointerGravity_Proxy(IDisplayPointer *This,POINTER_GRAVITY eGravity);
  void __RPC_STUB IDisplayPointer_SetPointerGravity_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_GetPointerGravity_Proxy(IDisplayPointer *This,POINTER_GRAVITY *peGravity);
  void __RPC_STUB IDisplayPointer_GetPointerGravity_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_SetDisplayGravity_Proxy(IDisplayPointer *This,DISPLAY_GRAVITY eGravity);
  void __RPC_STUB IDisplayPointer_SetDisplayGravity_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_GetDisplayGravity_Proxy(IDisplayPointer *This,DISPLAY_GRAVITY *peGravity);
  void __RPC_STUB IDisplayPointer_GetDisplayGravity_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_IsPositioned_Proxy(IDisplayPointer *This,WINBOOL *pfPositioned);
  void __RPC_STUB IDisplayPointer_IsPositioned_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_Unposition_Proxy(IDisplayPointer *This);
  void __RPC_STUB IDisplayPointer_Unposition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_IsEqualTo_Proxy(IDisplayPointer *This,IDisplayPointer *pDispPointer,WINBOOL *pfIsEqual);
  void __RPC_STUB IDisplayPointer_IsEqualTo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_IsLeftOf_Proxy(IDisplayPointer *This,IDisplayPointer *pDispPointer,WINBOOL *pfIsLeftOf);
  void __RPC_STUB IDisplayPointer_IsLeftOf_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_IsRightOf_Proxy(IDisplayPointer *This,IDisplayPointer *pDispPointer,WINBOOL *pfIsRightOf);
  void __RPC_STUB IDisplayPointer_IsRightOf_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_IsAtBOL_Proxy(IDisplayPointer *This,WINBOOL *pfBOL);
  void __RPC_STUB IDisplayPointer_IsAtBOL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_MoveToMarkupPointer_Proxy(IDisplayPointer *This,IMarkupPointer *pPointer,IDisplayPointer *pDispLineContext);
  void __RPC_STUB IDisplayPointer_MoveToMarkupPointer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_ScrollIntoView_Proxy(IDisplayPointer *This);
  void __RPC_STUB IDisplayPointer_ScrollIntoView_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_GetLineInfo_Proxy(IDisplayPointer *This,ILineInfo **ppLineInfo);
  void __RPC_STUB IDisplayPointer_GetLineInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_GetFlowElement_Proxy(IDisplayPointer *This,IHTMLElement **ppLayoutElement);
  void __RPC_STUB IDisplayPointer_GetFlowElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_QueryBreaks_Proxy(IDisplayPointer *This,DWORD *pdwBreaks);
  void __RPC_STUB IDisplayPointer_QueryBreaks_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IDisplayServices_INTERFACE_DEFINED__
#define __IDisplayServices_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IDisplayServices;
  struct IDisplayServices : public IUnknown {
  public:
    virtual HRESULT WINAPI CreateDisplayPointer(IDisplayPointer **ppDispPointer) = 0;
    virtual HRESULT WINAPI TransformRect(RECT *pRect,COORD_SYSTEM eSource,COORD_SYSTEM eDestination,IHTMLElement *pIElement) = 0;
    virtual HRESULT WINAPI TransformPoint(POINT *pPoint,COORD_SYSTEM eSource,COORD_SYSTEM eDestination,IHTMLElement *pIElement) = 0;
    virtual HRESULT WINAPI GetCaret(IHTMLCaret **ppCaret) = 0;
    virtual HRESULT WINAPI GetComputedStyle(IMarkupPointer *pPointer,IHTMLComputedStyle **ppComputedStyle) = 0;
    virtual HRESULT WINAPI ScrollRectIntoView(IHTMLElement *pIElement,RECT rect) = 0;
    virtual HRESULT WINAPI HasFlowLayout(IHTMLElement *pIElement,WINBOOL *pfHasFlowLayout) = 0;
  };
  HRESULT WINAPI IDisplayServices_CreateDisplayPointer_Proxy(IDisplayServices *This,IDisplayPointer **ppDispPointer);
  void __RPC_STUB IDisplayServices_CreateDisplayPointer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayServices_TransformRect_Proxy(IDisplayServices *This,RECT *pRect,COORD_SYSTEM eSource,COORD_SYSTEM eDestination,IHTMLElement *pIElement);
  void __RPC_STUB IDisplayServices_TransformRect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayServices_TransformPoint_Proxy(IDisplayServices *This,POINT *pPoint,COORD_SYSTEM eSource,COORD_SYSTEM eDestination,IHTMLElement *pIElement);
  void __RPC_STUB IDisplayServices_TransformPoint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayServices_GetCaret_Proxy(IDisplayServices *This,IHTMLCaret **ppCaret);
  void __RPC_STUB IDisplayServices_GetCaret_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayServices_GetComputedStyle_Proxy(IDisplayServices *This,IMarkupPointer *pPointer,IHTMLComputedStyle **ppComputedStyle);
  void __RPC_STUB IDisplayServices_GetComputedStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayServices_ScrollRectIntoView_Proxy(IDisplayServices *This,IHTMLElement *pIElement,RECT rect);
  void __RPC_STUB IDisplayServices_ScrollRectIntoView_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayServices_HasFlowLayout_Proxy(IDisplayServices *This,IHTMLElement *pIElement,WINBOOL *pfHasFlowLayout);
  void __RPC_STUB IDisplayServices_HasFlowLayout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHtmlDlgSafeHelper_INTERFACE_DEFINED__
#define __IHtmlDlgSafeHelper_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHtmlDlgSafeHelper;
  struct IHtmlDlgSafeHelper : public IDispatch {
  public:
    virtual HRESULT WINAPI choosecolordlg(VARIANT initColor,VARIANT *rgbColor) = 0;
    virtual HRESULT WINAPI getCharset(BSTR fontName,VARIANT *charset) = 0;
    virtual HRESULT WINAPI get_Fonts(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_BlockFormats(IDispatch **p) = 0;
  };
  HRESULT WINAPI IHtmlDlgSafeHelper_choosecolordlg_Proxy(IHtmlDlgSafeHelper *This,VARIANT initColor,VARIANT *rgbColor);
  void __RPC_STUB IHtmlDlgSafeHelper_choosecolordlg_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHtmlDlgSafeHelper_getCharset_Proxy(IHtmlDlgSafeHelper *This,BSTR fontName,VARIANT *charset);
  void __RPC_STUB IHtmlDlgSafeHelper_getCharset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHtmlDlgSafeHelper_get_Fonts_Proxy(IHtmlDlgSafeHelper *This,IDispatch **p);
  void __RPC_STUB IHtmlDlgSafeHelper_get_Fonts_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHtmlDlgSafeHelper_get_BlockFormats_Proxy(IHtmlDlgSafeHelper *This,IDispatch **p);
  void __RPC_STUB IHtmlDlgSafeHelper_get_BlockFormats_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IBlockFormats_INTERFACE_DEFINED__
#define __IBlockFormats_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IBlockFormats;
  struct IBlockFormats : public IDispatch {
  public:
    virtual HRESULT WINAPI get__NewEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI get_Count(long *p) = 0;
    virtual HRESULT WINAPI Item(VARIANT *pvarIndex,BSTR *pbstrBlockFormat) = 0;
  };
  HRESULT WINAPI IBlockFormats_get__NewEnum_Proxy(IBlockFormats *This,IUnknown **p);
  void __RPC_STUB IBlockFormats_get__NewEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IBlockFormats_get_Count_Proxy(IBlockFormats *This,long *p);
  void __RPC_STUB IBlockFormats_get_Count_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IBlockFormats_Item_Proxy(IBlockFormats *This,VARIANT *pvarIndex,BSTR *pbstrBlockFormat);
  void __RPC_STUB IBlockFormats_Item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IFontNames_INTERFACE_DEFINED__
#define __IFontNames_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IFontNames;
  struct IFontNames : public IDispatch {
  public:
    virtual HRESULT WINAPI get__NewEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI get_Count(long *p) = 0;
    virtual HRESULT WINAPI Item(VARIANT *pvarIndex,BSTR *pbstrFontName) = 0;
  };
  HRESULT WINAPI IFontNames_get__NewEnum_Proxy(IFontNames *This,IUnknown **p);
  void __RPC_STUB IFontNames_get__NewEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IFontNames_get_Count_Proxy(IFontNames *This,long *p);
  void __RPC_STUB IFontNames_get_Count_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IFontNames_Item_Proxy(IFontNames *This,VARIANT *pvarIndex,BSTR *pbstrFontName);
  void __RPC_STUB IFontNames_Item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ICSSFilter_INTERFACE_DEFINED__
#define __ICSSFilter_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ICSSFilter;
  struct ICSSFilter : public IUnknown {
  public:
    virtual HRESULT WINAPI SetSite(ICSSFilterSite *pSink) = 0;
    virtual HRESULT WINAPI OnAmbientPropertyChange(LONG dispid) = 0;
  };
  HRESULT WINAPI ICSSFilter_SetSite_Proxy(ICSSFilter *This,ICSSFilterSite *pSink);
  void __RPC_STUB ICSSFilter_SetSite_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ICSSFilter_OnAmbientPropertyChange_Proxy(ICSSFilter *This,LONG dispid);
  void __RPC_STUB ICSSFilter_OnAmbientPropertyChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISecureUrlHost_INTERFACE_DEFINED__
#define __ISecureUrlHost_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ISecureUrlHost;
  struct ISecureUrlHost : public IUnknown {
  public:
    virtual HRESULT WINAPI ValidateSecureUrl(WINBOOL *pfAllow,OLECHAR *pchUrlInQuestion,DWORD dwFlags) = 0;
  };
  HRESULT WINAPI ISecureUrlHost_ValidateSecureUrl_Proxy(ISecureUrlHost *This,WINBOOL *pfAllow,OLECHAR *pchUrlInQuestion,DWORD dwFlags);
  void __RPC_STUB ISecureUrlHost_ValidateSecureUrl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMarkupServices_INTERFACE_DEFINED__
#define __IMarkupServices_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMarkupServices;
  struct IMarkupServices : public IUnknown {
  public:
    virtual HRESULT WINAPI CreateMarkupPointer(IMarkupPointer **ppPointer) = 0;
    virtual HRESULT WINAPI CreateMarkupContainer(IMarkupContainer **ppMarkupContainer) = 0;
    virtual HRESULT WINAPI CreateElement(ELEMENT_TAG_ID tagID,OLECHAR *pchAttributes,IHTMLElement **ppElement) = 0;
    virtual HRESULT WINAPI CloneElement(IHTMLElement *pElemCloneThis,IHTMLElement **ppElementTheClone) = 0;
    virtual HRESULT WINAPI InsertElement(IHTMLElement *pElementInsert,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish) = 0;
    virtual HRESULT WINAPI RemoveElement(IHTMLElement *pElementRemove) = 0;
    virtual HRESULT WINAPI Remove(IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish) = 0;
    virtual HRESULT WINAPI Copy(IMarkupPointer *pPointerSourceStart,IMarkupPointer *pPointerSourceFinish,IMarkupPointer *pPointerTarget) = 0;
    virtual HRESULT WINAPI Move(IMarkupPointer *pPointerSourceStart,IMarkupPointer *pPointerSourceFinish,IMarkupPointer *pPointerTarget) = 0;
    virtual HRESULT WINAPI InsertText(OLECHAR *pchText,long cch,IMarkupPointer *pPointerTarget) = 0;
    virtual HRESULT WINAPI ParseString(OLECHAR *pchHTML,DWORD dwFlags,IMarkupContainer **ppContainerResult,IMarkupPointer *ppPointerStart,IMarkupPointer *ppPointerFinish) = 0;
    virtual HRESULT WINAPI ParseGlobal(HGLOBAL hglobalHTML,DWORD dwFlags,IMarkupContainer **ppContainerResult,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish) = 0;
    virtual HRESULT WINAPI IsScopedElement(IHTMLElement *pElement,WINBOOL *pfScoped) = 0;
    virtual HRESULT WINAPI GetElementTagId(IHTMLElement *pElement,ELEMENT_TAG_ID *ptagId) = 0;
    virtual HRESULT WINAPI GetTagIDForName(BSTR bstrName,ELEMENT_TAG_ID *ptagId) = 0;
    virtual HRESULT WINAPI GetNameForTagID(ELEMENT_TAG_ID tagId,BSTR *pbstrName) = 0;
    virtual HRESULT WINAPI MovePointersToRange(IHTMLTxtRange *pIRange,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish) = 0;
    virtual HRESULT WINAPI MoveRangeToPointers(IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish,IHTMLTxtRange *pIRange) = 0;
    virtual HRESULT WINAPI BeginUndoUnit(OLECHAR *pchTitle) = 0;
    virtual HRESULT WINAPI EndUndoUnit(void) = 0;
  };
  HRESULT WINAPI IMarkupServices_CreateMarkupPointer_Proxy(IMarkupServices *This,IMarkupPointer **ppPointer);
  void __RPC_STUB IMarkupServices_CreateMarkupPointer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_CreateMarkupContainer_Proxy(IMarkupServices *This,IMarkupContainer **ppMarkupContainer);
  void __RPC_STUB IMarkupServices_CreateMarkupContainer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_CreateElement_Proxy(IMarkupServices *This,ELEMENT_TAG_ID tagID,OLECHAR *pchAttributes,IHTMLElement **ppElement);
  void __RPC_STUB IMarkupServices_CreateElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_CloneElement_Proxy(IMarkupServices *This,IHTMLElement *pElemCloneThis,IHTMLElement **ppElementTheClone);
  void __RPC_STUB IMarkupServices_CloneElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_InsertElement_Proxy(IMarkupServices *This,IHTMLElement *pElementInsert,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish);
  void __RPC_STUB IMarkupServices_InsertElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_RemoveElement_Proxy(IMarkupServices *This,IHTMLElement *pElementRemove);
  void __RPC_STUB IMarkupServices_RemoveElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_Remove_Proxy(IMarkupServices *This,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish);
  void __RPC_STUB IMarkupServices_Remove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_Copy_Proxy(IMarkupServices *This,IMarkupPointer *pPointerSourceStart,IMarkupPointer *pPointerSourceFinish,IMarkupPointer *pPointerTarget);
  void __RPC_STUB IMarkupServices_Copy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_Move_Proxy(IMarkupServices *This,IMarkupPointer *pPointerSourceStart,IMarkupPointer *pPointerSourceFinish,IMarkupPointer *pPointerTarget);
  void __RPC_STUB IMarkupServices_Move_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_InsertText_Proxy(IMarkupServices *This,OLECHAR *pchText,long cch,IMarkupPointer *pPointerTarget);
  void __RPC_STUB IMarkupServices_InsertText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_ParseString_Proxy(IMarkupServices *This,OLECHAR *pchHTML,DWORD dwFlags,IMarkupContainer **ppContainerResult,IMarkupPointer *ppPointerStart,IMarkupPointer *ppPointerFinish);
  void __RPC_STUB IMarkupServices_ParseString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_ParseGlobal_Proxy(IMarkupServices *This,HGLOBAL hglobalHTML,DWORD dwFlags,IMarkupContainer **ppContainerResult,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish);
  void __RPC_STUB IMarkupServices_ParseGlobal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_IsScopedElement_Proxy(IMarkupServices *This,IHTMLElement *pElement,WINBOOL *pfScoped);
  void __RPC_STUB IMarkupServices_IsScopedElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_GetElementTagId_Proxy(IMarkupServices *This,IHTMLElement *pElement,ELEMENT_TAG_ID *ptagId);
  void __RPC_STUB IMarkupServices_GetElementTagId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_GetTagIDForName_Proxy(IMarkupServices *This,BSTR bstrName,ELEMENT_TAG_ID *ptagId);
  void __RPC_STUB IMarkupServices_GetTagIDForName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_GetNameForTagID_Proxy(IMarkupServices *This,ELEMENT_TAG_ID tagId,BSTR *pbstrName);
  void __RPC_STUB IMarkupServices_GetNameForTagID_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_MovePointersToRange_Proxy(IMarkupServices *This,IHTMLTxtRange *pIRange,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish);
  void __RPC_STUB IMarkupServices_MovePointersToRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_MoveRangeToPointers_Proxy(IMarkupServices *This,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish,IHTMLTxtRange *pIRange);
  void __RPC_STUB IMarkupServices_MoveRangeToPointers_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_BeginUndoUnit_Proxy(IMarkupServices *This,OLECHAR *pchTitle);
  void __RPC_STUB IMarkupServices_BeginUndoUnit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_EndUndoUnit_Proxy(IMarkupServices *This);
  void __RPC_STUB IMarkupServices_EndUndoUnit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMarkupServices2_INTERFACE_DEFINED__
#define __IMarkupServices2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMarkupServices2;
  struct IMarkupServices2 : public IMarkupServices {
  public:
    virtual HRESULT WINAPI ParseGlobalEx(HGLOBAL hglobalHTML,DWORD dwFlags,IMarkupContainer *pContext,IMarkupContainer **ppContainerResult,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish) = 0;
    virtual HRESULT WINAPI ValidateElements(IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish,IMarkupPointer *pPointerTarget,IMarkupPointer *pPointerStatus,IHTMLElement **ppElemFailBottom,IHTMLElement **ppElemFailTop) = 0;
    virtual HRESULT WINAPI SaveSegmentsToClipboard(ISegmentList *pSegmentList,DWORD dwFlags) = 0;
  };
  HRESULT WINAPI IMarkupServices2_ParseGlobalEx_Proxy(IMarkupServices2 *This,HGLOBAL hglobalHTML,DWORD dwFlags,IMarkupContainer *pContext,IMarkupContainer **ppContainerResult,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish);
  void __RPC_STUB IMarkupServices2_ParseGlobalEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices2_ValidateElements_Proxy(IMarkupServices2 *This,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish,IMarkupPointer *pPointerTarget,IMarkupPointer *pPointerStatus,IHTMLElement **ppElemFailBottom,IHTMLElement **ppElemFailTop);
  void __RPC_STUB IMarkupServices2_ValidateElements_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices2_SaveSegmentsToClipboard_Proxy(IMarkupServices2 *This,ISegmentList *pSegmentList,DWORD dwFlags);
  void __RPC_STUB IMarkupServices2_SaveSegmentsToClipboard_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLChangePlayback_INTERFACE_DEFINED__
#define __IHTMLChangePlayback_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLChangePlayback;
  struct IHTMLChangePlayback : public IUnknown {
  public:
    virtual HRESULT WINAPI ExecChange(BYTE *pbRecord,WINBOOL fForward) = 0;
  };
  HRESULT WINAPI IHTMLChangePlayback_ExecChange_Proxy(IHTMLChangePlayback *This,BYTE *pbRecord,WINBOOL fForward);
  void __RPC_STUB IHTMLChangePlayback_ExecChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMarkupPointer2_INTERFACE_DEFINED__
#define __IMarkupPointer2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMarkupPointer2;
  struct IMarkupPointer2 : public IMarkupPointer {
  public:
    virtual HRESULT WINAPI IsAtWordBreak(WINBOOL *pfAtBreak) = 0;
    virtual HRESULT WINAPI GetMarkupPosition(long *plMP) = 0;
    virtual HRESULT WINAPI MoveToMarkupPosition(IMarkupContainer *pContainer,long lMP) = 0;
    virtual HRESULT WINAPI MoveUnitBounded(MOVEUNIT_ACTION muAction,IMarkupPointer *pIBoundary) = 0;
    virtual HRESULT WINAPI IsInsideURL(IMarkupPointer *pRight,WINBOOL *pfResult) = 0;
    virtual HRESULT WINAPI MoveToContent(IHTMLElement *pIElement,WINBOOL fAtStart) = 0;
  };
  HRESULT WINAPI IMarkupPointer2_IsAtWordBreak_Proxy(IMarkupPointer2 *This,WINBOOL *pfAtBreak);
  void __RPC_STUB IMarkupPointer2_IsAtWordBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer2_GetMarkupPosition_Proxy(IMarkupPointer2 *This,long *plMP);
  void __RPC_STUB IMarkupPointer2_GetMarkupPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer2_MoveToMarkupPosition_Proxy(IMarkupPointer2 *This,IMarkupContainer *pContainer,long lMP);
  void __RPC_STUB IMarkupPointer2_MoveToMarkupPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer2_MoveUnitBounded_Proxy(IMarkupPointer2 *This,MOVEUNIT_ACTION muAction,IMarkupPointer *pIBoundary);
  void __RPC_STUB IMarkupPointer2_MoveUnitBounded_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer2_IsInsideURL_Proxy(IMarkupPointer2 *This,IMarkupPointer *pRight,WINBOOL *pfResult);
  void __RPC_STUB IMarkupPointer2_IsInsideURL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer2_MoveToContent_Proxy(IMarkupPointer2 *This,IHTMLElement *pIElement,WINBOOL fAtStart);
  void __RPC_STUB IMarkupPointer2_MoveToContent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMarkupTextFrags_INTERFACE_DEFINED__
#define __IMarkupTextFrags_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMarkupTextFrags;
  struct IMarkupTextFrags : public IUnknown {
  public:
    virtual HRESULT WINAPI GetTextFragCount(long *pcFrags) = 0;
    virtual HRESULT WINAPI GetTextFrag(long iFrag,BSTR *pbstrFrag,IMarkupPointer *pPointerFrag) = 0;
    virtual HRESULT WINAPI RemoveTextFrag(long iFrag) = 0;
    virtual HRESULT WINAPI InsertTextFrag(long iFrag,BSTR bstrInsert,IMarkupPointer *pPointerInsert) = 0;
    virtual HRESULT WINAPI FindTextFragFromMarkupPointer(IMarkupPointer *pPointerFind,long *piFrag,WINBOOL *pfFragFound) = 0;
  };
  HRESULT WINAPI IMarkupTextFrags_GetTextFragCount_Proxy(IMarkupTextFrags *This,long *pcFrags);
  void __RPC_STUB IMarkupTextFrags_GetTextFragCount_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupTextFrags_GetTextFrag_Proxy(IMarkupTextFrags *This,long iFrag,BSTR *pbstrFrag,IMarkupPointer *pPointerFrag);
  void __RPC_STUB IMarkupTextFrags_GetTextFrag_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupTextFrags_RemoveTextFrag_Proxy(IMarkupTextFrags *This,long iFrag);
  void __RPC_STUB IMarkupTextFrags_RemoveTextFrag_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupTextFrags_InsertTextFrag_Proxy(IMarkupTextFrags *This,long iFrag,BSTR bstrInsert,IMarkupPointer *pPointerInsert);
  void __RPC_STUB IMarkupTextFrags_InsertTextFrag_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupTextFrags_FindTextFragFromMarkupPointer_Proxy(IMarkupTextFrags *This,IMarkupPointer *pPointerFind,long *piFrag,WINBOOL *pfFragFound);
  void __RPC_STUB IMarkupTextFrags_FindTextFragFromMarkupPointer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXMLGenericParse_INTERFACE_DEFINED__
#define __IXMLGenericParse_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IXMLGenericParse;
  struct IXMLGenericParse : public IUnknown {
  public:
    virtual HRESULT WINAPI SetGenericParse(VARIANT_BOOL fDoGeneric) = 0;
  };
  HRESULT WINAPI IXMLGenericParse_SetGenericParse_Proxy(IXMLGenericParse *This,VARIANT_BOOL fDoGeneric);
  void __RPC_STUB IXMLGenericParse_SetGenericParse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLEditHost_INTERFACE_DEFINED__
#define __IHTMLEditHost_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEditHost;
  struct IHTMLEditHost : public IUnknown {
  public:
    virtual HRESULT WINAPI SnapRect(IHTMLElement *pIElement,RECT *prcNew,ELEMENT_CORNER eHandle) = 0;
  };
  HRESULT WINAPI IHTMLEditHost_SnapRect_Proxy(IHTMLEditHost *This,IHTMLElement *pIElement,RECT *prcNew,ELEMENT_CORNER eHandle);
  void __RPC_STUB IHTMLEditHost_SnapRect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLEditHost2_INTERFACE_DEFINED__
#define __IHTMLEditHost2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEditHost2;
  struct IHTMLEditHost2 : public IHTMLEditHost {
  public:
    virtual HRESULT WINAPI PreDrag(void) = 0;
  };
  HRESULT WINAPI IHTMLEditHost2_PreDrag_Proxy(IHTMLEditHost2 *This);
  void __RPC_STUB IHTMLEditHost2_PreDrag_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISequenceNumber_INTERFACE_DEFINED__
#define __ISequenceNumber_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ISequenceNumber;
  struct ISequenceNumber : public IUnknown {
  public:
    virtual HRESULT WINAPI GetSequenceNumber(long nCurrent,long *pnNew) = 0;
  };
  HRESULT WINAPI ISequenceNumber_GetSequenceNumber_Proxy(ISequenceNumber *This,long nCurrent,long *pnNew);
  void __RPC_STUB ISequenceNumber_GetSequenceNumber_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IIMEServices_INTERFACE_DEFINED__
#define __IIMEServices_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IIMEServices;
  struct IIMEServices : public IUnknown {
  public:
    virtual HRESULT WINAPI GetActiveIMM(IActiveIMMApp **ppActiveIMM) = 0;
  };
  HRESULT WINAPI IIMEServices_GetActiveIMM_Proxy(IIMEServices *This,IActiveIMMApp **ppActiveIMM);
  void __RPC_STUB IIMEServices_GetActiveIMM_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISelectionServicesListener_INTERFACE_DEFINED__
#define __ISelectionServicesListener_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ISelectionServicesListener;
  struct ISelectionServicesListener : public IUnknown {
  public:
    virtual HRESULT WINAPI BeginSelectionUndo(void) = 0;
    virtual HRESULT WINAPI EndSelectionUndo(void) = 0;
    virtual HRESULT WINAPI OnSelectedElementExit(IMarkupPointer *pIElementStart,IMarkupPointer *pIElementEnd,IMarkupPointer *pIElementContentStart,IMarkupPointer *pIElementContentEnd) = 0;
    virtual HRESULT WINAPI OnChangeType(SELECTION_TYPE eType,ISelectionServicesListener *pIListener) = 0;
    virtual HRESULT WINAPI GetTypeDetail(BSTR *pTypeDetail) = 0;
  };
  HRESULT WINAPI ISelectionServicesListener_BeginSelectionUndo_Proxy(ISelectionServicesListener *This);
  void __RPC_STUB ISelectionServicesListener_BeginSelectionUndo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISelectionServicesListener_EndSelectionUndo_Proxy(ISelectionServicesListener *This);
  void __RPC_STUB ISelectionServicesListener_EndSelectionUndo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISelectionServicesListener_OnSelectedElementExit_Proxy(ISelectionServicesListener *This,IMarkupPointer *pIElementStart,IMarkupPointer *pIElementEnd,IMarkupPointer *pIElementContentStart,IMarkupPointer *pIElementContentEnd);
  void __RPC_STUB ISelectionServicesListener_OnSelectedElementExit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISelectionServicesListener_OnChangeType_Proxy(ISelectionServicesListener *This,SELECTION_TYPE eType,ISelectionServicesListener *pIListener);
  void __RPC_STUB ISelectionServicesListener_OnChangeType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISelectionServicesListener_GetTypeDetail_Proxy(ISelectionServicesListener *This,BSTR *pTypeDetail);
  void __RPC_STUB ISelectionServicesListener_GetTypeDetail_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISelectionServices_INTERFACE_DEFINED__
#define __ISelectionServices_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ISelectionServices;
  struct ISelectionServices : public IUnknown {
  public:
    virtual HRESULT WINAPI SetSelectionType(SELECTION_TYPE eType,ISelectionServicesListener *pIListener) = 0;
    virtual HRESULT WINAPI GetMarkupContainer(IMarkupContainer **ppIContainer) = 0;
    virtual HRESULT WINAPI AddSegment(IMarkupPointer *pIStart,IMarkupPointer *pIEnd,ISegment **ppISegmentAdded) = 0;
    virtual HRESULT WINAPI AddElementSegment(IHTMLElement *pIElement,IElementSegment **ppISegmentAdded) = 0;
    virtual HRESULT WINAPI RemoveSegment(ISegment *pISegment) = 0;
    virtual HRESULT WINAPI GetSelectionServicesListener(ISelectionServicesListener **ppISelectionServicesListener) = 0;
  };
  HRESULT WINAPI ISelectionServices_SetSelectionType_Proxy(ISelectionServices *This,SELECTION_TYPE eType,ISelectionServicesListener *pIListener);
  void __RPC_STUB ISelectionServices_SetSelectionType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISelectionServices_GetMarkupContainer_Proxy(ISelectionServices *This,IMarkupContainer **ppIContainer);
  void __RPC_STUB ISelectionServices_GetMarkupContainer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISelectionServices_AddSegment_Proxy(ISelectionServices *This,IMarkupPointer *pIStart,IMarkupPointer *pIEnd,ISegment **ppISegmentAdded);
  void __RPC_STUB ISelectionServices_AddSegment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISelectionServices_AddElementSegment_Proxy(ISelectionServices *This,IHTMLElement *pIElement,IElementSegment **ppISegmentAdded);
  void __RPC_STUB ISelectionServices_AddElementSegment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISelectionServices_RemoveSegment_Proxy(ISelectionServices *This,ISegment *pISegment);
  void __RPC_STUB ISelectionServices_RemoveSegment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISelectionServices_GetSelectionServicesListener_Proxy(ISelectionServices *This,ISelectionServicesListener **ppISelectionServicesListener);
  void __RPC_STUB ISelectionServices_GetSelectionServicesListener_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLEditDesigner_INTERFACE_DEFINED__
#define __IHTMLEditDesigner_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEditDesigner;
  struct IHTMLEditDesigner : public IUnknown {
  public:
    virtual HRESULT WINAPI PreHandleEvent(DISPID inEvtDispId,IHTMLEventObj *pIEventObj) = 0;
    virtual HRESULT WINAPI PostHandleEvent(DISPID inEvtDispId,IHTMLEventObj *pIEventObj) = 0;
    virtual HRESULT WINAPI TranslateAccelerator(DISPID inEvtDispId,IHTMLEventObj *pIEventObj) = 0;
    virtual HRESULT WINAPI PostEditorEventNotify(DISPID inEvtDispId,IHTMLEventObj *pIEventObj) = 0;
  };
  HRESULT WINAPI IHTMLEditDesigner_PreHandleEvent_Proxy(IHTMLEditDesigner *This,DISPID inEvtDispId,IHTMLEventObj *pIEventObj);
  void __RPC_STUB IHTMLEditDesigner_PreHandleEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditDesigner_PostHandleEvent_Proxy(IHTMLEditDesigner *This,DISPID inEvtDispId,IHTMLEventObj *pIEventObj);
  void __RPC_STUB IHTMLEditDesigner_PostHandleEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditDesigner_TranslateAccelerator_Proxy(IHTMLEditDesigner *This,DISPID inEvtDispId,IHTMLEventObj *pIEventObj);
  void __RPC_STUB IHTMLEditDesigner_TranslateAccelerator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditDesigner_PostEditorEventNotify_Proxy(IHTMLEditDesigner *This,DISPID inEvtDispId,IHTMLEventObj *pIEventObj);
  void __RPC_STUB IHTMLEditDesigner_PostEditorEventNotify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLEditServices_INTERFACE_DEFINED__
#define __IHTMLEditServices_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEditServices;
  struct IHTMLEditServices : public IUnknown {
  public:
    virtual HRESULT WINAPI AddDesigner(IHTMLEditDesigner *pIDesigner) = 0;
    virtual HRESULT WINAPI RemoveDesigner(IHTMLEditDesigner *pIDesigner) = 0;
    virtual HRESULT WINAPI GetSelectionServices(IMarkupContainer *pIContainer,ISelectionServices **ppSelSvc) = 0;
    virtual HRESULT WINAPI MoveToSelectionAnchor(IMarkupPointer *pIStartAnchor) = 0;
    virtual HRESULT WINAPI MoveToSelectionEnd(IMarkupPointer *pIEndAnchor) = 0;
    virtual HRESULT WINAPI SelectRange(IMarkupPointer *pStart,IMarkupPointer *pEnd,SELECTION_TYPE eType) = 0;
  };
  HRESULT WINAPI IHTMLEditServices_AddDesigner_Proxy(IHTMLEditServices *This,IHTMLEditDesigner *pIDesigner);
  void __RPC_STUB IHTMLEditServices_AddDesigner_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditServices_RemoveDesigner_Proxy(IHTMLEditServices *This,IHTMLEditDesigner *pIDesigner);
  void __RPC_STUB IHTMLEditServices_RemoveDesigner_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditServices_GetSelectionServices_Proxy(IHTMLEditServices *This,IMarkupContainer *pIContainer,ISelectionServices **ppSelSvc);
  void __RPC_STUB IHTMLEditServices_GetSelectionServices_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditServices_MoveToSelectionAnchor_Proxy(IHTMLEditServices *This,IMarkupPointer *pIStartAnchor);
  void __RPC_STUB IHTMLEditServices_MoveToSelectionAnchor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditServices_MoveToSelectionEnd_Proxy(IHTMLEditServices *This,IMarkupPointer *pIEndAnchor);
  void __RPC_STUB IHTMLEditServices_MoveToSelectionEnd_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditServices_SelectRange_Proxy(IHTMLEditServices *This,IMarkupPointer *pStart,IMarkupPointer *pEnd,SELECTION_TYPE eType);
  void __RPC_STUB IHTMLEditServices_SelectRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLEditServices2_INTERFACE_DEFINED__
#define __IHTMLEditServices2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEditServices2;
  struct IHTMLEditServices2 : public IHTMLEditServices {
  public:
    virtual HRESULT WINAPI MoveToSelectionAnchorEx(IDisplayPointer *pIStartAnchor) = 0;
    virtual HRESULT WINAPI MoveToSelectionEndEx(IDisplayPointer *pIEndAnchor) = 0;
    virtual HRESULT WINAPI FreezeVirtualCaretPos(WINBOOL fReCompute) = 0;
    virtual HRESULT WINAPI UnFreezeVirtualCaretPos(WINBOOL fReset) = 0;
  };
  HRESULT WINAPI IHTMLEditServices2_MoveToSelectionAnchorEx_Proxy(IHTMLEditServices2 *This,IDisplayPointer *pIStartAnchor);
  void __RPC_STUB IHTMLEditServices2_MoveToSelectionAnchorEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditServices2_MoveToSelectionEndEx_Proxy(IHTMLEditServices2 *This,IDisplayPointer *pIEndAnchor);
  void __RPC_STUB IHTMLEditServices2_MoveToSelectionEndEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditServices2_FreezeVirtualCaretPos_Proxy(IHTMLEditServices2 *This,WINBOOL fReCompute);
  void __RPC_STUB IHTMLEditServices2_FreezeVirtualCaretPos_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditServices2_UnFreezeVirtualCaretPos_Proxy(IHTMLEditServices2 *This,WINBOOL fReset);
  void __RPC_STUB IHTMLEditServices2_UnFreezeVirtualCaretPos_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLComputedStyle_INTERFACE_DEFINED__
#define __IHTMLComputedStyle_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLComputedStyle;
  struct IHTMLComputedStyle : public IUnknown {
  public:
    virtual HRESULT WINAPI get_bold(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_italic(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_underline(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_overline(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_strikeOut(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_subScript(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_superScript(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_explicitFace(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_fontWeight(long *p) = 0;
    virtual HRESULT WINAPI get_fontSize(long *p) = 0;
    virtual HRESULT WINAPI get_fontName(TCHAR *p) = 0;
    virtual HRESULT WINAPI get_hasBgColor(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_textColor(DWORD *p) = 0;
    virtual HRESULT WINAPI get_backgroundColor(DWORD *p) = 0;
    virtual HRESULT WINAPI get_preFormatted(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_direction(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_blockDirection(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_OL(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI IsEqual(IHTMLComputedStyle *pComputedStyle,VARIANT_BOOL *pfEqual) = 0;
  };
  HRESULT WINAPI IHTMLComputedStyle_get_bold_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_bold_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_italic_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_italic_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_underline_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_underline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_overline_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_overline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_strikeOut_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_strikeOut_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_subScript_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_subScript_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_superScript_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_superScript_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_explicitFace_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_explicitFace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_fontWeight_Proxy(IHTMLComputedStyle *This,long *p);
  void __RPC_STUB IHTMLComputedStyle_get_fontWeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_fontSize_Proxy(IHTMLComputedStyle *This,long *p);
  void __RPC_STUB IHTMLComputedStyle_get_fontSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_fontName_Proxy(IHTMLComputedStyle *This,TCHAR *p);
  void __RPC_STUB IHTMLComputedStyle_get_fontName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_hasBgColor_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_hasBgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_textColor_Proxy(IHTMLComputedStyle *This,DWORD *p);
  void __RPC_STUB IHTMLComputedStyle_get_textColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_backgroundColor_Proxy(IHTMLComputedStyle *This,DWORD *p);
  void __RPC_STUB IHTMLComputedStyle_get_backgroundColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_preFormatted_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_preFormatted_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_direction_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_direction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_blockDirection_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_blockDirection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_OL_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_OL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_IsEqual_Proxy(IHTMLComputedStyle *This,IHTMLComputedStyle *pComputedStyle,VARIANT_BOOL *pfEqual);
  void __RPC_STUB IHTMLComputedStyle_IsEqual_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

  EXTERN_C const CLSID CLSID_HtmlDlgSafeHelper;
#ifdef __cplusplus
  class HtmlDlgSafeHelper;
#endif
  EXTERN_C const CLSID CLSID_BlockFormats;
#ifdef __cplusplus
  class BlockFormats;
#endif
  EXTERN_C const CLSID CLSID_FontNames;
#ifdef __cplusplus
  class FontNames;
#endif

#ifndef __HTMLNamespaceEvents_DISPINTERFACE_DEFINED__
#define __HTMLNamespaceEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLNamespaceEvents;
  struct HTMLNamespaceEvents : public IDispatch {
  };
#endif

#ifndef __IHTMLNamespace_INTERFACE_DEFINED__
#define __IHTMLNamespace_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLNamespace;
  struct IHTMLNamespace : public IDispatch {
  public:
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI get_urn(BSTR *p) = 0;
    virtual HRESULT WINAPI get_tagNames(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_readyState(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onreadystatechange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onreadystatechange(VARIANT *p) = 0;
    virtual HRESULT WINAPI doImport(BSTR bstrImplementationUrl) = 0;
    virtual HRESULT WINAPI attachEvent(BSTR event,IDispatch *pDisp,VARIANT_BOOL *pfResult) = 0;
    virtual HRESULT WINAPI detachEvent(BSTR event,IDispatch *pDisp) = 0;
  };
  HRESULT WINAPI IHTMLNamespace_get_name_Proxy(IHTMLNamespace *This,BSTR *p);
  void __RPC_STUB IHTMLNamespace_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespace_get_urn_Proxy(IHTMLNamespace *This,BSTR *p);
  void __RPC_STUB IHTMLNamespace_get_urn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespace_get_tagNames_Proxy(IHTMLNamespace *This,IDispatch **p);
  void __RPC_STUB IHTMLNamespace_get_tagNames_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespace_get_readyState_Proxy(IHTMLNamespace *This,VARIANT *p);
  void __RPC_STUB IHTMLNamespace_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespace_put_onreadystatechange_Proxy(IHTMLNamespace *This,VARIANT v);
  void __RPC_STUB IHTMLNamespace_put_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespace_get_onreadystatechange_Proxy(IHTMLNamespace *This,VARIANT *p);
  void __RPC_STUB IHTMLNamespace_get_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespace_doImport_Proxy(IHTMLNamespace *This,BSTR bstrImplementationUrl);
  void __RPC_STUB IHTMLNamespace_doImport_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespace_attachEvent_Proxy(IHTMLNamespace *This,BSTR event,IDispatch *pDisp,VARIANT_BOOL *pfResult);
  void __RPC_STUB IHTMLNamespace_attachEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespace_detachEvent_Proxy(IHTMLNamespace *This,BSTR event,IDispatch *pDisp);
  void __RPC_STUB IHTMLNamespace_detachEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLNamespaceCollection_INTERFACE_DEFINED__
#define __IHTMLNamespaceCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLNamespaceCollection;
  struct IHTMLNamespaceCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI item(VARIANT index,IDispatch **ppNamespace) = 0;
    virtual HRESULT WINAPI add(BSTR bstrNamespace,BSTR bstrUrn,VARIANT implementationUrl,IDispatch **ppNamespace) = 0;
  };
  HRESULT WINAPI IHTMLNamespaceCollection_get_length_Proxy(IHTMLNamespaceCollection *This,long *p);
  void __RPC_STUB IHTMLNamespaceCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespaceCollection_item_Proxy(IHTMLNamespaceCollection *This,VARIANT index,IDispatch **ppNamespace);
  void __RPC_STUB IHTMLNamespaceCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespaceCollection_add_Proxy(IHTMLNamespaceCollection *This,BSTR bstrNamespace,BSTR bstrUrn,VARIANT implementationUrl,IDispatch **ppNamespace);
  void __RPC_STUB IHTMLNamespaceCollection_add_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif
  EXTERN_C const CLSID CLSID_HTMLNamespace;
#ifdef __cplusplus
  class HTMLNamespace;
#endif
  EXTERN_C const CLSID CLSID_HTMLNamespaceCollection;
#ifdef __cplusplus
  class HTMLNamespaceCollection;
#endif

#ifndef __IHTMLPainter_INTERFACE_DEFINED__
#define __IHTMLPainter_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLPainter;
  struct IHTMLPainter : public IUnknown {
  public:
    virtual HRESULT WINAPI Draw(RECT rcBounds,RECT rcUpdate,LONG lDrawFlags,HDC hdc,LPVOID pvDrawObject) = 0;
    virtual HRESULT WINAPI OnResize(SIZE size) = 0;
    virtual HRESULT WINAPI GetPainterInfo(HTML_PAINTER_INFO *pInfo) = 0;
    virtual HRESULT WINAPI HitTestPoint(POINT pt,WINBOOL *pbHit,LONG *plPartID) = 0;
  };
  HRESULT WINAPI IHTMLPainter_Draw_Proxy(IHTMLPainter *This,RECT rcBounds,RECT rcUpdate,LONG lDrawFlags,HDC hdc,LPVOID pvDrawObject);
  void __RPC_STUB IHTMLPainter_Draw_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPainter_OnResize_Proxy(IHTMLPainter *This,SIZE size);
  void __RPC_STUB IHTMLPainter_OnResize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPainter_GetPainterInfo_Proxy(IHTMLPainter *This,HTML_PAINTER_INFO *pInfo);
  void __RPC_STUB IHTMLPainter_GetPainterInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPainter_HitTestPoint_Proxy(IHTMLPainter *This,POINT pt,WINBOOL *pbHit,LONG *plPartID);
  void __RPC_STUB IHTMLPainter_HitTestPoint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLPaintSite_INTERFACE_DEFINED__
#define __IHTMLPaintSite_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLPaintSite;
  struct IHTMLPaintSite : public IUnknown {
  public:
    virtual HRESULT WINAPI InvalidatePainterInfo(void) = 0;
    virtual HRESULT WINAPI InvalidateRect(RECT *prcInvalid) = 0;
    virtual HRESULT WINAPI InvalidateRegion(HRGN rgnInvalid) = 0;
    virtual HRESULT WINAPI GetDrawInfo(LONG lFlags,HTML_PAINT_DRAW_INFO *pDrawInfo) = 0;
    virtual HRESULT WINAPI TransformGlobalToLocal(POINT ptGlobal,POINT *pptLocal) = 0;
    virtual HRESULT WINAPI TransformLocalToGlobal(POINT ptLocal,POINT *pptGlobal) = 0;
    virtual HRESULT WINAPI GetHitTestCookie(LONG *plCookie) = 0;
  };
  HRESULT WINAPI IHTMLPaintSite_InvalidatePainterInfo_Proxy(IHTMLPaintSite *This);
  void __RPC_STUB IHTMLPaintSite_InvalidatePainterInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPaintSite_InvalidateRect_Proxy(IHTMLPaintSite *This,RECT *prcInvalid);
  void __RPC_STUB IHTMLPaintSite_InvalidateRect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPaintSite_InvalidateRegion_Proxy(IHTMLPaintSite *This,HRGN rgnInvalid);
  void __RPC_STUB IHTMLPaintSite_InvalidateRegion_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPaintSite_GetDrawInfo_Proxy(IHTMLPaintSite *This,LONG lFlags,HTML_PAINT_DRAW_INFO *pDrawInfo);
  void __RPC_STUB IHTMLPaintSite_GetDrawInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPaintSite_TransformGlobalToLocal_Proxy(IHTMLPaintSite *This,POINT ptGlobal,POINT *pptLocal);
  void __RPC_STUB IHTMLPaintSite_TransformGlobalToLocal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPaintSite_TransformLocalToGlobal_Proxy(IHTMLPaintSite *This,POINT ptLocal,POINT *pptGlobal);
  void __RPC_STUB IHTMLPaintSite_TransformLocalToGlobal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPaintSite_GetHitTestCookie_Proxy(IHTMLPaintSite *This,LONG *plCookie);
  void __RPC_STUB IHTMLPaintSite_GetHitTestCookie_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLPainterEventInfo_INTERFACE_DEFINED__
#define __IHTMLPainterEventInfo_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLPainterEventInfo;
  struct IHTMLPainterEventInfo : public IUnknown {
  public:
    virtual HRESULT WINAPI GetEventInfoFlags(long *plEventInfoFlags) = 0;
    virtual HRESULT WINAPI GetEventTarget(IHTMLElement **ppElement) = 0;
    virtual HRESULT WINAPI SetCursor(LONG lPartID) = 0;
    virtual HRESULT WINAPI StringFromPartID(LONG lPartID,BSTR *pbstrPart) = 0;
  };
  HRESULT WINAPI IHTMLPainterEventInfo_GetEventInfoFlags_Proxy(IHTMLPainterEventInfo *This,long *plEventInfoFlags);
  void __RPC_STUB IHTMLPainterEventInfo_GetEventInfoFlags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPainterEventInfo_GetEventTarget_Proxy(IHTMLPainterEventInfo *This,IHTMLElement **ppElement);
  void __RPC_STUB IHTMLPainterEventInfo_GetEventTarget_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPainterEventInfo_SetCursor_Proxy(IHTMLPainterEventInfo *This,LONG lPartID);
  void __RPC_STUB IHTMLPainterEventInfo_SetCursor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPainterEventInfo_StringFromPartID_Proxy(IHTMLPainterEventInfo *This,LONG lPartID,BSTR *pbstrPart);
  void __RPC_STUB IHTMLPainterEventInfo_StringFromPartID_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLPainterOverlay_INTERFACE_DEFINED__
#define __IHTMLPainterOverlay_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLPainterOverlay;
  struct IHTMLPainterOverlay : public IUnknown {
  public:
    virtual HRESULT WINAPI OnMove(RECT rcDevice) = 0;
  };
  HRESULT WINAPI IHTMLPainterOverlay_OnMove_Proxy(IHTMLPainterOverlay *This,RECT rcDevice);
  void __RPC_STUB IHTMLPainterOverlay_OnMove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLIPrintCollection_INTERFACE_DEFINED__
#define __IHTMLIPrintCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLIPrintCollection;
  struct IHTMLIPrintCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(long index,IUnknown **ppIPrint) = 0;
  };
  HRESULT WINAPI IHTMLIPrintCollection_get_length_Proxy(IHTMLIPrintCollection *This,long *p);
  void __RPC_STUB IHTMLIPrintCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIPrintCollection_get__newEnum_Proxy(IHTMLIPrintCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLIPrintCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIPrintCollection_item_Proxy(IHTMLIPrintCollection *This,long index,IUnknown **ppIPrint);
  void __RPC_STUB IHTMLIPrintCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IEnumPrivacyRecords_INTERFACE_DEFINED__
#define __IEnumPrivacyRecords_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IEnumPrivacyRecords;
  struct IEnumPrivacyRecords : public IUnknown {
  public:
    virtual HRESULT WINAPI Reset(void) = 0;
    virtual HRESULT WINAPI GetSize(ULONG *pSize) = 0;
    virtual HRESULT WINAPI GetPrivacyImpacted(WINBOOL *pState) = 0;
    virtual HRESULT WINAPI Next(BSTR *pbstrUrl,BSTR *pbstrPolicyRef,LONG *pdwReserved,DWORD *pdwPrivacyFlags) = 0;
  };
  HRESULT WINAPI IEnumPrivacyRecords_Reset_Proxy(IEnumPrivacyRecords *This);
  void __RPC_STUB IEnumPrivacyRecords_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IEnumPrivacyRecords_GetSize_Proxy(IEnumPrivacyRecords *This,ULONG *pSize);
  void __RPC_STUB IEnumPrivacyRecords_GetSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IEnumPrivacyRecords_GetPrivacyImpacted_Proxy(IEnumPrivacyRecords *This,WINBOOL *pState);
  void __RPC_STUB IEnumPrivacyRecords_GetPrivacyImpacted_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IEnumPrivacyRecords_Next_Proxy(IEnumPrivacyRecords *This,BSTR *pbstrUrl,BSTR *pbstrPolicyRef,LONG *pdwReserved,DWORD *pdwPrivacyFlags);
  void __RPC_STUB IEnumPrivacyRecords_Next_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDialog_INTERFACE_DEFINED__
#define __IHTMLDialog_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDialog;
  struct IHTMLDialog : public IDispatch {
  public:
    virtual HRESULT WINAPI put_dialogTop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_dialogTop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_dialogLeft(VARIANT v) = 0;
    virtual HRESULT WINAPI get_dialogLeft(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_dialogWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_dialogWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_dialogHeight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_dialogHeight(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_dialogArguments(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_menuArguments(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_returnValue(VARIANT v) = 0;
    virtual HRESULT WINAPI get_returnValue(VARIANT *p) = 0;
    virtual HRESULT WINAPI close(void) = 0;
    virtual HRESULT WINAPI toString(BSTR *String) = 0;
  };
  HRESULT WINAPI IHTMLDialog_put_dialogTop_Proxy(IHTMLDialog *This,VARIANT v);
  void __RPC_STUB IHTMLDialog_put_dialogTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_get_dialogTop_Proxy(IHTMLDialog *This,VARIANT *p);
  void __RPC_STUB IHTMLDialog_get_dialogTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_put_dialogLeft_Proxy(IHTMLDialog *This,VARIANT v);
  void __RPC_STUB IHTMLDialog_put_dialogLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_get_dialogLeft_Proxy(IHTMLDialog *This,VARIANT *p);
  void __RPC_STUB IHTMLDialog_get_dialogLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_put_dialogWidth_Proxy(IHTMLDialog *This,VARIANT v);
  void __RPC_STUB IHTMLDialog_put_dialogWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_get_dialogWidth_Proxy(IHTMLDialog *This,VARIANT *p);
  void __RPC_STUB IHTMLDialog_get_dialogWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_put_dialogHeight_Proxy(IHTMLDialog *This,VARIANT v);
  void __RPC_STUB IHTMLDialog_put_dialogHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_get_dialogHeight_Proxy(IHTMLDialog *This,VARIANT *p);
  void __RPC_STUB IHTMLDialog_get_dialogHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_get_dialogArguments_Proxy(IHTMLDialog *This,VARIANT *p);
  void __RPC_STUB IHTMLDialog_get_dialogArguments_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_get_menuArguments_Proxy(IHTMLDialog *This,VARIANT *p);
  void __RPC_STUB IHTMLDialog_get_menuArguments_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_put_returnValue_Proxy(IHTMLDialog *This,VARIANT v);
  void __RPC_STUB IHTMLDialog_put_returnValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_get_returnValue_Proxy(IHTMLDialog *This,VARIANT *p);
  void __RPC_STUB IHTMLDialog_get_returnValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_close_Proxy(IHTMLDialog *This);
  void __RPC_STUB IHTMLDialog_close_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_toString_Proxy(IHTMLDialog *This,BSTR *String);
  void __RPC_STUB IHTMLDialog_toString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDialog2_INTERFACE_DEFINED__
#define __IHTMLDialog2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDialog2;
  struct IHTMLDialog2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_status(BSTR v) = 0;
    virtual HRESULT WINAPI get_status(BSTR *p) = 0;
    virtual HRESULT WINAPI put_resizable(BSTR v) = 0;
    virtual HRESULT WINAPI get_resizable(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLDialog2_put_status_Proxy(IHTMLDialog2 *This,BSTR v);
  void __RPC_STUB IHTMLDialog2_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog2_get_status_Proxy(IHTMLDialog2 *This,BSTR *p);
  void __RPC_STUB IHTMLDialog2_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog2_put_resizable_Proxy(IHTMLDialog2 *This,BSTR v);
  void __RPC_STUB IHTMLDialog2_put_resizable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog2_get_resizable_Proxy(IHTMLDialog2 *This,BSTR *p);
  void __RPC_STUB IHTMLDialog2_get_resizable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDialog3_INTERFACE_DEFINED__
#define __IHTMLDialog3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDialog3;
  struct IHTMLDialog3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_unadorned(BSTR v) = 0;
    virtual HRESULT WINAPI get_unadorned(BSTR *p) = 0;
    virtual HRESULT WINAPI put_dialogHide(BSTR v) = 0;
    virtual HRESULT WINAPI get_dialogHide(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLDialog3_put_unadorned_Proxy(IHTMLDialog3 *This,BSTR v);
  void __RPC_STUB IHTMLDialog3_put_unadorned_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog3_get_unadorned_Proxy(IHTMLDialog3 *This,BSTR *p);
  void __RPC_STUB IHTMLDialog3_get_unadorned_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog3_put_dialogHide_Proxy(IHTMLDialog3 *This,BSTR v);
  void __RPC_STUB IHTMLDialog3_put_dialogHide_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog3_get_dialogHide_Proxy(IHTMLDialog3 *This,BSTR *p);
  void __RPC_STUB IHTMLDialog3_get_dialogHide_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLModelessInit_INTERFACE_DEFINED__
#define __IHTMLModelessInit_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLModelessInit;
  struct IHTMLModelessInit : public IDispatch {
  public:
    virtual HRESULT WINAPI get_parameters(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_optionString(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_moniker(IUnknown **p) = 0;
    virtual HRESULT WINAPI get_document(IUnknown **p) = 0;
  };
  HRESULT WINAPI IHTMLModelessInit_get_parameters_Proxy(IHTMLModelessInit *This,VARIANT *p);
  void __RPC_STUB IHTMLModelessInit_get_parameters_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLModelessInit_get_optionString_Proxy(IHTMLModelessInit *This,VARIANT *p);
  void __RPC_STUB IHTMLModelessInit_get_optionString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLModelessInit_get_moniker_Proxy(IHTMLModelessInit *This,IUnknown **p);
  void __RPC_STUB IHTMLModelessInit_get_moniker_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLModelessInit_get_document_Proxy(IHTMLModelessInit *This,IUnknown **p);
  void __RPC_STUB IHTMLModelessInit_get_document_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

  EXTERN_C const CLSID CLSID_ThreadDialogProcParam;
#ifdef __cplusplus
  class ThreadDialogProcParam;
#endif
  EXTERN_C const CLSID CLSID_HTMLDialog;
#ifdef __cplusplus
  class HTMLDialog;
#endif

#ifndef __IHTMLPopup_INTERFACE_DEFINED__
#define __IHTMLPopup_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLPopup;
  struct IHTMLPopup : public IDispatch {
  public:
    virtual HRESULT WINAPI show(long x,long y,long w,long h,VARIANT *pElement) = 0;
    virtual HRESULT WINAPI hide(void) = 0;
    virtual HRESULT WINAPI get_document(IHTMLDocument **p) = 0;
    virtual HRESULT WINAPI get_isOpen(VARIANT_BOOL *p) = 0;
  };
  HRESULT WINAPI IHTMLPopup_show_Proxy(IHTMLPopup *This,long x,long y,long w,long h,VARIANT *pElement);
  void __RPC_STUB IHTMLPopup_show_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPopup_hide_Proxy(IHTMLPopup *This);
  void __RPC_STUB IHTMLPopup_hide_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPopup_get_document_Proxy(IHTMLPopup *This,IHTMLDocument **p);
  void __RPC_STUB IHTMLPopup_get_document_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPopup_get_isOpen_Proxy(IHTMLPopup *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLPopup_get_isOpen_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLPopup_DISPINTERFACE_DEFINED__
#define __DispHTMLPopup_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLPopup;
  struct DispHTMLPopup : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLPopup;
#ifdef __cplusplus
  class HTMLPopup;
#endif

#ifndef __IHTMLAppBehavior_INTERFACE_DEFINED__
#define __IHTMLAppBehavior_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAppBehavior;
  struct IHTMLAppBehavior : public IDispatch {
  public:
    virtual HRESULT WINAPI put_applicationName(BSTR v) = 0;
    virtual HRESULT WINAPI get_applicationName(BSTR *p) = 0;
    virtual HRESULT WINAPI put_version(BSTR v) = 0;
    virtual HRESULT WINAPI get_version(BSTR *p) = 0;
    virtual HRESULT WINAPI put_icon(BSTR v) = 0;
    virtual HRESULT WINAPI get_icon(BSTR *p) = 0;
    virtual HRESULT WINAPI put_singleInstance(BSTR v) = 0;
    virtual HRESULT WINAPI get_singleInstance(BSTR *p) = 0;
    virtual HRESULT WINAPI put_minimizeButton(BSTR v) = 0;
    virtual HRESULT WINAPI get_minimizeButton(BSTR *p) = 0;
    virtual HRESULT WINAPI put_maximizeButton(BSTR v) = 0;
    virtual HRESULT WINAPI get_maximizeButton(BSTR *p) = 0;
    virtual HRESULT WINAPI put_border(BSTR v) = 0;
    virtual HRESULT WINAPI get_border(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_sysMenu(BSTR v) = 0;
    virtual HRESULT WINAPI get_sysMenu(BSTR *p) = 0;
    virtual HRESULT WINAPI put_caption(BSTR v) = 0;
    virtual HRESULT WINAPI get_caption(BSTR *p) = 0;
    virtual HRESULT WINAPI put_windowState(BSTR v) = 0;
    virtual HRESULT WINAPI get_windowState(BSTR *p) = 0;
    virtual HRESULT WINAPI put_showInTaskBar(BSTR v) = 0;
    virtual HRESULT WINAPI get_showInTaskBar(BSTR *p) = 0;
    virtual HRESULT WINAPI get_commandLine(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLAppBehavior_put_applicationName_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_applicationName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_applicationName_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_applicationName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_version_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_version_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_version_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_version_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_icon_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_icon_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_icon_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_icon_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_singleInstance_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_singleInstance_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_singleInstance_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_singleInstance_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_minimizeButton_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_minimizeButton_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_minimizeButton_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_minimizeButton_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_maximizeButton_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_maximizeButton_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_maximizeButton_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_maximizeButton_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_border_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_border_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_borderStyle_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_borderStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_borderStyle_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_borderStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_sysMenu_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_sysMenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_sysMenu_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_sysMenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_caption_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_caption_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_caption_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_caption_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_windowState_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_windowState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_windowState_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_windowState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_showInTaskBar_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_showInTaskBar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_showInTaskBar_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_showInTaskBar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_commandLine_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_commandLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLAppBehavior2_INTERFACE_DEFINED__
#define __IHTMLAppBehavior2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAppBehavior2;
  struct IHTMLAppBehavior2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_contextMenu(BSTR v) = 0;
    virtual HRESULT WINAPI get_contextMenu(BSTR *p) = 0;
    virtual HRESULT WINAPI put_innerBorder(BSTR v) = 0;
    virtual HRESULT WINAPI get_innerBorder(BSTR *p) = 0;
    virtual HRESULT WINAPI put_scroll(BSTR v) = 0;
    virtual HRESULT WINAPI get_scroll(BSTR *p) = 0;
    virtual HRESULT WINAPI put_scrollFlat(BSTR v) = 0;
    virtual HRESULT WINAPI get_scrollFlat(BSTR *p) = 0;
    virtual HRESULT WINAPI put_selection(BSTR v) = 0;
    virtual HRESULT WINAPI get_selection(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLAppBehavior2_put_contextMenu_Proxy(IHTMLAppBehavior2 *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior2_put_contextMenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior2_get_contextMenu_Proxy(IHTMLAppBehavior2 *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior2_get_contextMenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior2_put_innerBorder_Proxy(IHTMLAppBehavior2 *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior2_put_innerBorder_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior2_get_innerBorder_Proxy(IHTMLAppBehavior2 *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior2_get_innerBorder_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior2_put_scroll_Proxy(IHTMLAppBehavior2 *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior2_put_scroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior2_get_scroll_Proxy(IHTMLAppBehavior2 *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior2_get_scroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior2_put_scrollFlat_Proxy(IHTMLAppBehavior2 *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior2_put_scrollFlat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior2_get_scrollFlat_Proxy(IHTMLAppBehavior2 *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior2_get_scrollFlat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior2_put_selection_Proxy(IHTMLAppBehavior2 *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior2_put_selection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior2_get_selection_Proxy(IHTMLAppBehavior2 *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior2_get_selection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLAppBehavior3_INTERFACE_DEFINED__
#define __IHTMLAppBehavior3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAppBehavior3;
  struct IHTMLAppBehavior3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_navigable(BSTR v) = 0;
    virtual HRESULT WINAPI get_navigable(BSTR *p) = 0;
  };
  HRESULT WINAPI IHTMLAppBehavior3_put_navigable_Proxy(IHTMLAppBehavior3 *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior3_put_navigable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior3_get_navigable_Proxy(IHTMLAppBehavior3 *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior3_get_navigable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLAppBehavior_DISPINTERFACE_DEFINED__
#define __DispHTMLAppBehavior_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLAppBehavior;
  struct DispHTMLAppBehavior : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLAppBehavior;
#ifdef __cplusplus
  class HTMLAppBehavior;
#endif
  EXTERN_C const CLSID CLSID_OldHTMLDocument;
#ifdef __cplusplus
  class OldHTMLDocument;
#endif
  EXTERN_C const CLSID CLSID_OldHTMLFormElement;
#ifdef __cplusplus
  class OldHTMLFormElement;
#endif

#ifndef __DispIHTMLInputButtonElement_DISPINTERFACE_DEFINED__
#define __DispIHTMLInputButtonElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispIHTMLInputButtonElement;
  struct DispIHTMLInputButtonElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLInputButtonElement;
#ifdef __cplusplus
  class HTMLInputButtonElement;
#endif

#ifndef __DispIHTMLInputTextElement_DISPINTERFACE_DEFINED__
#define __DispIHTMLInputTextElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispIHTMLInputTextElement;
  struct DispIHTMLInputTextElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLInputTextElement;
#ifdef __cplusplus
  class HTMLInputTextElement;
#endif

#ifndef __DispIHTMLInputFileElement_DISPINTERFACE_DEFINED__
#define __DispIHTMLInputFileElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispIHTMLInputFileElement;
  struct DispIHTMLInputFileElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLInputFileElement;
#ifdef __cplusplus
  class HTMLInputFileElement;
#endif

#ifndef __DispIHTMLOptionButtonElement_DISPINTERFACE_DEFINED__
#define __DispIHTMLOptionButtonElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispIHTMLOptionButtonElement;
  struct DispIHTMLOptionButtonElement : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLOptionButtonElement;
#ifdef __cplusplus
  class HTMLOptionButtonElement;
#endif

#ifndef __DispIHTMLInputImage_DISPINTERFACE_DEFINED__
#define __DispIHTMLInputImage_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispIHTMLInputImage;
  struct DispIHTMLInputImage : public IDispatch {
  };
#endif
  EXTERN_C const CLSID CLSID_HTMLInputImage;
#ifdef __cplusplus
  class HTMLInputImage;
#endif

#ifndef __IElementNamespace_INTERFACE_DEFINED__
#define __IElementNamespace_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementNamespace;
  struct IElementNamespace : public IUnknown {
  public:
    virtual HRESULT WINAPI AddTag(BSTR bstrTagName,LONG lFlags) = 0;
  };
  HRESULT WINAPI IElementNamespace_AddTag_Proxy(IElementNamespace *This,BSTR bstrTagName,LONG lFlags);
  void __RPC_STUB IElementNamespace_AddTag_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementNamespaceTable_INTERFACE_DEFINED__
#define __IElementNamespaceTable_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementNamespaceTable;
  struct IElementNamespaceTable : public IUnknown {
  public:
    virtual HRESULT WINAPI AddNamespace(BSTR bstrNamespace,BSTR bstrUrn,LONG lFlags,VARIANT *pvarFactory) = 0;
  };
  HRESULT WINAPI IElementNamespaceTable_AddNamespace_Proxy(IElementNamespaceTable *This,BSTR bstrNamespace,BSTR bstrUrn,LONG lFlags,VARIANT *pvarFactory);
  void __RPC_STUB IElementNamespaceTable_AddNamespace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementNamespaceFactory_INTERFACE_DEFINED__
#define __IElementNamespaceFactory_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementNamespaceFactory;
  struct IElementNamespaceFactory : public IUnknown {
  public:
    virtual HRESULT WINAPI Create(IElementNamespace *pNamespace) = 0;
  };
  HRESULT WINAPI IElementNamespaceFactory_Create_Proxy(IElementNamespaceFactory *This,IElementNamespace *pNamespace);
  void __RPC_STUB IElementNamespaceFactory_Create_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementNamespaceFactory2_INTERFACE_DEFINED__
#define __IElementNamespaceFactory2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementNamespaceFactory2;
  struct IElementNamespaceFactory2 : public IElementNamespaceFactory {
  public:
    virtual HRESULT WINAPI CreateWithImplementation(IElementNamespace *pNamespace,BSTR bstrImplementation) = 0;
  };
  HRESULT WINAPI IElementNamespaceFactory2_CreateWithImplementation_Proxy(IElementNamespaceFactory2 *This,IElementNamespace *pNamespace,BSTR bstrImplementation);
  void __RPC_STUB IElementNamespaceFactory2_CreateWithImplementation_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementNamespaceFactoryCallback_INTERFACE_DEFINED__
#define __IElementNamespaceFactoryCallback_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementNamespaceFactoryCallback;
  struct IElementNamespaceFactoryCallback : public IUnknown {
  public:
    virtual HRESULT WINAPI Resolve(BSTR bstrNamespace,BSTR bstrTagName,BSTR bstrAttrs,IElementNamespace *pNamespace) = 0;
  };
  HRESULT WINAPI IElementNamespaceFactoryCallback_Resolve_Proxy(IElementNamespaceFactoryCallback *This,BSTR bstrNamespace,BSTR bstrTagName,BSTR bstrAttrs,IElementNamespace *pNamespace);
  void __RPC_STUB IElementNamespaceFactoryCallback_Resolve_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorSiteOM2_INTERFACE_DEFINED__
#define __IElementBehaviorSiteOM2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorSiteOM2;
  struct IElementBehaviorSiteOM2 : public IElementBehaviorSiteOM {
  public:
    virtual HRESULT WINAPI GetDefaults(IHTMLElementDefaults **ppDefaults) = 0;
  };
  HRESULT WINAPI IElementBehaviorSiteOM2_GetDefaults_Proxy(IElementBehaviorSiteOM2 *This,IHTMLElementDefaults **ppDefaults);
  void __RPC_STUB IElementBehaviorSiteOM2_GetDefaults_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorCategory_INTERFACE_DEFINED__
#define __IElementBehaviorCategory_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorCategory;
  struct IElementBehaviorCategory : public IUnknown {
  public:
    virtual HRESULT WINAPI GetCategory(LPOLESTR *ppchCategory) = 0;
  };
  HRESULT WINAPI IElementBehaviorCategory_GetCategory_Proxy(IElementBehaviorCategory *This,LPOLESTR *ppchCategory);
  void __RPC_STUB IElementBehaviorCategory_GetCategory_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorSiteCategory_INTERFACE_DEFINED__
#define __IElementBehaviorSiteCategory_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorSiteCategory;
  struct IElementBehaviorSiteCategory : public IUnknown {
  public:
    virtual HRESULT WINAPI GetRelatedBehaviors(LONG lDirection,LPOLESTR pchCategory,IEnumUnknown **ppEnumerator) = 0;
  };
  HRESULT WINAPI IElementBehaviorSiteCategory_GetRelatedBehaviors_Proxy(IElementBehaviorSiteCategory *This,LONG lDirection,LPOLESTR pchCategory,IEnumUnknown **ppEnumerator);
  void __RPC_STUB IElementBehaviorSiteCategory_GetRelatedBehaviors_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorSubmit_INTERFACE_DEFINED__
#define __IElementBehaviorSubmit_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorSubmit;
  struct IElementBehaviorSubmit : public IUnknown {
  public:
    virtual HRESULT WINAPI GetSubmitInfo(IHTMLSubmitData *pSubmitData) = 0;
    virtual HRESULT WINAPI Reset(void) = 0;
  };
  HRESULT WINAPI IElementBehaviorSubmit_GetSubmitInfo_Proxy(IElementBehaviorSubmit *This,IHTMLSubmitData *pSubmitData);
  void __RPC_STUB IElementBehaviorSubmit_GetSubmitInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSubmit_Reset_Proxy(IElementBehaviorSubmit *This);
  void __RPC_STUB IElementBehaviorSubmit_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorFocus_INTERFACE_DEFINED__
#define __IElementBehaviorFocus_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorFocus;
  struct IElementBehaviorFocus : public IUnknown {
  public:
    virtual HRESULT WINAPI GetFocusRect(RECT *pRect) = 0;
  };
  HRESULT WINAPI IElementBehaviorFocus_GetFocusRect_Proxy(IElementBehaviorFocus *This,RECT *pRect);
  void __RPC_STUB IElementBehaviorFocus_GetFocusRect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorLayout_INTERFACE_DEFINED__
#define __IElementBehaviorLayout_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorLayout;
  struct IElementBehaviorLayout : public IUnknown {
  public:
    virtual HRESULT WINAPI GetSize(LONG dwFlags,SIZE sizeContent,POINT *pptTranslateBy,POINT *pptTopLeft,SIZE *psizeProposed) = 0;
    virtual HRESULT WINAPI GetLayoutInfo(LONG *plLayoutInfo) = 0;
    virtual HRESULT WINAPI GetPosition(LONG lFlags,POINT *pptTopLeft) = 0;
    virtual HRESULT WINAPI MapSize(SIZE *psizeIn,RECT *prcOut) = 0;
  };
  HRESULT WINAPI IElementBehaviorLayout_GetSize_Proxy(IElementBehaviorLayout *This,LONG dwFlags,SIZE sizeContent,POINT *pptTranslateBy,POINT *pptTopLeft,SIZE *psizeProposed);
  void __RPC_STUB IElementBehaviorLayout_GetSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorLayout_GetLayoutInfo_Proxy(IElementBehaviorLayout *This,LONG *plLayoutInfo);
  void __RPC_STUB IElementBehaviorLayout_GetLayoutInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorLayout_GetPosition_Proxy(IElementBehaviorLayout *This,LONG lFlags,POINT *pptTopLeft);
  void __RPC_STUB IElementBehaviorLayout_GetPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorLayout_MapSize_Proxy(IElementBehaviorLayout *This,SIZE *psizeIn,RECT *prcOut);
  void __RPC_STUB IElementBehaviorLayout_MapSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorLayout2_INTERFACE_DEFINED__
#define __IElementBehaviorLayout2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorLayout2;
  struct IElementBehaviorLayout2 : public IUnknown {
  public:
    virtual HRESULT WINAPI GetTextDescent(LONG *plDescent) = 0;
  };
  HRESULT WINAPI IElementBehaviorLayout2_GetTextDescent_Proxy(IElementBehaviorLayout2 *This,LONG *plDescent);
  void __RPC_STUB IElementBehaviorLayout2_GetTextDescent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorSiteLayout_INTERFACE_DEFINED__
#define __IElementBehaviorSiteLayout_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorSiteLayout;
  struct IElementBehaviorSiteLayout : public IUnknown {
  public:
    virtual HRESULT WINAPI InvalidateLayoutInfo(void) = 0;
    virtual HRESULT WINAPI InvalidateSize(void) = 0;
    virtual HRESULT WINAPI GetMediaResolution(SIZE *psizeResolution) = 0;
  };
  HRESULT WINAPI IElementBehaviorSiteLayout_InvalidateLayoutInfo_Proxy(IElementBehaviorSiteLayout *This);
  void __RPC_STUB IElementBehaviorSiteLayout_InvalidateLayoutInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSiteLayout_InvalidateSize_Proxy(IElementBehaviorSiteLayout *This);
  void __RPC_STUB IElementBehaviorSiteLayout_InvalidateSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSiteLayout_GetMediaResolution_Proxy(IElementBehaviorSiteLayout *This,SIZE *psizeResolution);
  void __RPC_STUB IElementBehaviorSiteLayout_GetMediaResolution_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorSiteLayout2_INTERFACE_DEFINED__
#define __IElementBehaviorSiteLayout2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorSiteLayout2;
  struct IElementBehaviorSiteLayout2 : public IUnknown {
  public:
    virtual HRESULT WINAPI GetFontInfo(LOGFONTW *plf) = 0;
  };
  HRESULT WINAPI IElementBehaviorSiteLayout2_GetFontInfo_Proxy(IElementBehaviorSiteLayout2 *This,LOGFONTW *plf);
  void __RPC_STUB IElementBehaviorSiteLayout2_GetFontInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHostBehaviorInit_INTERFACE_DEFINED__
#define __IHostBehaviorInit_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHostBehaviorInit;
  struct IHostBehaviorInit : public IUnknown {
  public:
    virtual HRESULT WINAPI PopulateNamespaceTable(void) = 0;
  };
  HRESULT WINAPI IHostBehaviorInit_PopulateNamespaceTable_Proxy(IHostBehaviorInit *This);
  void __RPC_STUB IHostBehaviorInit_PopulateNamespaceTable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif
#endif

  unsigned long __RPC_API VARIANT_UserSize(unsigned long *,unsigned long,VARIANT *);
  unsigned char *__RPC_API VARIANT_UserMarshal(unsigned long *,unsigned char *,VARIANT *);
  unsigned char *__RPC_API VARIANT_UserUnmarshal(unsigned long *,unsigned char *,VARIANT *);
  void __RPC_API VARIANT_UserFree(unsigned long *,VARIANT *);

#ifdef __cplusplus
}
#endif
#endif
#endif
